Skip to content

Commit b46259b

Browse files
committed
kubeadm: Move IPv6DualStack feature gate to component config
kubeadm is setting the IPv6DualStack feature gate in the command line of the kubelet. However, the kubelet is gradually moving away from command line flags towards component config use. Hence, we should set the IPv6DualStack feature gate in the component config instead. Signed-off-by: Rostislav M. Georgiev <[email protected]>
1 parent 9f76518 commit b46259b

File tree

4 files changed

+48
-12
lines changed

4 files changed

+48
-12
lines changed

cmd/kubeadm/app/componentconfigs/kubelet.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ func (kc *kubeletConfig) Default(cfg *kubeadmapi.ClusterConfiguration, _ *kubead
105105
kc.config.FeatureGates = map[string]bool{}
106106
}
107107

108+
// TODO: The following code should be removed after dual-stack is GA.
109+
// Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value.
110+
if enabled, present := cfg.FeatureGates[features.IPv6DualStack]; present {
111+
kc.config.FeatureGates[features.IPv6DualStack] = enabled
112+
}
113+
108114
if kc.config.StaticPodPath == "" {
109115
kc.config.StaticPodPath = kubeadmapiv1beta2.DefaultManifestsDir
110116
} else if kc.config.StaticPodPath != kubeadmapiv1beta2.DefaultManifestsDir {

cmd/kubeadm/app/componentconfigs/kubelet_test.go

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,45 @@ func TestKubeletDefault(t *testing.T) {
229229
},
230230
},
231231
{
232-
name: "Service subnet, dual stack defaulting works",
232+
name: "Service subnet, explicitly disabled dual stack defaulting works",
233+
clusterCfg: kubeadmapi.ClusterConfiguration{
234+
FeatureGates: map[string]bool{
235+
features.IPv6DualStack: false,
236+
},
237+
Networking: kubeadmapi.Networking{
238+
ServiceSubnet: "192.168.0.0/16",
239+
},
240+
},
241+
expected: kubeletConfig{
242+
config: kubeletconfig.KubeletConfiguration{
243+
FeatureGates: map[string]bool{
244+
features.IPv6DualStack: false,
245+
},
246+
StaticPodPath: kubeadmapiv1beta2.DefaultManifestsDir,
247+
ClusterDNS: []string{"192.168.0.10"},
248+
Authentication: kubeletconfig.KubeletAuthentication{
249+
X509: kubeletconfig.KubeletX509Authentication{
250+
ClientCAFile: constants.CACertName,
251+
},
252+
Anonymous: kubeletconfig.KubeletAnonymousAuthentication{
253+
Enabled: utilpointer.BoolPtr(kubeletAuthenticationAnonymousEnabled),
254+
},
255+
Webhook: kubeletconfig.KubeletWebhookAuthentication{
256+
Enabled: utilpointer.BoolPtr(kubeletAuthenticationWebhookEnabled),
257+
},
258+
},
259+
Authorization: kubeletconfig.KubeletAuthorization{
260+
Mode: kubeletconfig.KubeletAuthorizationModeWebhook,
261+
},
262+
HealthzBindAddress: kubeletHealthzBindAddress,
263+
HealthzPort: utilpointer.Int32Ptr(constants.KubeletHealthzPort),
264+
RotateCertificates: kubeletRotateCertificates,
265+
ResolverConfig: resolverConfig,
266+
},
267+
},
268+
},
269+
{
270+
name: "Service subnet, enabled dual stack defaulting works",
233271
clusterCfg: kubeadmapi.ClusterConfiguration{
234272
FeatureGates: map[string]bool{
235273
features.IPv6DualStack: true,
@@ -240,7 +278,9 @@ func TestKubeletDefault(t *testing.T) {
240278
},
241279
expected: kubeletConfig{
242280
config: kubeletconfig.KubeletConfiguration{
243-
FeatureGates: map[string]bool{},
281+
FeatureGates: map[string]bool{
282+
features.IPv6DualStack: true,
283+
},
244284
StaticPodPath: kubeadmapiv1beta2.DefaultManifestsDir,
245285
ClusterDNS: []string{"192.168.0.10"},
246286
Authentication: kubeletconfig.KubeletAuthentication{

cmd/kubeadm/app/phases/kubelet/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ go_library(
1414
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
1515
"//cmd/kubeadm/app/componentconfigs:go_default_library",
1616
"//cmd/kubeadm/app/constants:go_default_library",
17-
"//cmd/kubeadm/app/features:go_default_library",
1817
"//cmd/kubeadm/app/images:go_default_library",
1918
"//cmd/kubeadm/app/util:go_default_library",
2019
"//cmd/kubeadm/app/util/apiclient:go_default_library",

cmd/kubeadm/app/phases/kubelet/flags.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,12 @@ import (
2828

2929
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
3030
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
31-
"k8s.io/kubernetes/cmd/kubeadm/app/features"
3231
"k8s.io/kubernetes/cmd/kubeadm/app/images"
3332
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
3433
)
3534

3635
type kubeletFlagsOpts struct {
3736
nodeRegOpts *kubeadmapi.NodeRegistrationOptions
38-
featureGates map[string]bool
3937
pauseImage string
4038
registerTaintsUsingFlags bool
4139
}
@@ -63,7 +61,6 @@ func GetNodeNameAndHostname(cfg *kubeadmapi.NodeRegistrationOptions) (string, st
6361
func WriteKubeletDynamicEnvFile(cfg *kubeadmapi.ClusterConfiguration, nodeReg *kubeadmapi.NodeRegistrationOptions, registerTaintsUsingFlags bool, kubeletDir string) error {
6462
flagOpts := kubeletFlagsOpts{
6563
nodeRegOpts: nodeReg,
66-
featureGates: cfg.FeatureGates,
6764
pauseImage: images.GetPauseImage(cfg),
6865
registerTaintsUsingFlags: registerTaintsUsingFlags,
6966
}
@@ -109,12 +106,6 @@ func buildKubeletArgMapCommon(opts kubeletFlagsOpts) map[string]string {
109106
kubeletFlags["hostname-override"] = nodeName
110107
}
111108

112-
// TODO: The following code should be removed after dual-stack is GA.
113-
// Note: The user still retains the ability to explicitly set feature-gates and that value will overwrite this base value.
114-
if enabled, present := opts.featureGates[features.IPv6DualStack]; present {
115-
kubeletFlags["feature-gates"] = fmt.Sprintf("%s=%t", features.IPv6DualStack, enabled)
116-
}
117-
118109
return kubeletFlags
119110
}
120111

0 commit comments

Comments
 (0)