From 8cbe9fe543e1c6360bd5dc6088db3c5a63af58ab Mon Sep 17 00:00:00 2001 From: DingShujie Date: Mon, 13 Mar 2023 10:25:56 +0800 Subject: [PATCH 1/2] trigger update event when service ipFamilies changes. Signed-off-by: DingShujie --- .../controllers/service/controller.go | 9 +++ .../controllers/service/controller_test.go | 74 +++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/staging/src/k8s.io/cloud-provider/controllers/service/controller.go b/staging/src/k8s.io/cloud-provider/controllers/service/controller.go index d470fef7de83..d33c345d64d4 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/service/controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/service/controller.go @@ -582,6 +582,15 @@ func (c *Controller) needsUpdate(oldService *v1.Service, newService *v1.Service) return true } + // User can upgrade (add another clusterIP or ipFamily) or can downgrade (remove secondary clusterIP or ipFamily), + // but CAN NOT change primary/secondary clusterIP || ipFamily UNLESS they are changing from/to/ON ExternalName + // so not care about order, only need check the length. + if len(oldService.Spec.IPFamilies) != len(newService.Spec.IPFamilies) { + c.eventRecorder.Eventf(newService, v1.EventTypeNormal, "IPFamilies", "Count: %v -> %v", + len(oldService.Spec.IPFamilies), len(newService.Spec.IPFamilies)) + return true + } + return false } diff --git a/staging/src/k8s.io/cloud-provider/controllers/service/controller_test.go b/staging/src/k8s.io/cloud-provider/controllers/service/controller_test.go index 77f7050cf59e..2b2aa5f91301 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/service/controller_test.go +++ b/staging/src/k8s.io/cloud-provider/controllers/service/controller_test.go @@ -1633,6 +1633,80 @@ func TestNeedsUpdate(t *testing.T) { }, expectedNeedsUpdate: true, }, + { + testName: "If service IPFamilies from single stack to dual stack", + updateFn: func() { + protocol := "http" + oldSvc = &v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "tcp-service", + Namespace: "default", + }, + Spec: v1.ServiceSpec{ + Ports: []v1.ServicePort{{ + Port: 80, + Protocol: v1.ProtocolTCP, + TargetPort: intstr.Parse("22"), + AppProtocol: &protocol, + }}, + IPFamilies: []v1.IPFamily{v1.IPv4Protocol}, + Type: v1.ServiceTypeLoadBalancer, + }, + } + newSvc = oldSvc.DeepCopy() + newSvc.Spec.IPFamilies = []v1.IPFamily{v1.IPv4Protocol, v1.IPv6Protocol} + }, + expectedNeedsUpdate: true, + }, + { + testName: "If service IPFamilies from dual stack to single stack", + updateFn: func() { + protocol := "http" + oldSvc = &v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "tcp-service", + Namespace: "default", + }, + Spec: v1.ServiceSpec{ + Ports: []v1.ServicePort{{ + Port: 80, + Protocol: v1.ProtocolTCP, + TargetPort: intstr.Parse("22"), + AppProtocol: &protocol, + }}, + IPFamilies: []v1.IPFamily{v1.IPv4Protocol, v1.IPv6Protocol}, + Type: v1.ServiceTypeLoadBalancer, + }, + } + newSvc = oldSvc.DeepCopy() + newSvc.Spec.IPFamilies = []v1.IPFamily{v1.IPv4Protocol} + }, + expectedNeedsUpdate: true, + }, + { + testName: "If service IPFamilies not change", + updateFn: func() { + protocol := "http" + oldSvc = &v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "tcp-service", + Namespace: "default", + }, + Spec: v1.ServiceSpec{ + Ports: []v1.ServicePort{{ + Port: 80, + Protocol: v1.ProtocolTCP, + TargetPort: intstr.Parse("22"), + AppProtocol: &protocol, + }}, + IPFamilies: []v1.IPFamily{v1.IPv4Protocol}, + Type: v1.ServiceTypeLoadBalancer, + }, + } + newSvc = oldSvc.DeepCopy() + }, + expectedNeedsUpdate: false, + }, } controller, _, _ := newController() From c94a9a14d8dd482247dff77a653dead46f543ae7 Mon Sep 17 00:00:00 2001 From: DingShujie Date: Wed, 15 Mar 2023 10:02:46 +0800 Subject: [PATCH 2/2] update gofmt Signed-off-by: DingShujie --- .../src/k8s.io/cloud-provider/controllers/service/controller.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/staging/src/k8s.io/cloud-provider/controllers/service/controller.go b/staging/src/k8s.io/cloud-provider/controllers/service/controller.go index d33c345d64d4..cda635ea4445 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/service/controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/service/controller.go @@ -582,7 +582,7 @@ func (c *Controller) needsUpdate(oldService *v1.Service, newService *v1.Service) return true } - // User can upgrade (add another clusterIP or ipFamily) or can downgrade (remove secondary clusterIP or ipFamily), + // User can upgrade (add another clusterIP or ipFamily) or can downgrade (remove secondary clusterIP or ipFamily), // but CAN NOT change primary/secondary clusterIP || ipFamily UNLESS they are changing from/to/ON ExternalName // so not care about order, only need check the length. if len(oldService.Spec.IPFamilies) != len(newService.Spec.IPFamilies) {