diff --git a/pkg/operator/controller/ingress/nodeport_service.go b/pkg/operator/controller/ingress/nodeport_service.go index 1b6919e4c0..170cf05cdd 100644 --- a/pkg/operator/controller/ingress/nodeport_service.go +++ b/pkg/operator/controller/ingress/nodeport_service.go @@ -137,6 +137,7 @@ func nodePortServiceChanged(current, expected *corev1.Service) (bool, *corev1.Se // have modified. cmpopts.IgnoreFields(corev1.ServicePort{}, "NodePort"), cmpopts.IgnoreFields(corev1.ServiceSpec{}, "ClusterIP", "ExternalIPs", "HealthCheckNodePort"), + cmp.Comparer(cmpServiceAffinity), cmpopts.EquateEmpty(), } if cmp.Equal(current.Spec, expected.Spec, serviceCmpOpts...) { @@ -161,3 +162,13 @@ func nodePortServiceChanged(current, expected *corev1.Service) (bool, *corev1.Se return true, updated } + +func cmpServiceAffinity(a, b corev1.ServiceAffinity) bool { + if len(a) == 0 { + a = corev1.ServiceAffinityNone + } + if len(b) == 0 { + b = corev1.ServiceAffinityNone + } + return a == b +} diff --git a/pkg/operator/controller/ingress/nodeport_service_test.go b/pkg/operator/controller/ingress/nodeport_service_test.go index 2c77f6235c..6448d8c881 100644 --- a/pkg/operator/controller/ingress/nodeport_service_test.go +++ b/pkg/operator/controller/ingress/nodeport_service_test.go @@ -127,6 +127,20 @@ func TestNodePortServiceChanged(t *testing.T) { }, expect: true, }, + { + description: "if .spec.sessionAffinity is defaulted", + mutate: func(service *corev1.Service) { + service.Spec.SessionAffinity = corev1.ServiceAffinityNone + }, + expect: false, + }, + { + description: "if .spec.sessionAffinity is set to a non-default value", + mutate: func(service *corev1.Service) { + service.Spec.SessionAffinity = corev1.ServiceAffinityClientIP + }, + expect: true, + }, { description: "if .spec.type changes", mutate: func(svc *corev1.Service) {