Skip to content

Commit 134eb6b

Browse files
authored
Expose traffic policy configuration for service (#148)
* Add service configuration for traffic policies * Add test to verify that traffic policy is included in k8s service definition * Add documentation for new service fields
1 parent 64acf9d commit 134eb6b

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

charts/k8s-service/templates/service.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ spec:
3333
selector:
3434
app.kubernetes.io/name: {{ include "k8s-service.name" . }}
3535
app.kubernetes.io/instance: {{ .Release.Name }}
36+
{{- if .Values.service.externalTrafficPolicy }}
37+
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
38+
{{- end}}
39+
{{- if .Values.service.internalTrafficPolicy }}
40+
internalTrafficPolicy: {{ .Values.service.internalTrafficPolicy }}
41+
{{- end}}
3642
{{- if .Values.service.sessionAffinity }}
3743
sessionAffinity: {{ .Values.service.sessionAffinity }}
3844
{{- if .Values.service.sessionAffinityConfig }}

charts/k8s-service/values.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ minPodsAvailable: 0
312312
# Kubernetes defaults to None.
313313
# - sessionAffinityConfig (object) : Configuration for session affinity, as defined in Kubernetes
314314
# (https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies)
315+
# - externalTrafficPolicy (string) : Configuration to control traffic flow from external sources - supports 'Cluster' and 'Local'
316+
# https://kubernetes.io/docs/concepts/services-networking/service/#external-traffic-policy
317+
# - internalTrafficPolicy (string) : Configuration to control traffic flow from internal sources - supports 'Cluster' and 'Local'
318+
# https://kubernetes.io/docs/concepts/services-networking/service/#internal-traffic-policy
315319
#
316320
# The following example uses the default config and enables client IP based session affinity with a maximum session
317321
# sticky time of 3 hours.
@@ -325,6 +329,8 @@ minPodsAvailable: 0
325329
# targetPort: http
326330
# protocol: TCP
327331
# sessionAffinity: ClientIP
332+
# externalTrafficPolicy: Cluster
333+
# internalTrafficPolicy: Cluster
328334
# sessionAffinityConfig:
329335
# clientIP:
330336
# timeoutSeconds: 10800

test/k8s_service_template_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,6 +977,34 @@ func TestK8SServiceSessionAffinityConfig(t *testing.T) {
977977
assert.Equal(t, int32(10800), *service.Spec.SessionAffinityConfig.ClientIP.TimeoutSeconds)
978978
}
979979

980+
// Test that externalTrafficPolicy is correctly set
981+
func TestK8SServiceExternalTrafficPolicy(t *testing.T) {
982+
t.Parallel()
983+
984+
service := renderK8SServiceWithSetValues(
985+
t,
986+
map[string]string{
987+
"service.externalTrafficPolicy": "Local",
988+
},
989+
)
990+
991+
assert.Equal(t, corev1.ServiceExternalTrafficPolicyType("Local"), service.Spec.ExternalTrafficPolicy)
992+
}
993+
994+
// Test that internalTrafficPolicy is correctly set
995+
func TestK8SServiceInternalTrafficPolicy(t *testing.T) {
996+
t.Parallel()
997+
998+
service := renderK8SServiceWithSetValues(
999+
t,
1000+
map[string]string{
1001+
"service.internalTrafficPolicy": "Local",
1002+
},
1003+
)
1004+
1005+
assert.Equal(t, corev1.ServiceInternalTrafficPolicyType("Local"), *service.Spec.InternalTrafficPolicy)
1006+
}
1007+
9801008
// Test that sessionAffinity and sessionAffinityConfig are not rendered if not set
9811009
func TestK8SServiceSessionAffinityOnlySetIfDefined(t *testing.T) {
9821010
t.Parallel()

0 commit comments

Comments
 (0)