From d41f7b99ef9f21f308f026134e26ba6190f17771 Mon Sep 17 00:00:00 2001 From: guohaowang Date: Thu, 6 Jun 2019 15:37:14 +0800 Subject: [PATCH] service controller: if targetPort has changed will process by cloud-provider Signed-off-by: guohaowang --- pkg/controller/service/BUILD | 1 + pkg/controller/service/service_controller.go | 5 +- .../service/service_controller_test.go | 47 ++++++++++++++++++- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/pkg/controller/service/BUILD b/pkg/controller/service/BUILD index 4654d37151b..7dc61692236 100644 --- a/pkg/controller/service/BUILD +++ b/pkg/controller/service/BUILD @@ -59,6 +59,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", diff --git a/pkg/controller/service/service_controller.go b/pkg/controller/service/service_controller.go index f3ba02c01c4..bd70b39876b 100644 --- a/pkg/controller/service/service_controller.go +++ b/pkg/controller/service/service_controller.go @@ -565,8 +565,9 @@ func portEqualForLB(x, y *v1.ServicePort) bool { return false } - // We don't check TargetPort; that is not relevant for load balancing - // TODO: Should we blank it out? Or just check it anyway? + if x.TargetPort != y.TargetPort { + return false + } return true } diff --git a/pkg/controller/service/service_controller_test.go b/pkg/controller/service/service_controller_test.go index a888c69b7af..2a5f545a4b0 100644 --- a/pkg/controller/service/service_controller_test.go +++ b/pkg/controller/service/service_controller_test.go @@ -25,12 +25,13 @@ import ( "testing" "time" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/intstr" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" @@ -986,6 +987,50 @@ func TestNeedsUpdate(t *testing.T) { }, expectedNeedsUpdate: true, }, + { + testName: "If TargetGroup is different 1", + updateFn: func() { + 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("20"), + }}, + Type: v1.ServiceTypeLoadBalancer, + }, + } + newSvc = oldSvc.DeepCopy() + newSvc.Spec.Ports[0].TargetPort = intstr.Parse("21") + }, + expectedNeedsUpdate: true, + }, + { + testName: "If TargetGroup is different 2", + updateFn: func() { + 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"), + }}, + Type: v1.ServiceTypeLoadBalancer, + }, + } + newSvc = oldSvc.DeepCopy() + newSvc.Spec.Ports[0].TargetPort = intstr.Parse("dns") + }, + expectedNeedsUpdate: true, + }, } controller, _, _ := newController()