From 21efbfb1e2d72ca9b77097859cffee81b41b2cc8 Mon Sep 17 00:00:00 2001 From: Ilya Lobkov Date: Thu, 28 Sep 2023 18:09:46 +0200 Subject: [PATCH] fix(kuma-cp): default value if metadata field is not set Signed-off-by: Ilya Lobkov --- .../testdata/bootstrap.overridden.golden.yaml | 1 + ...generator.custom-config-minimal-request.golden.yaml | 1 + .../testdata/generator.custom-config.golden.yaml | 1 + .../generator.default-config-token-path.golden.yaml | 1 + .../testdata/generator.default-config.golden.yaml | 1 + .../generator.default-config.kubernetes.golden.yaml | 1 + ...enerator.default-config.kubernetes.ipv6.golden.yaml | 1 + .../generator.metrics-config.kubernetes.golden.yaml | 1 + pkg/xds/generator/admin_proxy_generator.go | 10 +++++++--- 9 files changed, 15 insertions(+), 3 deletions(-) diff --git a/pkg/xds/bootstrap/testdata/bootstrap.overridden.golden.yaml b/pkg/xds/bootstrap/testdata/bootstrap.overridden.golden.yaml index 4e6a2fd716b9..9957b7e56867 100644 --- a/pkg/xds/bootstrap/testdata/bootstrap.overridden.golden.yaml +++ b/pkg/xds/bootstrap/testdata/bootstrap.overridden.golden.yaml @@ -47,6 +47,7 @@ node: id: default.dp-1.default metadata: accessLogSocketPath: /tmp/kuma-al-dp-1.default-default.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.proxyType: dataplane features: [] diff --git a/pkg/xds/bootstrap/testdata/generator.custom-config-minimal-request.golden.yaml b/pkg/xds/bootstrap/testdata/generator.custom-config-minimal-request.golden.yaml index 6573d775b280..7516ae2e46c1 100644 --- a/pkg/xds/bootstrap/testdata/generator.custom-config-minimal-request.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.custom-config-minimal-request.golden.yaml @@ -41,6 +41,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 192.168.0.1 dataplane.admin.port: "9902" dataplane.proxyType: dataplane features: [] diff --git a/pkg/xds/bootstrap/testdata/generator.custom-config.golden.yaml b/pkg/xds/bootstrap/testdata/generator.custom-config.golden.yaml index 51deb4138fa5..11298bee0b82 100644 --- a/pkg/xds/bootstrap/testdata/generator.custom-config.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.custom-config.golden.yaml @@ -47,6 +47,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 192.168.0.1 dataplane.admin.port: "1234" dataplane.proxyType: dataplane dataplane.resource: |2- diff --git a/pkg/xds/bootstrap/testdata/generator.default-config-token-path.golden.yaml b/pkg/xds/bootstrap/testdata/generator.default-config-token-path.golden.yaml index a8ded9877c79..2d70e8993e22 100644 --- a/pkg/xds/bootstrap/testdata/generator.default-config-token-path.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.default-config-token-path.golden.yaml @@ -67,6 +67,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.dns.empty.port: "53002" dataplane.dns.port: "53001" diff --git a/pkg/xds/bootstrap/testdata/generator.default-config.golden.yaml b/pkg/xds/bootstrap/testdata/generator.default-config.golden.yaml index 1089c248e3bd..4d76fb5bb46a 100644 --- a/pkg/xds/bootstrap/testdata/generator.default-config.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.default-config.golden.yaml @@ -47,6 +47,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.dns.empty.port: "53002" dataplane.dns.port: "53001" diff --git a/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.golden.yaml b/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.golden.yaml index 3ce65e92aaa5..2630ce60c828 100644 --- a/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.golden.yaml @@ -37,6 +37,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.proxyType: dataplane features: [] diff --git a/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.ipv6.golden.yaml b/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.ipv6.golden.yaml index 96a277df853f..f25a8b787ec7 100644 --- a/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.ipv6.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.default-config.kubernetes.ipv6.golden.yaml @@ -37,6 +37,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.proxyType: dataplane features: [] diff --git a/pkg/xds/bootstrap/testdata/generator.metrics-config.kubernetes.golden.yaml b/pkg/xds/bootstrap/testdata/generator.metrics-config.kubernetes.golden.yaml index 3ce65e92aaa5..2630ce60c828 100644 --- a/pkg/xds/bootstrap/testdata/generator.metrics-config.kubernetes.golden.yaml +++ b/pkg/xds/bootstrap/testdata/generator.metrics-config.kubernetes.golden.yaml @@ -37,6 +37,7 @@ node: id: mesh.name.namespace metadata: accessLogSocketPath: /tmp/kuma-al-name.namespace-mesh.sock + dataplane.admin.address: 127.0.0.1 dataplane.admin.port: "1234" dataplane.proxyType: dataplane features: [] diff --git a/pkg/xds/generator/admin_proxy_generator.go b/pkg/xds/generator/admin_proxy_generator.go index 12b38ada522f..db7724e88c8d 100644 --- a/pkg/xds/generator/admin_proxy_generator.go +++ b/pkg/xds/generator/admin_proxy_generator.go @@ -48,10 +48,14 @@ func (g AdminProxyGenerator) Generate(ctx context.Context, xdsCtx xds_context.Co // since it would allow a malicious user to manipulate that value and use Prometheus endpoint // as a gateway to another host. envoyAdminClusterName := envoy_names.GetEnvoyAdminClusterName() + adminAddress := proxy.Metadata.GetAdminAddress() + if adminAddress == "" { + adminAddress = "127.0.0.1" + } cluster, err := envoy_clusters.NewClusterBuilder(proxy.APIVersion, envoyAdminClusterName). Configure(envoy_clusters.ProvidedEndpointCluster( - govalidator.IsIPv6(proxy.Metadata.GetAdminAddress()), - core_xds.Endpoint{Target: proxy.Metadata.GetAdminAddress(), Port: adminPort})). + govalidator.IsIPv6(adminAddress), + core_xds.Endpoint{Target: adminAddress, Port: adminPort})). Configure(envoy_clusters.DefaultTimeout()). Build() if err != nil { @@ -65,7 +69,7 @@ func (g AdminProxyGenerator) Generate(ctx context.Context, xdsCtx xds_context.Co } // We bind admin to 127.0.0.1 by default, creating another listener with same address and port will result in error. - if g.getAddress(proxy) != proxy.Metadata.GetAdminAddress() { + if g.getAddress(proxy) != adminAddress { filterChains := []envoy_listeners.ListenerBuilderOpt{ envoy_listeners.FilterChain(envoy_listeners.NewFilterChainBuilder(proxy.APIVersion, envoy_common.AnonymousResource). Configure(envoy_listeners.StaticEndpoints(envoy_names.GetAdminListenerName(), staticEndpointPaths)),