Skip to content

Commit cd57b83

Browse files
committed
audit webhook use network proxy
1 parent 1b38199 commit cd57b83

File tree

4 files changed

+21
-8
lines changed

4 files changed

+21
-8
lines changed

staging/src/k8s.io/apiserver/pkg/server/options/audit.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929

3030
corev1 "k8s.io/api/core/v1"
3131
"k8s.io/apimachinery/pkg/runtime/schema"
32+
utilnet "k8s.io/apimachinery/pkg/util/net"
3233
auditinternal "k8s.io/apiserver/pkg/apis/audit"
3334
auditv1 "k8s.io/apiserver/pkg/apis/audit/v1"
3435
auditv1alpha1 "k8s.io/apiserver/pkg/apis/audit/v1alpha1"
@@ -37,6 +38,7 @@ import (
3738
"k8s.io/apiserver/pkg/audit/policy"
3839
"k8s.io/apiserver/pkg/features"
3940
"k8s.io/apiserver/pkg/server"
41+
"k8s.io/apiserver/pkg/server/egressselector"
4042
utilfeature "k8s.io/apiserver/pkg/util/feature"
4143
pluginbuffered "k8s.io/apiserver/plugin/pkg/audit/buffered"
4244
plugindynamic "k8s.io/apiserver/plugin/pkg/audit/dynamic"
@@ -323,7 +325,16 @@ func (o *AuditOptions) ApplyTo(
323325
if checker == nil {
324326
klog.V(2).Info("No audit policy file provided, no events will be recorded for webhook backend")
325327
} else {
326-
webhookBackend, err = o.WebhookOptions.newUntruncatedBackend()
328+
329+
if c.EgressSelector != nil {
330+
egressDialer, err := c.EgressSelector.Lookup(egressselector.Master.AsNetworkContext())
331+
if err != nil {
332+
return err
333+
}
334+
webhookBackend, err = o.WebhookOptions.newUntruncatedBackend(egressDialer)
335+
} else {
336+
webhookBackend, err = o.WebhookOptions.newUntruncatedBackend(nil)
337+
}
327338
if err != nil {
328339
return err
329340
}
@@ -590,9 +601,9 @@ func (o *AuditWebhookOptions) enabled() bool {
590601

591602
// newUntruncatedBackend returns a webhook backend without the truncate options applied
592603
// this is done so that the same trucate backend can wrap both the webhook and dynamic backends
593-
func (o *AuditWebhookOptions) newUntruncatedBackend() (audit.Backend, error) {
604+
func (o *AuditWebhookOptions) newUntruncatedBackend(customDial utilnet.DialFunc) (audit.Backend, error) {
594605
groupVersion, _ := schema.ParseGroupVersion(o.GroupVersionString)
595-
webhook, err := pluginwebhook.NewBackend(o.ConfigFile, groupVersion, o.InitialBackoff)
606+
webhook, err := pluginwebhook.NewBackend(o.ConfigFile, groupVersion, o.InitialBackoff, customDial)
596607
if err != nil {
597608
return nil, fmt.Errorf("initializing audit webhook: %v", err)
598609
}

staging/src/k8s.io/apiserver/plugin/pkg/audit/webhook/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ go_library(
3131
importpath = "k8s.io/apiserver/plugin/pkg/audit/webhook",
3232
deps = [
3333
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
34+
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
3435
"//staging/src/k8s.io/apiserver/pkg/apis/audit:go_default_library",
3536
"//staging/src/k8s.io/apiserver/pkg/apis/audit/install:go_default_library",
3637
"//staging/src/k8s.io/apiserver/pkg/audit:go_default_library",

staging/src/k8s.io/apiserver/plugin/pkg/audit/webhook/webhook.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"time"
2424

2525
"k8s.io/apimachinery/pkg/runtime/schema"
26+
utilnet "k8s.io/apimachinery/pkg/util/net"
2627
auditinternal "k8s.io/apiserver/pkg/apis/audit"
2728
"k8s.io/apiserver/pkg/apis/audit/install"
2829
"k8s.io/apiserver/pkg/audit"
@@ -60,9 +61,9 @@ func retryOnError(err error) bool {
6061
return false
6162
}
6263

63-
func loadWebhook(configFile string, groupVersion schema.GroupVersion, initialBackoff time.Duration) (*webhook.GenericWebhook, error) {
64+
func loadWebhook(configFile string, groupVersion schema.GroupVersion, initialBackoff time.Duration, customDial utilnet.DialFunc) (*webhook.GenericWebhook, error) {
6465
w, err := webhook.NewGenericWebhook(audit.Scheme, audit.Codecs, configFile,
65-
[]schema.GroupVersion{groupVersion}, initialBackoff, nil)
66+
[]schema.GroupVersion{groupVersion}, initialBackoff, customDial)
6667
w.ShouldRetry = retryOnError
6768
return w, err
6869
}
@@ -86,8 +87,8 @@ func NewDynamicBackend(rc *rest.RESTClient, initialBackoff time.Duration) audit.
8687
}
8788

8889
// NewBackend returns an audit backend that sends events over HTTP to an external service.
89-
func NewBackend(kubeConfigFile string, groupVersion schema.GroupVersion, initialBackoff time.Duration) (audit.Backend, error) {
90-
w, err := loadWebhook(kubeConfigFile, groupVersion, initialBackoff)
90+
func NewBackend(kubeConfigFile string, groupVersion schema.GroupVersion, initialBackoff time.Duration, customDial utilnet.DialFunc) (audit.Backend, error) {
91+
w, err := loadWebhook(kubeConfigFile, groupVersion, initialBackoff, customDial)
9192
if err != nil {
9293
return nil, err
9394
}

staging/src/k8s.io/apiserver/plugin/pkg/audit/webhook/webhook_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func newWebhook(t *testing.T, endpoint string, groupVersion schema.GroupVersion)
106106
// NOTE(ericchiang): Do we need to use a proper serializer?
107107
require.NoError(t, stdjson.NewEncoder(f).Encode(config), "writing kubeconfig")
108108

109-
b, err := NewBackend(f.Name(), groupVersion, DefaultInitialBackoff)
109+
b, err := NewBackend(f.Name(), groupVersion, DefaultInitialBackoff, nil)
110110
require.NoError(t, err, "initializing backend")
111111

112112
return b.(*backend)

0 commit comments

Comments
 (0)