diff --git a/cmd/cloud-controller-manager/BUILD b/cmd/cloud-controller-manager/BUILD index ef66d9441f4..e2cdabf15e6 100644 --- a/cmd/cloud-controller-manager/BUILD +++ b/cmd/cloud-controller-manager/BUILD @@ -36,6 +36,7 @@ go_library( "//staging/src/k8s.io/component-base/metrics/prometheus/clientgo:go_default_library", "//staging/src/k8s.io/component-base/metrics/prometheus/version:go_default_library", "//staging/src/k8s.io/controller-manager/app:go_default_library", + "//staging/src/k8s.io/controller-manager/pkg/features:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/aws:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/azure:go_default_library", "//staging/src/k8s.io/legacy-cloud-providers/gce:go_default_library", diff --git a/cmd/cloud-controller-manager/nodeipamcontroller.go b/cmd/cloud-controller-manager/nodeipamcontroller.go index 105b1b4f809..c47cbd3bc98 100644 --- a/cmd/cloud-controller-manager/nodeipamcontroller.go +++ b/cmd/cloud-controller-manager/nodeipamcontroller.go @@ -28,9 +28,9 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" cloudprovider "k8s.io/cloud-provider" - "k8s.io/cloud-provider/app" cloudcontrollerconfig "k8s.io/cloud-provider/app/config" genericcontrollermanager "k8s.io/controller-manager/app" + "k8s.io/controller-manager/pkg/features" "k8s.io/klog/v2" nodeipamcontroller "k8s.io/kubernetes/pkg/controller/nodeipam" nodeipamconfig "k8s.io/kubernetes/pkg/controller/nodeipam/config" @@ -61,7 +61,7 @@ func startNodeIpamController(ccmconfig *cloudcontrollerconfig.CompletedConfig, n } // failure: more than one cidr and dual stack is not enabled - if len(clusterCIDRs) > 1 && !utilfeature.DefaultFeatureGate.Enabled(app.IPv6DualStack) { + if len(clusterCIDRs) > 1 && !utilfeature.DefaultFeatureGate.Enabled(features.IPv6DualStack) { return nil, false, fmt.Errorf("len of ClusterCIDRs==%v and dualstack feature is not enabled", len(clusterCIDRs)) } @@ -93,7 +93,7 @@ func startNodeIpamController(ccmconfig *cloudcontrollerconfig.CompletedConfig, n // the following checks are triggered if both serviceCIDR and secondaryServiceCIDR are provided if serviceCIDR != nil && secondaryServiceCIDR != nil { // should have dual stack flag enabled - if !utilfeature.DefaultFeatureGate.Enabled(app.IPv6DualStack) { + if !utilfeature.DefaultFeatureGate.Enabled(features.IPv6DualStack) { return nil, false, fmt.Errorf("secondary service cidr is provided and IPv6DualStack feature is not enabled") } @@ -108,7 +108,7 @@ func startNodeIpamController(ccmconfig *cloudcontrollerconfig.CompletedConfig, n } var nodeCIDRMaskSizeIPv4, nodeCIDRMaskSizeIPv6 int - if utilfeature.DefaultFeatureGate.Enabled(app.IPv6DualStack) { + if utilfeature.DefaultFeatureGate.Enabled(features.IPv6DualStack) { // only --node-cidr-mask-size-ipv4 and --node-cidr-mask-size-ipv6 supported with dual stack clusters. // --node-cidr-mask-size flag is incompatible with dual stack clusters. nodeCIDRMaskSizeIPv4, nodeCIDRMaskSizeIPv6, err = setNodeCIDRMaskSizesDualStack(nodeipamconfig) diff --git a/staging/src/k8s.io/cloud-provider/app/BUILD b/staging/src/k8s.io/cloud-provider/app/BUILD index 18994ad4bba..a4ba355a12b 100644 --- a/staging/src/k8s.io/cloud-provider/app/BUILD +++ b/staging/src/k8s.io/cloud-provider/app/BUILD @@ -40,6 +40,7 @@ go_library( "//staging/src/k8s.io/component-base/version/verflag:go_default_library", "//staging/src/k8s.io/controller-manager/app:go_default_library", "//staging/src/k8s.io/controller-manager/pkg/clientbuilder:go_default_library", + "//staging/src/k8s.io/controller-manager/pkg/features:go_default_library", "//staging/src/k8s.io/controller-manager/pkg/informerfactory:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", diff --git a/staging/src/k8s.io/cloud-provider/app/core.go b/staging/src/k8s.io/cloud-provider/app/core.go index d7a1ccc5c9c..6b8e961da00 100644 --- a/staging/src/k8s.io/cloud-provider/app/core.go +++ b/staging/src/k8s.io/cloud-provider/app/core.go @@ -32,18 +32,13 @@ import ( cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" routecontroller "k8s.io/cloud-provider/controllers/route" servicecontroller "k8s.io/cloud-provider/controllers/service" + "k8s.io/controller-manager/pkg/features" "k8s.io/klog/v2" netutils "k8s.io/utils/net" utilfeature "k8s.io/apiserver/pkg/util/feature" ) -const ( - // IPv6DualStack enables ipv6 dual stack feature - // Original copy from pkg/features/kube_features.go - IPv6DualStack = "IPv6DualStack" -) - func startCloudNodeController(ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { // Start the CloudNodeController nodeController, err := cloudnodecontroller.NewCloudNodeController( @@ -123,7 +118,7 @@ func startRouteController(ctx *config.CompletedConfig, cloud cloudprovider.Inter } // failure: more than one cidr and dual stack is not enabled - if len(clusterCIDRs) > 1 && !utilfeature.DefaultFeatureGate.Enabled(IPv6DualStack) { + if len(clusterCIDRs) > 1 && !utilfeature.DefaultFeatureGate.Enabled(features.IPv6DualStack) { return nil, false, fmt.Errorf("len of ClusterCIDRs==%v and dualstack feature is not enabled", len(clusterCIDRs)) } diff --git a/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go b/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go index a1d21048f58..f1f550a7c2e 100644 --- a/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go +++ b/staging/src/k8s.io/controller-manager/pkg/features/kube_features.go @@ -32,6 +32,7 @@ const ( // beta: v1.19 // // Enable legacy behavior to vary cluster functionality on the node-role.kubernetes.io labels. On by default (legacy), will be turned off in 1.18. + // Original copy from k8s.io/kubernetes/pkg/features/kube_features.go LegacyNodeRoleBehavior featuregate.Feature = "LegacyNodeRoleBehavior" // owner @brendandburns @@ -39,7 +40,15 @@ const ( // beta: v1.19 // // Enable nodes to exclude themselves from service load balancers + // Original copy from k8s.io/kubernetes/pkg/features/kube_features.go ServiceNodeExclusion featuregate.Feature = "ServiceNodeExclusion" + + // owner: @khenidak + // alpha: v1.15 + // + // Enables ipv6 dual stack + // Original copy from k8s.io/kubernetes/pkg/features/kube_features.go + IPv6DualStack featuregate.Feature = "IPv6DualStack" ) func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.MutableFeatureGate) error { @@ -51,4 +60,5 @@ func SetupCurrentKubernetesSpecificFeatureGates(featuregates featuregate.Mutable var cloudPublicFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ LegacyNodeRoleBehavior: {Default: true, PreRelease: featuregate.Beta}, ServiceNodeExclusion: {Default: true, PreRelease: featuregate.Beta}, + IPv6DualStack: {Default: false, PreRelease: featuregate.Alpha}, }