From 9ab98d9f69a9bc8c0c31bd69d5932e8e61df3126 Mon Sep 17 00:00:00 2001 From: Zihong Zheng Date: Thu, 7 Dec 2017 21:22:49 -0800 Subject: [PATCH] Remove ExternalTrafficLocalOnly from kube_feature gate --- pkg/features/kube_features.go | 5 ---- pkg/proxy/iptables/BUILD | 2 -- pkg/proxy/iptables/proxier.go | 9 +----- pkg/proxy/ipvs/BUILD | 2 -- pkg/proxy/ipvs/proxier.go | 9 +----- pkg/proxy/winkernel/BUILD | 2 -- pkg/proxy/winkernel/proxier.go | 9 +----- pkg/registry/core/service/BUILD | 4 --- pkg/registry/core/service/rest.go | 39 +++++++++++--------------- pkg/registry/core/service/rest_test.go | 6 ---- 10 files changed, 19 insertions(+), 68 deletions(-) diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 80599039bc..640d7f9c4a 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -33,10 +33,6 @@ const ( // beta: v1.4 AppArmor utilfeature.Feature = "AppArmor" - // owner: @girishkalele - // alpha: v1.4 - ExternalTrafficLocalOnly utilfeature.Feature = "AllowExtTrafficLocalEndpoints" - // owner: @mtaufen // alpha: v1.4 DynamicKubeletConfig utilfeature.Feature = "DynamicKubeletConfig" @@ -222,7 +218,6 @@ func init() { // To add a new feature, define a key for it above and add it here. The features will be // available throughout Kubernetes binaries. var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureSpec{ - ExternalTrafficLocalOnly: {Default: true, PreRelease: utilfeature.GA}, AppArmor: {Default: true, PreRelease: utilfeature.Beta}, DynamicKubeletConfig: {Default: false, PreRelease: utilfeature.Alpha}, KubeletConfigFile: {Default: false, PreRelease: utilfeature.Alpha}, diff --git a/pkg/proxy/iptables/BUILD b/pkg/proxy/iptables/BUILD index cd7e76524e..052111719a 100644 --- a/pkg/proxy/iptables/BUILD +++ b/pkg/proxy/iptables/BUILD @@ -16,7 +16,6 @@ go_library( "//pkg/api/service:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", "//pkg/proxy/metrics:go_default_library", @@ -30,7 +29,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ], diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 1710d989f9..353346d8dd 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -39,12 +39,10 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/service" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" "k8s.io/kubernetes/pkg/proxy/metrics" @@ -191,8 +189,7 @@ func (e *endpointsInfo) String() string { // returns a new serviceInfo struct func newServiceInfo(svcPortName proxy.ServicePortName, port *api.ServicePort, service *api.Service) *serviceInfo { onlyNodeLocalEndpoints := false - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) && - apiservice.RequestsOnlyLocalTraffic(service) { + if apiservice.RequestsOnlyLocalTraffic(service) { onlyNodeLocalEndpoints = true } var stickyMaxAgeSeconds int @@ -773,10 +770,6 @@ func updateEndpointsMap( changes.items = make(map[types.NamespacedName]*endpointsChange) }() - if !utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) { - return - } - // TODO: If this will appear to be computationally expensive, consider // computing this incrementally similarly to endpointsMap. result.hcEndpoints = make(map[types.NamespacedName]int) diff --git a/pkg/proxy/ipvs/BUILD b/pkg/proxy/ipvs/BUILD index 30945e4433..6369e1321e 100644 --- a/pkg/proxy/ipvs/BUILD +++ b/pkg/proxy/ipvs/BUILD @@ -53,7 +53,6 @@ go_library( "//pkg/api/service:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", "//pkg/proxy/metrics:go_default_library", @@ -70,7 +69,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ] + select({ diff --git a/pkg/proxy/ipvs/proxier.go b/pkg/proxy/ipvs/proxier.go index 5f5a09d244..bfbdd83d88 100644 --- a/pkg/proxy/ipvs/proxier.go +++ b/pkg/proxy/ipvs/proxier.go @@ -38,12 +38,10 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/service" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" "k8s.io/kubernetes/pkg/proxy/metrics" @@ -367,8 +365,7 @@ func updateServiceMap( // returns a new serviceInfo struct func newServiceInfo(svcPortName proxy.ServicePortName, port *api.ServicePort, service *api.Service) *serviceInfo { onlyNodeLocalEndpoints := false - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) && - apiservice.RequestsOnlyLocalTraffic(service) { + if apiservice.RequestsOnlyLocalTraffic(service) { onlyNodeLocalEndpoints = true } var stickyMaxAgeSeconds int @@ -589,10 +586,6 @@ func updateEndpointsMap( changes.items = make(map[types.NamespacedName]*endpointsChange) }() - if !utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) { - return - } - // TODO: If this will appear to be computationally expensive, consider // computing this incrementally similarly to endpointsMap. result.hcEndpoints = make(map[types.NamespacedName]int) diff --git a/pkg/proxy/winkernel/BUILD b/pkg/proxy/winkernel/BUILD index 4249439169..2788e09c3c 100644 --- a/pkg/proxy/winkernel/BUILD +++ b/pkg/proxy/winkernel/BUILD @@ -19,7 +19,6 @@ go_library( "//pkg/api/service:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", "//pkg/util/async:go_default_library", @@ -29,7 +28,6 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", ], "//conditions:default": [], diff --git a/pkg/proxy/winkernel/proxier.go b/pkg/proxy/winkernel/proxier.go index 5d56561c42..7b75e4a947 100644 --- a/pkg/proxy/winkernel/proxier.go +++ b/pkg/proxy/winkernel/proxier.go @@ -35,12 +35,10 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/service" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" "k8s.io/kubernetes/pkg/util/async" @@ -160,8 +158,7 @@ func (ep *endpointsInfo) Cleanup() { // returns a new serviceInfo struct func newServiceInfo(svcPortName proxy.ServicePortName, port *api.ServicePort, service *api.Service) *serviceInfo { onlyNodeLocalEndpoints := false - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) && - apiservice.RequestsOnlyLocalTraffic(service) { + if apiservice.RequestsOnlyLocalTraffic(service) { onlyNodeLocalEndpoints = true } @@ -825,10 +822,6 @@ func (proxier *Proxier) updateEndpointsMap() (result updateEndpointMapResult) { changes.items = make(map[types.NamespacedName]*endpointsChange) }() - if !utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) { - return - } - // TODO: If this will appear to be computationally expensive, consider // computing this incrementally similarly to endpointsMap. result.hcEndpoints = make(map[types.NamespacedName]int) diff --git a/pkg/registry/core/service/BUILD b/pkg/registry/core/service/BUILD index ca6517abf2..f53b19b13e 100644 --- a/pkg/registry/core/service/BUILD +++ b/pkg/registry/core/service/BUILD @@ -23,7 +23,6 @@ go_library( "//pkg/apis/core/helper:go_default_library", "//pkg/apis/core/validation:go_default_library", "//pkg/capabilities:go_default_library", - "//pkg/features:go_default_library", "//pkg/registry/core/endpoint:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/registry/core/service/portallocator:go_default_library", @@ -40,7 +39,6 @@ go_library( "//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//vendor/k8s.io/apiserver/pkg/storage/names:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) @@ -56,7 +54,6 @@ go_test( "//pkg/api/service:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/registry/core/service/portallocator:go_default_library", "//pkg/registry/registrytest:go_default_library", @@ -69,7 +66,6 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/util/rand:go_default_library", "//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library", - "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", ], ) diff --git a/pkg/registry/core/service/rest.go b/pkg/registry/core/service/rest.go index 689850c1b8..3c8fca7a75 100644 --- a/pkg/registry/core/service/rest.go +++ b/pkg/registry/core/service/rest.go @@ -35,12 +35,10 @@ import ( "k8s.io/apimachinery/pkg/watch" genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" - utilfeature "k8s.io/apiserver/pkg/util/feature" apiservice "k8s.io/kubernetes/pkg/api/service" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" "k8s.io/kubernetes/pkg/apis/core/validation" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/registry/core/endpoint" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/portallocator" @@ -131,17 +129,15 @@ func (rs *REST) Create(ctx genericapirequest.Context, obj runtime.Object, create } } - // Handle ExternalTraiffc related fields during service creation. - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) { - if apiservice.NeedsHealthCheck(service) { - if err := rs.allocateHealthCheckNodePort(service, nodePortOp); err != nil { - return nil, errors.NewInternalError(err) - } - } - if errs := validation.ValidateServiceExternalTrafficFieldsCombination(service); len(errs) > 0 { - return nil, errors.NewInvalid(api.Kind("Service"), service.Name, errs) + // Handle ExternalTraffic related fields during service creation. + if apiservice.NeedsHealthCheck(service) { + if err := rs.allocateHealthCheckNodePort(service, nodePortOp); err != nil { + return nil, errors.NewInternalError(err) } } + if errs := validation.ValidateServiceExternalTrafficFieldsCombination(service); len(errs) > 0 { + return nil, errors.NewInvalid(api.Kind("Service"), service.Name, errs) + } out, err := rs.registry.CreateService(ctx, service, createValidation) if err != nil { @@ -191,8 +187,7 @@ func (rs *REST) Delete(ctx genericapirequest.Context, id string) (runtime.Object } } - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) && - apiservice.NeedsHealthCheck(service) { + if apiservice.NeedsHealthCheck(service) { nodePort := service.Spec.HealthCheckNodePort if nodePort > 0 { err := rs.serviceNodePorts.Release(int(nodePort)) @@ -358,16 +353,14 @@ func (rs *REST) Update(ctx genericapirequest.Context, name string, objInfo rest. service.Status.LoadBalancer = api.LoadBalancerStatus{} } - // Handle ExternalTraiffc related updates. - if utilfeature.DefaultFeatureGate.Enabled(features.ExternalTrafficLocalOnly) { - success, err := rs.healthCheckNodePortUpdate(oldService, service, nodePortOp) - if !success || err != nil { - return nil, false, err - } - externalTrafficPolicyUpdate(oldService, service) - if errs := validation.ValidateServiceExternalTrafficFieldsCombination(service); len(errs) > 0 { - return nil, false, errors.NewInvalid(api.Kind("Service"), service.Name, errs) - } + // Handle ExternalTraffic related updates. + success, err := rs.healthCheckNodePortUpdate(oldService, service, nodePortOp) + if !success || err != nil { + return nil, false, err + } + externalTrafficPolicyUpdate(oldService, service) + if errs := validation.ValidateServiceExternalTrafficFieldsCombination(service); len(errs) > 0 { + return nil, false, errors.NewInvalid(api.Kind("Service"), service.Name, errs) } out, err := rs.registry.UpdateService(ctx, service, createValidation, updateValidation) diff --git a/pkg/registry/core/service/rest_test.go b/pkg/registry/core/service/rest_test.go index edc1a334d4..fa87951abd 100644 --- a/pkg/registry/core/service/rest_test.go +++ b/pkg/registry/core/service/rest_test.go @@ -31,20 +31,14 @@ import ( "k8s.io/apimachinery/pkg/util/rand" genericapirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/registry/rest" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api/service" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/portallocator" "k8s.io/kubernetes/pkg/registry/registrytest" ) -func init() { - utilfeature.DefaultFeatureGate.Set(string(features.ExternalTrafficLocalOnly) + "=true") -} - // TODO(wojtek-t): Cleanup this file. // It is now testing mostly the same things as other resources but // in a completely different way. We should unify it.