From 72bd2eaf96f5f303d43318429da0da09e94bd5d7 Mon Sep 17 00:00:00 2001 From: Timothy Hyde Date: Wed, 8 Jul 2026 09:44:19 -0700 Subject: [PATCH] feat: support externalTrafficPolicy / internalTrafficPolicy on the Service Adds optional service.externalTrafficPolicy and service.internalTrafficPolicy values, rendered only when set (mirroring trafficDistribution). externalTrafficPolicy: Local restricts LoadBalancer backends to nodes running pgdog pods, which keeps unrelated node churn (e.g. GKE Autopilot node recycling) off the pooler's data path and preserves client source IPs. Includes a test values file exercising both fields. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01DHReZbtuSyGsAh3cskY6Tq --- templates/service.yaml | 6 ++++++ test/values-traffic-policy.yaml | 5 +++++ values.yaml | 10 ++++++++++ 3 files changed, 21 insertions(+) create mode 100644 test/values-traffic-policy.yaml diff --git a/templates/service.yaml b/templates/service.yaml index 34e83c7..eae92af 100644 --- a/templates/service.yaml +++ b/templates/service.yaml @@ -35,6 +35,12 @@ spec: {{- if .Values.service.trafficDistribution }} trafficDistribution: {{ .Values.service.trafficDistribution | quote }} {{- end }} + {{- if .Values.service.externalTrafficPolicy }} + externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if .Values.service.internalTrafficPolicy }} + internalTrafficPolicy: {{ .Values.service.internalTrafficPolicy | quote }} + {{- end }} ports: - name: pgdog protocol: TCP diff --git a/test/values-traffic-policy.yaml b/test/values-traffic-policy.yaml new file mode 100644 index 0000000..67250d3 --- /dev/null +++ b/test/values-traffic-policy.yaml @@ -0,0 +1,5 @@ +# Test externalTrafficPolicy / internalTrafficPolicy rendering +service: + type: LoadBalancer + externalTrafficPolicy: Local + internalTrafficPolicy: Cluster diff --git a/values.yaml b/values.yaml index 513ad4e..c4741ca 100644 --- a/values.yaml +++ b/values.yaml @@ -317,6 +317,16 @@ service: # (PreferClose, PreferSameZone, PreferSameNode) # see https://kubernetes.io/docs/reference/networking/virtual-ips/#traffic-distribution for more details. trafficDistribution: "" + # externalTrafficPolicy controls how NodePort and LoadBalancer services + # route external traffic (Cluster or Local). Local restricts load-balancer + # backends to nodes running pgdog pods (avoiding an extra hop through + # non-backend nodes) and preserves client source IPs. + # see https://kubernetes.io/docs/reference/networking/virtual-ips/#external-traffic-policy for more details. + externalTrafficPolicy: "" + # internalTrafficPolicy controls how in-cluster traffic to the service is + # routed (Cluster or Local). + # see https://kubernetes.io/docs/reference/networking/virtual-ips/#internal-traffic-policy for more details. + internalTrafficPolicy: "" # aws configures AWS Load Balancer Controller annotations # When enabled, service type is automatically set to LoadBalancer aws: