diff --git a/federation/pkg/federation-controller/service/servicecontroller.go b/federation/pkg/federation-controller/service/servicecontroller.go index a73b6b5247..2ee7852fc0 100644 --- a/federation/pkg/federation-controller/service/servicecontroller.go +++ b/federation/pkg/federation-controller/service/servicecontroller.go @@ -664,6 +664,11 @@ func (s *ServiceController) getOperationsToPerformOnCluster(cluster *v1beta1.Clu } } } + // If ExternalTrafficPolicy is not set in federated service, use the ExternalTrafficPolicy + // defaulted to in federated cluster. + if desiredService.Spec.ExternalTrafficPolicy == v1.ServiceExternalTrafficPolicyType("") { + desiredService.Spec.ExternalTrafficPolicy = clusterService.Spec.ExternalTrafficPolicy + } // Update existing service, if needed. if !Equivalent(desiredService, clusterService) { diff --git a/test/e2e_federation/service.go b/test/e2e_federation/service.go index 6ff708b59f..376b9f7a2c 100644 --- a/test/e2e_federation/service.go +++ b/test/e2e_federation/service.go @@ -379,10 +379,13 @@ func deleteServiceShard(c *fedframework.Cluster, namespace, service string) erro // equivalent returns true if the two services are equivalent. Fields which are expected to differ between // federated services and the underlying cluster services (e.g. ClusterIP, NodePort) are ignored. -func equivalent(federationService, clusterService v1.Service) bool { - clusterService.Spec.ClusterIP = federationService.Spec.ClusterIP - for i := range clusterService.Spec.Ports { - clusterService.Spec.Ports[i].NodePort = federationService.Spec.Ports[i].NodePort +func equivalent(clusterService, federationService v1.Service) bool { + federationService.Spec.ClusterIP = clusterService.Spec.ClusterIP + for i := range federationService.Spec.Ports { + federationService.Spec.Ports[i].NodePort = clusterService.Spec.Ports[i].NodePort + } + if federationService.Spec.ExternalTrafficPolicy == v1.ServiceExternalTrafficPolicyType("") { + federationService.Spec.ExternalTrafficPolicy = clusterService.Spec.ExternalTrafficPolicy } if federationService.Name != clusterService.Name || federationService.Namespace != clusterService.Namespace {