diff --git a/pkg/agent/controller/clusterip_service_test.go b/pkg/agent/controller/clusterip_service_test.go index 4f8834734..98924fd89 100644 --- a/pkg/agent/controller/clusterip_service_test.go +++ b/pkg/agent/controller/clusterip_service_test.go @@ -20,6 +20,7 @@ package controller_test import ( "fmt" + "strconv" . "github.com/onsi/ginkgo/v2" "github.com/submariner-io/admiral/pkg/resource" @@ -244,6 +245,7 @@ func testClusterIPServiceInOneCluster() { constants.MCSLabelSourceCluster: t.cluster1.clusterID, mcsv1a1.LabelServiceName: service.Name, constants.LabelSourceNamespace: service.Namespace, + constants.LabelIsHeadless: strconv.FormatBool(false), }, }, AddressType: discovery.AddressTypeIPv4, @@ -438,7 +440,7 @@ func testClusterIPServiceWithMultipleEPS() { t.cluster1.serviceEndpointSlices = append(t.cluster1.serviceEndpointSlices, discovery.EndpointSlice{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s2", serviceName, clusterID1), - Labels: map[string]string{discovery.LabelServiceName: serviceName}, + Labels: t.cluster1.serviceEndpointSlices[0].Labels, }, AddressType: discovery.AddressTypeIPv4, Endpoints: []discovery.Endpoint{ diff --git a/pkg/agent/controller/controller_suite_test.go b/pkg/agent/controller/controller_suite_test.go index 4c0d6adfe..fc3209403 100644 --- a/pkg/agent/controller/controller_suite_test.go +++ b/pkg/agent/controller/controller_suite_test.go @@ -27,6 +27,7 @@ import ( "reflect" "sort" "strconv" + "strings" "testing" "time" @@ -173,6 +174,10 @@ func newTestDiver() *testDriver { ObjectMeta: metav1.ObjectMeta{ Name: serviceName, Namespace: serviceNamespace, + Labels: map[string]string{ + "service-label1": "value1", + "service-label2": "value2", + }, }, Spec: corev1.ServiceSpec{ ClusterIP: "10.253.9.1", @@ -189,8 +194,11 @@ func newTestDiver() *testDriver { serviceEndpointSlices: []discovery.EndpointSlice{ { ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%s-%s1", serviceName, clusterID1), - Labels: map[string]string{discovery.LabelServiceName: serviceName}, + Name: fmt.Sprintf("%s-%s1", serviceName, clusterID1), + Labels: map[string]string{ + discovery.LabelServiceName: serviceName, + "kubernetes.io/cluster-service": "true", + }, }, AddressType: discovery.AddressTypeIPv4, Endpoints: []discovery.Endpoint{ @@ -319,6 +327,10 @@ func (t *testDriver) afterEach() { } func (c *cluster) init(syncerConfig *broker.SyncerConfig) { + for k, v := range c.service.Labels { + c.serviceEndpointSlices[0].Labels[k] = v + } + c.serviceIP = c.service.Spec.ClusterIP c.localDynClient = dynamicfake.NewSimpleDynamicClient(syncerConfig.Scheme) @@ -713,10 +725,16 @@ func awaitEndpointSlice(client dynamic.ResourceInterface, serviceName string, ex Fail(fmt.Sprintf("EndpointSlice for %s/%s not found", expected.Namespace, expected.Name)) } - for k, v := range expected.Labels { - Expect(endpointSlice.Labels).To(HaveKeyWithValue(k, v)) + actualLabels := map[string]string{} + + for k, v := range endpointSlice.Labels { + if !strings.HasPrefix(k, "submariner-io/") { + actualLabels[k] = v + } } + Expect(actualLabels).To(Equal(expected.Labels)) + for k, v := range expected.Annotations { Expect(endpointSlice.Annotations).To(HaveKeyWithValue(k, v)) } @@ -800,6 +818,10 @@ func (t *testDriver) awaitEndpointSlice(c *cluster) { AddressType: discovery.AddressTypeIPv4, } + for k, v := range c.service.Labels { + epsTemplate.Labels[k] = v + } + var expected []discovery.EndpointSlice if isHeadless { @@ -811,6 +833,7 @@ func (t *testDriver) awaitEndpointSlice(c *cluster) { eps.Endpoints = c.headlessEndpointAddresses[i] eps.Ports = c.serviceEndpointSlices[i].Ports eps.Name = c.serviceEndpointSlices[i].Name + eps.Labels[constants.LabelSourceName] = c.serviceEndpointSlices[i].Name expected = append(expected, *eps) } } else { diff --git a/pkg/agent/controller/headless_service_test.go b/pkg/agent/controller/headless_service_test.go index 10e5c90b0..3d4688564 100644 --- a/pkg/agent/controller/headless_service_test.go +++ b/pkg/agent/controller/headless_service_test.go @@ -137,7 +137,7 @@ var _ = Describe("Headless Service export", func() { t.cluster1.serviceEndpointSlices = append(t.cluster1.serviceEndpointSlices, discovery.EndpointSlice{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s2", serviceName, clusterID1), - Labels: map[string]string{discovery.LabelServiceName: serviceName}, + Labels: t.cluster1.serviceEndpointSlices[0].Labels, }, AddressType: discovery.AddressTypeIPv4, Endpoints: []discovery.Endpoint{ diff --git a/pkg/agent/controller/service_endpoint_slices.go b/pkg/agent/controller/service_endpoint_slices.go index 60620e5f7..9c7d8d5d3 100644 --- a/pkg/agent/controller/service_endpoint_slices.go +++ b/pkg/agent/controller/service_endpoint_slices.go @@ -23,6 +23,7 @@ import ( "encoding/json" "fmt" "strconv" + "strings" "github.com/pkg/errors" "github.com/submariner-io/admiral/pkg/federate" @@ -265,6 +266,12 @@ func (c *ServiceEndpointSliceController) newEndpointSliceFrom(serviceEPS *discov AddressType: serviceEPS.AddressType, } + for k, v := range serviceEPS.Labels { + if !strings.Contains(k, "kubernetes.io/") { + eps.Labels[k] = v + } + } + if c.isHeadless() { eps.Labels[constants.LabelSourceName] = serviceEPS.Name }