Skip to content

Commit d96a428

Browse files
authoredOct 18, 2021
Feat: add externalTrafficPolicy support (#626)
- externalTrafficPolicy can be set for both the ui and server services. It is only supported for NodePort or LoadBalancer service types.
1 parent 96b8c98 commit d96a428

10 files changed

+224
-12
lines changed
 

‎templates/_helpers.tpl

+35
Original file line numberDiff line numberDiff line change
@@ -655,3 +655,38 @@ imagePullSecrets:
655655
{{- end -}}
656656
{{- end -}}
657657
{{- end -}}
658+
659+
{{/*
660+
externalTrafficPolicy sets a Service's externalTrafficPolicy if applicable.
661+
Supported inputs are Values.server.service and Values.ui
662+
*/}}
663+
{{- define "service.externalTrafficPolicy" -}}
664+
{{- $type := "" -}}
665+
{{- if .serviceType -}}
666+
{{- $type = .serviceType -}}
667+
{{- else if .type -}}
668+
{{- $type = .type -}}
669+
{{- end -}}
670+
{{- if and .externalTrafficPolicy (or (eq $type "LoadBalancer") (eq $type "NodePort")) }}
671+
externalTrafficPolicy: {{ .externalTrafficPolicy }}
672+
{{- else }}
673+
{{- end }}
674+
{{- end -}}
675+
676+
{{/*
677+
loadBalancer configuration for the the UI service.
678+
Supported inputs are Values.ui
679+
*/}}
680+
{{- define "service.loadBalancer" -}}
681+
{{- if eq (.serviceType | toString) "LoadBalancer" }}
682+
{{- if .loadBalancerIP }}
683+
loadBalancerIP: {{ .loadBalancerIP }}
684+
{{- end }}
685+
{{- with .loadBalancerSourceRanges }}
686+
loadBalancerSourceRanges:
687+
{{- range . }}
688+
- {{ . }}
689+
{{- end }}
690+
{{- end -}}
691+
{{- end }}
692+
{{- end -}}

‎templates/server-ha-active-service.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ spec:
2121
{{- if .Values.server.service.clusterIP }}
2222
clusterIP: {{ .Values.server.service.clusterIP }}
2323
{{- end }}
24+
{{- include "service.externalTrafficPolicy" .Values.server.service }}
2425
publishNotReadyAddresses: true
2526
ports:
2627
- name: {{ include "vault.scheme" . }}

‎templates/server-ha-standby-service.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ spec:
2121
{{- if .Values.server.service.clusterIP }}
2222
clusterIP: {{ .Values.server.service.clusterIP }}
2323
{{- end }}
24+
{{- include "service.externalTrafficPolicy" .Values.server.service }}
2425
publishNotReadyAddresses: true
2526
ports:
2627
- name: {{ include "vault.scheme" . }}
@@ -38,4 +39,4 @@ spec:
3839
component: server
3940
vault-active: "false"
4041
{{- end }}
41-
{{- end }}
42+
{{- end }}

‎templates/server-service.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ spec:
2121
{{- if .Values.server.service.clusterIP }}
2222
clusterIP: {{ .Values.server.service.clusterIP }}
2323
{{- end }}
24+
{{- include "service.externalTrafficPolicy" .Values.server.service }}
2425
# We want the servers to become available even if they're not ready
2526
# since this DNS is also used for join operations.
2627
publishNotReadyAddresses: true

‎templates/ui-service.yaml

+2-10
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,8 @@ spec:
3030
nodePort: {{ .Values.ui.serviceNodePort }}
3131
{{- end }}
3232
type: {{ .Values.ui.serviceType }}
33-
{{- if and (eq (.Values.ui.serviceType | toString) "LoadBalancer") (.Values.ui.loadBalancerSourceRanges) }}
34-
loadBalancerSourceRanges:
35-
{{- range $cidr := .Values.ui.loadBalancerSourceRanges }}
36-
- {{ $cidr }}
37-
{{- end }}
38-
{{- end }}
39-
{{- if and (eq (.Values.ui.serviceType | toString) "LoadBalancer") (.Values.ui.loadBalancerIP) }}
40-
loadBalancerIP: {{ .Values.ui.loadBalancerIP }}
41-
{{- end }}
33+
{{- include "service.externalTrafficPolicy" .Values.ui }}
34+
{{- include "service.loadBalancer" .Values.ui }}
4235
{{- end -}}
43-
4436
{{- end }}
4537
{{- end }}

‎test/unit/server-ha-active-service.bats

+40
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,43 @@ load _helpers
157157
yq -r '.spec.ports | map(select(.port==8200)) | .[] .name' | tee /dev/stderr)
158158
[ "${actual}" = "https" ]
159159
}
160+
161+
# duplicated in server-service.bats
162+
@test "server/ha-active-Service: NodePort assert externalTrafficPolicy" {
163+
cd `chart_dir`
164+
local actual=$(helm template \
165+
--show-only templates/server-ha-active-service.yaml \
166+
--set 'server.ha.enabled=true' \
167+
--set 'server.service.type=NodePort' \
168+
--set 'server.service.externalTrafficPolicy=Foo' \
169+
. | tee /dev/stderr |
170+
yq -r '.spec.externalTrafficPolicy' | tee /dev/stderr)
171+
[ "${actual}" = "Foo" ]
172+
}
173+
174+
# duplicated in server-service.bats
175+
@test "server/ha-active-Service: NodePort assert no externalTrafficPolicy" {
176+
cd `chart_dir`
177+
local actual=$(helm template \
178+
--show-only templates/server-ha-active-service.yaml \
179+
--set 'server.ha.enabled=true' \
180+
--set 'server.service.type=NodePort' \
181+
--set 'server.service.externalTrafficPolicy=' \
182+
. | tee /dev/stderr |
183+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
184+
[ "${actual}" = "null" ]
185+
}
186+
187+
# duplicated in server-service.bats
188+
@test "server/ha-active-Service: ClusterIP assert no externalTrafficPolicy" {
189+
cd `chart_dir`
190+
local actual=$(helm template \
191+
--show-only templates/server-ha-active-service.yaml \
192+
--set 'server.ha.enabled=true' \
193+
--set 'server.service.type=ClusterIP' \
194+
--set 'server.service.externalTrafficPolicy=Foo' \
195+
. | tee /dev/stderr |
196+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
197+
[ "${actual}" = "null" ]
198+
}
199+

‎test/unit/server-ha-standby-service.bats

+40
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,43 @@ load _helpers
168168
yq -r '.spec.ports | map(select(.port==8200)) | .[] .name' | tee /dev/stderr)
169169
[ "${actual}" = "https" ]
170170
}
171+
172+
# duplicated in server-service.bats
173+
@test "server/ha-standby-Service: NodePort assert externalTrafficPolicy" {
174+
cd `chart_dir`
175+
local actual=$(helm template \
176+
--show-only templates/server-ha-standby-service.yaml \
177+
--set 'server.ha.enabled=true' \
178+
--set 'server.service.type=NodePort' \
179+
--set 'server.service.externalTrafficPolicy=Foo' \
180+
. | tee /dev/stderr |
181+
yq -r '.spec.externalTrafficPolicy' | tee /dev/stderr)
182+
[ "${actual}" = "Foo" ]
183+
}
184+
185+
# duplicated in server-service.bats
186+
@test "server/ha-standby-Service: NodePort assert no externalTrafficPolicy" {
187+
cd `chart_dir`
188+
local actual=$(helm template \
189+
--show-only templates/server-ha-standby-service.yaml \
190+
--set 'server.ha.enabled=true' \
191+
--set 'server.service.type=NodePort' \
192+
--set 'server.service.externalTrafficPolicy=' \
193+
. | tee /dev/stderr |
194+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
195+
[ "${actual}" = "null" ]
196+
}
197+
198+
# duplicated in server-service.bats
199+
@test "server/ha-standby-Service: ClusterIP assert no externalTrafficPolicy" {
200+
cd `chart_dir`
201+
local actual=$(helm template \
202+
--show-only templates/server-ha-standby-service.yaml \
203+
--set 'server.ha.enabled=true' \
204+
--set 'server.service.type=ClusterIP' \
205+
--set 'server.service.externalTrafficPolicy=Foo' \
206+
. | tee /dev/stderr |
207+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
208+
[ "${actual}" = "null" ]
209+
}
210+

‎test/unit/server-service.bats

+40
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,43 @@ load _helpers
384384
yq -r '.spec.ports | map(select(.port==8200)) | .[] .name' | tee /dev/stderr)
385385
[ "${actual}" = "https" ]
386386
}
387+
388+
# duplicated in server-ha-active-service.bats
389+
@test "server/Service: NodePort assert externalTrafficPolicy" {
390+
cd `chart_dir`
391+
local actual=$(helm template \
392+
--show-only templates/server-service.yaml \
393+
--set 'server.ha.enabled=true' \
394+
--set 'server.service.type=NodePort' \
395+
--set 'server.service.externalTrafficPolicy=Foo' \
396+
. | tee /dev/stderr |
397+
yq -r '.spec.externalTrafficPolicy' | tee /dev/stderr)
398+
[ "${actual}" = "Foo" ]
399+
}
400+
401+
# duplicated in server-ha-active-service.bats
402+
@test "server/ha-active-Service: NodePort assert no externalTrafficPolicy" {
403+
cd `chart_dir`
404+
local actual=$(helm template \
405+
--show-only templates/server-service.yaml \
406+
--set 'server.ha.enabled=true' \
407+
--set 'server.service.type=NodePort' \
408+
--set 'server.service.externalTrafficPolicy=' \
409+
. | tee /dev/stderr |
410+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
411+
[ "${actual}" = "null" ]
412+
}
413+
414+
# duplicated in server-ha-active-service.bats
415+
@test "server/Service: ClusterIP assert no externalTrafficPolicy" {
416+
cd `chart_dir`
417+
local actual=$(helm template \
418+
--show-only templates/server-service.yaml \
419+
--set 'server.ha.enabled=true' \
420+
--set 'server.service.type=ClusterIP' \
421+
--set 'server.service.externalTrafficPolicy=Foo' \
422+
. | tee /dev/stderr |
423+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
424+
[ "${actual}" = "null" ]
425+
}
426+

‎test/unit/ui-service.bats

+50
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,16 @@ load _helpers
135135
. | tee /dev/stderr |
136136
yq -r '.spec.type' | tee /dev/stderr)
137137
[ "${actual}" = "LoadBalancer" ]
138+
139+
local actual=$(helm template \
140+
--show-only templates/ui-service.yaml \
141+
--set 'server.standalone.enabled=true' \
142+
--set 'ui.serviceType=LoadBalancer' \
143+
--set 'ui.externalTrafficPolicy=Local' \
144+
--set 'ui.enabled=true' \
145+
. | tee /dev/stderr |
146+
yq -r '.spec.externalTrafficPolicy' | tee /dev/stderr)
147+
[ "${actual}" = "Local" ]
138148
}
139149

140150
@test "ui/Service: LoadBalancerIP set if specified and serviceType == LoadBalancer" {
@@ -183,6 +193,19 @@ load _helpers
183193
[ "${actual}" = "null" ]
184194
}
185195

196+
@test "ui/Service: ClusterIP assert no externalTrafficPolicy" {
197+
cd `chart_dir`
198+
local actual=$(helm template \
199+
--show-only templates/ui-service.yaml \
200+
--set 'server.standalone.enabled=true' \
201+
--set 'ui.serviceType=ClusterIP' \
202+
--set 'ui.externalTrafficPolicy=Foo' \
203+
--set 'ui.enabled=true' \
204+
. | tee /dev/stderr |
205+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
206+
[ "${actual}" = "null" ]
207+
}
208+
186209
@test "ui/Service: specify annotations" {
187210
cd `chart_dir`
188211
local actual=$(helm template \
@@ -323,3 +346,30 @@ load _helpers
323346
yq -r '.spec.ports[0].nodePort' | tee /dev/stderr)
324347
[ "${actual}" = "123" ]
325348
}
349+
350+
@test "ui/Service: LoadBalancer assert externalTrafficPolicy" {
351+
cd `chart_dir`
352+
local actual=$(helm template \
353+
--show-only templates/ui-service.yaml \
354+
--set 'ui.enabled=true' \
355+
--set 'server.standalone.enabled=true' \
356+
--set 'ui.serviceType=LoadBalancer' \
357+
--set 'ui.externalTrafficPolicy=Foo' \
358+
. | tee /dev/stderr |
359+
yq -r '.spec.externalTrafficPolicy' | tee /dev/stderr)
360+
[ "${actual}" = "Foo" ]
361+
}
362+
363+
@test "ui/Service: LoadBalancer assert no externalTrafficPolicy" {
364+
cd `chart_dir`
365+
local actual=$(helm template \
366+
--show-only templates/ui-service.yaml \
367+
--set 'ui.enabled=true' \
368+
--set 'server.standalone.enabled=true' \
369+
--set 'ui.serviceType=LoadBalancer' \
370+
--set 'ui.externalTrafficPolicy=' \
371+
. | tee /dev/stderr |
372+
yq '.spec.externalTrafficPolicy' | tee /dev/stderr)
373+
[ "${actual}" = "null" ]
374+
375+
}

‎values.yaml

+13-1
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,12 @@ server:
483483
# or NodePort.
484484
#type: ClusterIP
485485

486+
# The externalTrafficPolicy can be set to either Cluster or Local
487+
# and is only valid for LoadBalancer and NodePort service types.
488+
# The default value is Cluster.
489+
# ref: https://kubernetes.io/docs/concepts/services-networking/service/#external-traffic-policy
490+
externalTrafficPolicy: Cluster
491+
486492
# If type is set to "NodePort", a specific nodePort value can be configured,
487493
# will be random if left blank.
488494
#nodePort: 30000
@@ -704,7 +710,13 @@ ui:
704710
externalPort: 8200
705711
targetPort: 8200
706712

707-
# loadBalancerSourceRanges:
713+
# The externalTrafficPolicy can be set to either Cluster or Local
714+
# and is only valid for LoadBalancer and NodePort service types.
715+
# The default value is Cluster.
716+
# ref: https://kubernetes.io/docs/concepts/services-networking/service/#external-traffic-policy
717+
externalTrafficPolicy: Cluster
718+
719+
#loadBalancerSourceRanges:
708720
# - 10.0.0.0/16
709721
# - 1.78.23.3/32
710722

0 commit comments

Comments
 (0)
Please sign in to comment.