From f81ccc2e39d8169f4cafbab8639b555679a4e305 Mon Sep 17 00:00:00 2001 From: siryur <12106023+siryur@users.noreply.github.com> Date: Tue, 3 Nov 2026 10:49:15 +0100 Subject: [PATCH 1/2] feat: support loadBalancerIP on the Service A LoadBalancer Service could not be pinned to a pre-reserved IP. On GKE without GKE subsetting, spec.loadBalancerIP is the only way to give an internal load balancer a static address; the annotation alternative requires subsetting. Add an optional service.loadBalancerIP value, rendered only when set, and a test values file covering it. --- templates/service.yaml | 3 +++ test/values-load-balancer-ip.yaml | 6 ++++++ values.yaml | 5 +++++ 3 files changed, 14 insertions(+) create mode 100644 test/values-load-balancer-ip.yaml diff --git a/templates/service.yaml b/templates/service.yaml index ca2634a..e8daf97 100644 --- a/templates/service.yaml +++ b/templates/service.yaml @@ -41,6 +41,9 @@ spec: {{- if .Values.service.internalTrafficPolicy }} internalTrafficPolicy: {{ .Values.service.internalTrafficPolicy | quote }} {{- end }} + {{- if .Values.service.loadBalancerIP }} + loadBalancerIP: {{ .Values.service.loadBalancerIP | quote }} + {{- end }} {{- if .Values.service.ipFamilyPolicy }} ipFamilyPolicy: {{ .Values.service.ipFamilyPolicy }} {{- end }} diff --git a/test/values-load-balancer-ip.yaml b/test/values-load-balancer-ip.yaml new file mode 100644 index 0000000..25831ed --- /dev/null +++ b/test/values-load-balancer-ip.yaml @@ -0,0 +1,6 @@ +# Test loadBalancerIP rendering +service: + type: LoadBalancer + annotations: + networking.gke.io/load-balancer-type: "Internal" + loadBalancerIP: "10.0.0.10" diff --git a/values.yaml b/values.yaml index 3425451..e1bc0e4 100644 --- a/values.yaml +++ b/values.yaml @@ -372,6 +372,11 @@ service: # routed (Cluster or Local). # see https://kubernetes.io/docs/reference/networking/virtual-ips/#internal-traffic-policy for more details. internalTrafficPolicy: "" + # loadBalancerIP pins a LoadBalancer service to a pre-reserved IP, e.g. a + # static internal IP for a GKE internal load balancer without GKE subsetting. + # Support depends on the cloud provider. + # see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer for more details. + loadBalancerIP: "" # ipFamilyPolicy controls IP family behavior for the service. # Valid values: SingleStack, PreferDualStack, RequireDualStack # Leave empty to use cluster defaults. From ded43364913848ac2c74fb60f44253bdc97fa450 Mon Sep 17 00:00:00 2001 From: siryur <12106023+siryur@users.noreply.github.com> Date: Tue, 3 Nov 2026 10:59:41 +0100 Subject: [PATCH 2/2] chore: keep loadBalancerIP docs provider-neutral --- test/values-load-balancer-ip.yaml | 2 -- values.yaml | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/test/values-load-balancer-ip.yaml b/test/values-load-balancer-ip.yaml index 25831ed..b078ab3 100644 --- a/test/values-load-balancer-ip.yaml +++ b/test/values-load-balancer-ip.yaml @@ -1,6 +1,4 @@ # Test loadBalancerIP rendering service: type: LoadBalancer - annotations: - networking.gke.io/load-balancer-type: "Internal" loadBalancerIP: "10.0.0.10" diff --git a/values.yaml b/values.yaml index e1bc0e4..200ee51 100644 --- a/values.yaml +++ b/values.yaml @@ -372,8 +372,7 @@ service: # routed (Cluster or Local). # see https://kubernetes.io/docs/reference/networking/virtual-ips/#internal-traffic-policy for more details. internalTrafficPolicy: "" - # loadBalancerIP pins a LoadBalancer service to a pre-reserved IP, e.g. a - # static internal IP for a GKE internal load balancer without GKE subsetting. + # loadBalancerIP pins a LoadBalancer service to a pre-reserved IP. # Support depends on the cloud provider. # see https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer for more details. loadBalancerIP: ""