From 318b7026579e93a767b4746e236bab284c740184 Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:25:53 +0200 Subject: [PATCH 1/7] feat: add ingress label values --- .../camunda-platform-8.8/templates/common/ingress-grpc.yaml | 3 +++ .../camunda-platform-8.8/templates/common/ingress-http.yaml | 3 +++ charts/camunda-platform-8.8/values.yaml | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml index f957b4036d..771c30207d 100644 --- a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml +++ b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml @@ -6,6 +6,9 @@ metadata: name: {{ include "camundaPlatform.fullname" . }}-grpc labels: {{- include "camundaPlatform.labels" . | nindent 4 }} + {{- if .Values.orchestration.ingress.grpc.labels }} + {{- toYaml .Values.orchestration.ingress.grpc.labels | nindent 4 }} + {{- end }} {{- with .Values.orchestration.ingress.grpc.annotations }} annotations: {{- tpl (toYaml .) $ | nindent 4 }} diff --git a/charts/camunda-platform-8.8/templates/common/ingress-http.yaml b/charts/camunda-platform-8.8/templates/common/ingress-http.yaml index f5c1cfb440..afdef787be 100644 --- a/charts/camunda-platform-8.8/templates/common/ingress-http.yaml +++ b/charts/camunda-platform-8.8/templates/common/ingress-http.yaml @@ -5,6 +5,9 @@ metadata: name: {{ include "camundaPlatform.fullname" . }}-http labels: {{- include "camundaPlatform.labels" . | nindent 4 }} + {{- if .Values.global.ingress.labels }} + {{- toYaml .Values.global.ingress.labels | nindent 4 }} + {{- end }} {{- with .Values.global.ingress.annotations }} annotations: {{ tpl (toYaml .) $ | nindent 4 }} {{- end }} diff --git a/charts/camunda-platform-8.8/values.yaml b/charts/camunda-platform-8.8/values.yaml index b1d6033095..1d7f63bc86 100755 --- a/charts/camunda-platform-8.8/values.yaml +++ b/charts/camunda-platform-8.8/values.yaml @@ -142,6 +142,8 @@ global: external: false ## @param global.ingress.className Ingress.className defines the class or configuration of ingress which should be used by the controller className: nginx + ## @param global.ingress.labels [object] can be used to define labels which will be applied to the global HTTP ingress resource + labels: {} ## @param global.ingress.annotations [object] defines the ingress related annotations, consumed mostly by the ingress controller annotations: ingress.kubernetes.io/rewrite-target: "/" @@ -1106,6 +1108,8 @@ identityKeycloak: tls: false ## @param identityKeycloak.ingress.extraTls configuration for additional hostnames to be covered with this ingress record. extraTls: [] + ## @param identityKeycloak.ingress.labels [object] can be used to define labels which will be applied to the Keycloak ingress resource + labels: {} ## @param identityKeycloak.ingress.annotations [object] configures annotations to be applied to the ingress record. annotations: ## @skip identityKeycloak.ingress.annotations.nginx.ingress.kubernetes.io/proxy-buffer-size @@ -2590,6 +2594,8 @@ orchestration: external: false ## @param orchestration.ingress.grpc.className defines the class or configuration of ingress which should be used by the controller className: nginx + ## @param orchestration.ingress.grpc.labels [object] can be used to define labels which will be applied to the orchestration gRPC ingress resource + labels: {} ## @param orchestration.ingress.grpc.annotations [object] defines the ingress related annotations, consumed mostly by the ingress controller ## @skip orchestration.ingress.grpc.annotations.ingress.kubernetes.io/rewrite-target ## @skip orchestration.ingress.grpc.annotations.nginx.ingress.kubernetes.io/ssl-redirect From df9ed1310e0ebc9215c73d789eb83cc6fed92199 Mon Sep 17 00:00:00 2001 From: "distro-ci[bot]" <122795778+distro-ci[bot]@users.noreply.github.com> Date: Tue, 2 Sep 2025 12:30:59 +0000 Subject: [PATCH 2/7] chore: chart chores --- charts/camunda-platform-8.8/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/charts/camunda-platform-8.8/README.md b/charts/camunda-platform-8.8/README.md index b30ebdd545..a72862a3c9 100644 --- a/charts/camunda-platform-8.8/README.md +++ b/charts/camunda-platform-8.8/README.md @@ -396,6 +396,7 @@ Please see the corresponding [release guide](../../docs/release.md) to find out | `global.ingress.enabled` | if true, an ingress resource is deployed. Only useful if an ingress controller is available, like Ingress-NGINX. | `false` | | `global.ingress.external` | if true, the Ingress object will not be rendered. This setting is used when a non-Ingress resource, like a service mesh, is used to access the cluster. | `false` | | `global.ingress.className` | Ingress.className defines the class or configuration of ingress which should be used by the controller | `nginx` | +| `global.ingress.labels` | can be used to define labels which will be applied to the global HTTP ingress resource | `{}` | | `global.ingress.annotations` | defines the ingress related annotations, consumed mostly by the ingress controller | `{}` | | `global.ingress.host` | If not specified the rules applies to all inbound http traffic, if specified the rule applies to that host. | `""` | | `global.ingress.pathType` | can be used to define the Ingress path type. https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types | `Prefix` | @@ -767,6 +768,7 @@ Please see the corresponding [release guide](../../docs/release.md) to find out | `identityKeycloak.ingress.enabled` | can be used enable ingress record generation for Keycloak. | `false` | | `identityKeycloak.ingress.tls` | can be used to enable TLS configuration for the host defined at ingress.hostname parameter. | `false` | | `identityKeycloak.ingress.extraTls` | configuration for additional hostnames to be covered with this ingress record. | `[]` | +| `identityKeycloak.ingress.labels` | can be used to define labels which will be applied to the Keycloak ingress resource | `{}` | | `identityKeycloak.ingress.annotations` | configures annotations to be applied to the ingress record. | `{}` | | `identityKeycloak.ingress.pathType` | defines Ingress path type. | `Prefix` | | `identityKeycloak.service` | configuration, to configure the service which is deployed along with keycloak | | @@ -1390,6 +1392,7 @@ Please see the corresponding [release guide](../../docs/release.md) to find out | `orchestration.ingress.grpc.enabled` | if true, an ingress resource is deployed with the Zeebe gateway deployment. Only useful if an ingress controller is available, like nginx. | `false` | | `orchestration.ingress.grpc.external` | if true, the Ingress object will not be rendered. This setting is used when a non-Ingress resource, like a service mesh, is used to access the cluster. | `false` | | `orchestration.ingress.grpc.className` | defines the class or configuration of ingress which should be used by the controller | `nginx` | +| `orchestration.ingress.grpc.labels` | can be used to define labels which will be applied to the orchestration gRPC ingress resource | `{}` | | `orchestration.ingress.grpc.annotations` | defines the ingress related annotations, consumed mostly by the ingress controller | `{}` | | `orchestration.ingress.grpc.path` | defines the path which is associated with the Zeebe gateway's gRPC service and port https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-rules | `/` | | `orchestration.ingress.grpc.pathType` | can be used to define the Ingress path type. https://kubernetes.io/docs/concepts/services-networking/ingress/#path-types | `Prefix` | From 586c73be8eb2f812e73b432c36602131e782a109 Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:57:44 +0200 Subject: [PATCH 3/7] fix: add unit tests for new labels --- .../test/unit/common/ingress_test.go | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go index 32214ecb2e..2f13445164 100644 --- a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go +++ b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go @@ -254,6 +254,139 @@ func (s *IngressTemplateTest) TestDifferentValuesInputs() { require.NotContains(t, output, "kind: Ingress") }, }, + { + Name: "TestIngressWithGlobalLabels", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "global.ingress.enabled": "true", + "global.ingress.labels.test-label": "test-value", + "global.ingress.labels.external-dns": "enabled", + "global.ingress.labels.nginx\\.ingress\\.class": "public", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then + s.Require().Equal("test-value", ingress.Labels["test-label"]) + s.Require().Equal("enabled", ingress.Labels["external-dns"]) + s.Require().Equal("public", ingress.Labels["nginx.ingress.class"]) + }, + }, + { + Name: "TestIngressWithoutLabels", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "global.ingress.enabled": "true", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then - should only have default chart labels, not custom labels + s.Require().NotContains(ingress.Labels, "test-label") + s.Require().NotContains(ingress.Labels, "external-dns") + // But should still have standard chart labels + s.Require().Contains(ingress.Labels, "app") + s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") + }, + }, + } + + testhelpers.RunTestCasesE(s.T(), s.chartPath, s.release, s.namespace, s.templates, testCases) +} + +type GrpcIngressTemplateTest struct { + suite.Suite + chartPath string + release string + namespace string + templates []string + extraArgs []string +} + +func TestGrpcIngressTemplate(t *testing.T) { + t.Parallel() + + chartPath, err := filepath.Abs("../../../") + require.NoError(t, err) + + suite.Run(t, &GrpcIngressTemplateTest{ + chartPath: chartPath, + release: "camunda-platform-test", + namespace: "camunda-platform-" + strings.ToLower(random.UniqueId()), + templates: []string{"templates/common/ingress-grpc.yaml"}, + }) +} + +func (s *GrpcIngressTemplateTest) TestDifferentValuesInputs() { + testCases := []testhelpers.TestCase{ + { + Name: "TestGrpcIngressWithLabels", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "orchestration.enabled": "true", + "orchestration.ingress.grpc.enabled": "true", + "orchestration.ingress.grpc.labels.test-label": "grpc-test-value", + "orchestration.ingress.grpc.labels.external-dns": "grpc-enabled", + "orchestration.ingress.grpc.labels.grpc-service": "zeebe-gateway", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then + s.Require().Equal("grpc-test-value", ingress.Labels["test-label"]) + s.Require().Equal("grpc-enabled", ingress.Labels["external-dns"]) + s.Require().Equal("zeebe-gateway", ingress.Labels["grpc-service"]) + }, + }, + { + Name: "TestGrpcIngressWithoutLabels", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "orchestration.enabled": "true", + "orchestration.ingress.grpc.enabled": "true", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then - should only have default chart labels, not custom labels + s.Require().NotContains(ingress.Labels, "test-label") + s.Require().NotContains(ingress.Labels, "external-dns") + // But should still have standard chart labels + s.Require().Contains(ingress.Labels, "app") + s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") + }, + }, + { + Name: "TestGrpcIngressDisabled", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "orchestration.enabled": "true", + "orchestration.ingress.grpc.enabled": "false", + "orchestration.ingress.grpc.labels.test-label": "should-not-appear", + }, + Verifier: func(t *testing.T, output string, err error) { + // then - no ingress should be rendered + require.NotContains(t, output, "kind: Ingress") + }, + }, + { + Name: "TestGrpcIngressExternal", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "orchestration.enabled": "true", + "orchestration.ingress.grpc.enabled": "true", + "orchestration.ingress.grpc.external": "true", + "orchestration.ingress.grpc.labels.test-label": "should-not-appear", + }, + Verifier: func(t *testing.T, output string, err error) { + // then - no ingress should be rendered when external is true + require.NotContains(t, output, "kind: Ingress") + }, + }, } testhelpers.RunTestCasesE(s.T(), s.chartPath, s.release, s.namespace, s.templates, testCases) From b50aaee5f6492c29953fa6f89c9022bb8027878a Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:21:47 +0200 Subject: [PATCH 4/7] fix: use merge-overwrite --- .../templates/common/ingress-grpc.yaml | 11 +++++++---- .../templates/common/ingress-http.yaml | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml index 771c30207d..becdc4ce58 100644 --- a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml +++ b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml @@ -5,10 +5,13 @@ kind: Ingress metadata: name: {{ include "camundaPlatform.fullname" . }}-grpc labels: - {{- include "camundaPlatform.labels" . | nindent 4 }} - {{- if .Values.orchestration.ingress.grpc.labels }} - {{- toYaml .Values.orchestration.ingress.grpc.labels | nindent 4 }} - {{- end }} + {{- include "common.tplvalues.merge-overwrite" (dict + "values" (list + (include "camundaPlatform.labels" .) + .Values.global.ingress.labels + ) + "context" . + ) | nindent 4 }} {{- with .Values.orchestration.ingress.grpc.annotations }} annotations: {{- tpl (toYaml .) $ | nindent 4 }} diff --git a/charts/camunda-platform-8.8/templates/common/ingress-http.yaml b/charts/camunda-platform-8.8/templates/common/ingress-http.yaml index afdef787be..7335bf84d1 100644 --- a/charts/camunda-platform-8.8/templates/common/ingress-http.yaml +++ b/charts/camunda-platform-8.8/templates/common/ingress-http.yaml @@ -4,10 +4,13 @@ kind: Ingress metadata: name: {{ include "camundaPlatform.fullname" . }}-http labels: - {{- include "camundaPlatform.labels" . | nindent 4 }} - {{- if .Values.global.ingress.labels }} - {{- toYaml .Values.global.ingress.labels | nindent 4 }} - {{- end }} + {{- include "common.tplvalues.merge-overwrite" (dict + "values" (list + (include "camundaPlatform.labels" .) + .Values.global.ingress.labels + ) + "context" . + ) | nindent 4 }} {{- with .Values.global.ingress.annotations }} annotations: {{ tpl (toYaml .) $ | nindent 4 }} {{- end }} From b1f2e8e18c801c749bc7e5cda9b4ef730b8f660b Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:58:34 +0200 Subject: [PATCH 5/7] fix: grpc label --- charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml index becdc4ce58..075504824f 100644 --- a/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml +++ b/charts/camunda-platform-8.8/templates/common/ingress-grpc.yaml @@ -8,7 +8,7 @@ metadata: {{- include "common.tplvalues.merge-overwrite" (dict "values" (list (include "camundaPlatform.labels" .) - .Values.global.ingress.labels + .Values.orchestration.ingress.grpc.labels ) "context" . ) | nindent 4 }} From c5211ba76d782f0b87d904a90f23d9b38b739679 Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Thu, 4 Sep 2025 15:40:01 +0200 Subject: [PATCH 6/7] fix: overwrite tests --- .../test/unit/common/ingress_test.go | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go index 2f13445164..692c19ac23 100644 --- a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go +++ b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go @@ -291,6 +291,28 @@ func (s *IngressTemplateTest) TestDifferentValuesInputs() { s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") }, }, + { + Name: "TestHttpIngressLabelMergeOverwrite", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "global.ingress.enabled": "true", + "global.ingress.labels.app": "custom-override", + "global.ingress.labels.environment": "production", + "global.ingress.labels.team": "platform", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then - global ingress labels should override chart labels for same keys + s.Require().Equal("custom-override", ingress.Labels["app"], "global labels should override chart labels for same key") + // and global-specific labels should be present + s.Require().Equal("production", ingress.Labels["environment"], "global labels should be present") + s.Require().Equal("platform", ingress.Labels["team"], "global labels should be present") + // standard chart labels should still be there for non-conflicting keys + s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") + }, + }, } testhelpers.RunTestCasesE(s.T(), s.chartPath, s.release, s.namespace, s.templates, testCases) @@ -387,6 +409,29 @@ func (s *GrpcIngressTemplateTest) TestDifferentValuesInputs() { require.NotContains(t, output, "kind: Ingress") }, }, + { + Name: "TestGrpcIngressLabelMergeOverwrite", + HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, + Values: map[string]string{ + "orchestration.enabled": "true", + "orchestration.ingress.grpc.enabled": "true", + "orchestration.ingress.grpc.labels.app": "grpc-override", + "orchestration.ingress.grpc.labels.environment": "grpc-env", + "orchestration.ingress.grpc.labels.protocol": "grpc", + }, + Verifier: func(t *testing.T, output string, err error) { + var ingress netv1.Ingress + helm.UnmarshalK8SYaml(t, output, &ingress) + + // then - grpc-specific labels should override chart labels for same keys + s.Require().Equal("grpc-override", ingress.Labels["app"], "grpc labels should override chart labels for same key") + // and grpc-specific labels should be present + s.Require().Equal("grpc-env", ingress.Labels["environment"], "grpc-specific labels should be present") + s.Require().Equal("grpc", ingress.Labels["protocol"], "grpc-specific labels should be present") + // standard chart labels should still be there for non-conflicting keys + s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") + }, + }, } testhelpers.RunTestCasesE(s.T(), s.chartPath, s.release, s.namespace, s.templates, testCases) From 9628bf6570e8a26e582e187f49049a04840abd70 Mon Sep 17 00:00:00 2001 From: Balazs Kenez <96087935+bkenez@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:14:01 +0200 Subject: [PATCH 7/7] fix: verify against commmonlabels --- .../test/unit/common/ingress_test.go | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go index 692c19ac23..1a720ecd90 100644 --- a/charts/camunda-platform-8.8/test/unit/common/ingress_test.go +++ b/charts/camunda-platform-8.8/test/unit/common/ingress_test.go @@ -296,19 +296,21 @@ func (s *IngressTemplateTest) TestDifferentValuesInputs() { HelmOptionsExtraArgs: map[string][]string{"install": {"--debug"}}, Values: map[string]string{ "global.ingress.enabled": "true", - "global.ingress.labels.app": "custom-override", - "global.ingress.labels.environment": "production", - "global.ingress.labels.team": "platform", + "global.commonLabels.app": "common-override", + "global.commonLabels.environment": "common-env", + "global.ingress.labels.app": "ingress-override", + "global.ingress.labels.team": "ingress-team", }, Verifier: func(t *testing.T, output string, err error) { var ingress netv1.Ingress helm.UnmarshalK8SYaml(t, output, &ingress) - // then - global ingress labels should override chart labels for same keys - s.Require().Equal("custom-override", ingress.Labels["app"], "global labels should override chart labels for same key") - // and global-specific labels should be present - s.Require().Equal("production", ingress.Labels["environment"], "global labels should be present") - s.Require().Equal("platform", ingress.Labels["team"], "global labels should be present") + // then - ingress labels should override common labels for same keys + s.Require().Equal("ingress-override", ingress.Labels["app"], "ingress labels should override common labels for same key") + // and common labels should be present when no ingress label conflicts + s.Require().Equal("common-env", ingress.Labels["environment"], "common labels should be present when not overridden") + // and ingress-specific labels should be present + s.Require().Equal("ingress-team", ingress.Labels["team"], "ingress labels should be present") // standard chart labels should still be there for non-conflicting keys s.Require().Contains(ingress.Labels, "app.kubernetes.io/name") }, @@ -415,18 +417,20 @@ func (s *GrpcIngressTemplateTest) TestDifferentValuesInputs() { Values: map[string]string{ "orchestration.enabled": "true", "orchestration.ingress.grpc.enabled": "true", - "orchestration.ingress.grpc.labels.app": "grpc-override", - "orchestration.ingress.grpc.labels.environment": "grpc-env", + "global.commonLabels.app": "common-grpc-override", + "global.commonLabels.environment": "common-grpc-env", + "orchestration.ingress.grpc.labels.app": "grpc-specific-override", "orchestration.ingress.grpc.labels.protocol": "grpc", }, Verifier: func(t *testing.T, output string, err error) { var ingress netv1.Ingress helm.UnmarshalK8SYaml(t, output, &ingress) - // then - grpc-specific labels should override chart labels for same keys - s.Require().Equal("grpc-override", ingress.Labels["app"], "grpc labels should override chart labels for same key") + // then - grpc-specific labels should override common labels for same keys + s.Require().Equal("grpc-specific-override", ingress.Labels["app"], "grpc labels should override common labels for same key") + // and common labels should be present when no grpc label conflicts + s.Require().Equal("common-grpc-env", ingress.Labels["environment"], "common labels should be present when not overridden") // and grpc-specific labels should be present - s.Require().Equal("grpc-env", ingress.Labels["environment"], "grpc-specific labels should be present") s.Require().Equal("grpc", ingress.Labels["protocol"], "grpc-specific labels should be present") // standard chart labels should still be there for non-conflicting keys s.Require().Contains(ingress.Labels, "app.kubernetes.io/name")