kubeadm: fix ut failures of dualstack GA

This commit is contained in:
Paco Xu 2021-09-14 13:16:40 +08:00
parent a0cc3f1c9a
commit 1385bd3a06
6 changed files with 24 additions and 74 deletions

View File

@ -223,41 +223,31 @@ func TestValidateIPNetFromString(t *testing.T) {
func TestValidatePodSubnetNodeMask(t *testing.T) { func TestValidatePodSubnetNodeMask(t *testing.T) {
var tests = []struct { var tests = []struct {
name string name string
subnet string subnet string
cmExtraArgs map[string]string cmExtraArgs map[string]string
checkDualStack bool expected bool
expected bool
}{ }{
{"single IPv4, but mask too small. Default node-mask", "10.0.0.16/29", nil, false, false},
{"single IPv4, but mask too small. Configured node-mask", "10.0.0.16/24", map[string]string{"node-cidr-mask-size": "23"}, false, false},
{"single IPv6, but mask too small. Default node-mask", "2001:db8::1/112", nil, false, false},
{"single IPv6, but mask too small. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size": "24"}, false, false},
{"single IPv6, but mask difference greater than 16. Default node-mask", "2001:db8::1/12", nil, false, false},
{"single IPv6, but mask difference greater than 16. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size": "120"}, false, false},
{"single IPv4 CIDR", "10.0.0.16/12", nil, false, true},
{"single IPv6 CIDR", "2001:db8::/48", nil, false, true},
// dual-stack: // dual-stack:
{"dual IPv4 only, but mask too small. Default node-mask", "10.0.0.16/29", nil, true, false}, {"dual IPv4 only, but mask too small. Default node-mask", "10.0.0.16/29", nil, false},
{"dual IPv4 only, but mask too small. Configured node-mask", "10.0.0.16/24", map[string]string{"node-cidr-mask-size-ipv4": "23"}, true, false}, {"dual IPv4 only, but mask too small. Configured node-mask", "10.0.0.16/24", map[string]string{"node-cidr-mask-size-ipv4": "23"}, false},
{"dual IPv6 only, but mask too small. Default node-mask", "2001:db8::1/112", nil, true, false}, {"dual IPv6 only, but mask too small. Default node-mask", "2001:db8::1/112", nil, false},
{"dual IPv6 only, but mask too small. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "24"}, true, false}, {"dual IPv6 only, but mask too small. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "24"}, false},
{"dual IPv6 only, but mask difference greater than 16. Default node-mask", "2001:db8::1/12", nil, true, false}, {"dual IPv6 only, but mask difference greater than 16. Default node-mask", "2001:db8::1/12", nil, false},
{"dual IPv6 only, but mask difference greater than 16. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "120"}, true, false}, {"dual IPv6 only, but mask difference greater than 16. Configured node-mask", "2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "120"}, false},
{"dual IPv4 only CIDR", "10.0.0.16/12", nil, true, true}, {"dual IPv4 only CIDR", "10.0.0.16/12", nil, true},
{"dual IPv6 only CIDR", "2001:db8::/48", nil, true, true}, {"dual IPv6 only CIDR", "2001:db8::/48", nil, true},
{"dual, but IPv4 mask too small. Default node-mask", "10.0.0.16/29,2001:db8::/48", nil, true, false}, {"dual, but IPv4 mask too small. Default node-mask", "10.0.0.16/29,2001:db8::/48", nil, false},
{"dual, but IPv4 mask too small. Configured node-mask", "10.0.0.16/24,2001:db8::/48", map[string]string{"node-cidr-mask-size-ipv4": "23"}, true, false}, {"dual, but IPv4 mask too small. Configured node-mask", "10.0.0.16/24,2001:db8::/48", map[string]string{"node-cidr-mask-size-ipv4": "23"}, false},
{"dual, but IPv6 mask too small. Default node-mask", "2001:db8::1/112,10.0.0.16/16", nil, true, false}, {"dual, but IPv6 mask too small. Default node-mask", "2001:db8::1/112,10.0.0.16/16", nil, false},
{"dual, but IPv6 mask too small. Configured node-mask", "10.0.0.16/16,2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "24"}, true, false}, {"dual, but IPv6 mask too small. Configured node-mask", "10.0.0.16/16,2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "24"}, false},
{"dual, but mask difference greater than 16. Default node-mask", "2001:db8::1/12,10.0.0.16/16", nil, true, false}, {"dual, but mask difference greater than 16. Default node-mask", "2001:db8::1/12,10.0.0.16/16", nil, false},
{"dual, but mask difference greater than 16. Configured node-mask", "10.0.0.16/16,2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "120"}, true, false}, {"dual, but mask difference greater than 16. Configured node-mask", "10.0.0.16/16,2001:db8::1/64", map[string]string{"node-cidr-mask-size-ipv6": "120"}, false},
{"dual IPv4 IPv6", "2001:db8::/48,10.0.0.16/12", nil, true, true}, {"dual IPv4 IPv6", "2001:db8::/48,10.0.0.16/12", nil, true},
{"dual IPv6 IPv4", "2001:db8::/48,10.0.0.16/12", nil, true, true}, {"dual IPv6 IPv4", "2001:db8::/48,10.0.0.16/12", nil, true},
} }
for _, rt := range tests { for _, rt := range tests {
cfg := &kubeadmapi.ClusterConfiguration{ cfg := &kubeadmapi.ClusterConfiguration{
FeatureGates: map[string]bool{features.IPv6DualStack: rt.checkDualStack},
ControllerManager: kubeadmapi.ControlPlaneComponent{ ControllerManager: kubeadmapi.ControlPlaneComponent{
ExtraArgs: rt.cmExtraArgs, ExtraArgs: rt.cmExtraArgs,
}, },

View File

@ -34,7 +34,6 @@ import (
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3"
"k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/features"
) )
func testKubeletConfigMap(contents string) *v1.ConfigMap { func testKubeletConfigMap(contents string) *v1.ConfigMap {
@ -128,18 +127,14 @@ func TestKubeletDefault(t *testing.T) {
{ {
name: "Service subnet, enabled dual stack defaulting works", name: "Service subnet, enabled dual stack defaulting works",
clusterCfg: kubeadmapi.ClusterConfiguration{ clusterCfg: kubeadmapi.ClusterConfiguration{
FeatureGates: map[string]bool{ FeatureGates: map[string]bool{},
features.IPv6DualStack: true,
},
Networking: kubeadmapi.Networking{ Networking: kubeadmapi.Networking{
ServiceSubnet: "192.168.0.0/16", ServiceSubnet: "192.168.0.0/16",
}, },
}, },
expected: kubeletConfig{ expected: kubeletConfig{
config: kubeletconfig.KubeletConfiguration{ config: kubeletconfig.KubeletConfiguration{
FeatureGates: map[string]bool{ FeatureGates: map[string]bool{},
features.IPv6DualStack: true,
},
StaticPodPath: kubeadmapiv1.DefaultManifestsDir, StaticPodPath: kubeadmapiv1.DefaultManifestsDir,
ClusterDNS: []string{"192.168.0.10"}, ClusterDNS: []string{"192.168.0.10"},
Authentication: kubeletconfig.KubeletAuthentication{ Authentication: kubeletconfig.KubeletAuthentication{

View File

@ -33,7 +33,6 @@ import (
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3"
"k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/features"
) )
func testKubeProxyConfigMap(contents string) *v1.ConfigMap { func testKubeProxyConfigMap(contents string) *v1.ConfigMap {
@ -104,26 +103,6 @@ func TestKubeProxyDefault(t *testing.T) {
}, },
}, },
}, },
{
name: "IPv6DualStack feature gate set to true",
clusterCfg: kubeadmapi.ClusterConfiguration{
FeatureGates: map[string]bool{
features.IPv6DualStack: true,
},
},
endpoint: kubeadmapi.APIEndpoint{},
expected: kubeProxyConfig{
config: kubeproxyconfig.KubeProxyConfiguration{
FeatureGates: map[string]bool{
features.IPv6DualStack: true,
},
BindAddress: kubeadmapiv1.DefaultProxyBindAddressv6,
ClientConnection: componentbaseconfig.ClientConnectionConfiguration{
Kubeconfig: kubeproxyKubeConfigFileName,
},
},
},
},
} }
for _, test := range tests { for _, test := range tests {

View File

@ -182,35 +182,30 @@ func TestGetKubernetesServiceCIDR(t *testing.T) {
}{ }{
{ {
svcSubnetList: "192.168.10.0/24", svcSubnetList: "192.168.10.0/24",
isDualStack: false,
expected: "192.168.10.0/24", expected: "192.168.10.0/24",
expectedError: false, expectedError: false,
name: "valid: valid IPv4 range from single-stack", name: "valid: valid IPv4 range from single-stack",
}, },
{ {
svcSubnetList: "fd03::/112", svcSubnetList: "fd03::/112",
isDualStack: false,
expected: "fd03::/112", expected: "fd03::/112",
expectedError: false, expectedError: false,
name: "valid: valid IPv6 range from single-stack", name: "valid: valid IPv6 range from single-stack",
}, },
{ {
svcSubnetList: "192.168.10.0/24,fd03::/112", svcSubnetList: "192.168.10.0/24,fd03::/112",
isDualStack: true,
expected: "192.168.10.0/24", expected: "192.168.10.0/24",
expectedError: false, expectedError: false,
name: "valid: valid <IPv4,IPv6> ranges from dual-stack", name: "valid: valid <IPv4,IPv6> ranges from dual-stack",
}, },
{ {
svcSubnetList: "fd03::/112,192.168.10.0/24", svcSubnetList: "fd03::/112,192.168.10.0/24",
isDualStack: true,
expected: "fd03::/112", expected: "fd03::/112",
expectedError: false, expectedError: false,
name: "valid: valid <IPv6,IPv4> ranges from dual-stack", name: "valid: valid <IPv6,IPv4> ranges from dual-stack",
}, },
{ {
svcSubnetList: "192.168.10.0/24,fd03:x::/112", svcSubnetList: "192.168.10.0/24,fd03:x::/112",
isDualStack: true,
expected: "", expected: "",
expectedError: true, expectedError: true,
name: "invalid: failed to parse subnet range for dual-stack", name: "invalid: failed to parse subnet range for dual-stack",
@ -219,7 +214,7 @@ func TestGetKubernetesServiceCIDR(t *testing.T) {
for _, rt := range tests { for _, rt := range tests {
t.Run(rt.name, func(t *testing.T) { t.Run(rt.name, func(t *testing.T) {
actual, actualError := GetKubernetesServiceCIDR(rt.svcSubnetList, rt.isDualStack) actual, actualError := GetKubernetesServiceCIDR(rt.svcSubnetList)
if rt.expectedError { if rt.expectedError {
if actualError == nil { if actualError == nil {
t.Errorf("failed GetKubernetesServiceCIDR:\n\texpected error, but got no error") t.Errorf("failed GetKubernetesServiceCIDR:\n\texpected error, but got no error")

View File

@ -80,30 +80,26 @@ func TestGetDNSIP(t *testing.T) {
name: "subnet mask 12", name: "subnet mask 12",
svcSubnet: "10.96.0.0/12", svcSubnet: "10.96.0.0/12",
expectedDNSIP: "10.96.0.10", expectedDNSIP: "10.96.0.10",
isDualStack: false,
}, },
{ {
name: "subnet mask 26", name: "subnet mask 26",
svcSubnet: "10.87.116.64/26", svcSubnet: "10.87.116.64/26",
expectedDNSIP: "10.87.116.74", expectedDNSIP: "10.87.116.74",
isDualStack: false,
}, },
{ {
name: "dual-stack ipv4 primary, subnet mask 26", name: "dual-stack ipv4 primary, subnet mask 26",
svcSubnet: "10.87.116.64/26,fd03::/112", svcSubnet: "10.87.116.64/26,fd03::/112",
expectedDNSIP: "10.87.116.74", expectedDNSIP: "10.87.116.74",
isDualStack: true,
}, },
{ {
name: "dual-stack ipv6 primary, subnet mask 112", name: "dual-stack ipv6 primary, subnet mask 112",
svcSubnet: "fd03::/112,10.87.116.64/26", svcSubnet: "fd03::/112,10.87.116.64/26",
expectedDNSIP: "fd03::a", expectedDNSIP: "fd03::a",
isDualStack: true,
}, },
} }
for _, rt := range tests { for _, rt := range tests {
t.Run(rt.name, func(t *testing.T) { t.Run(rt.name, func(t *testing.T) {
dnsIP, err := kubeadmconstants.GetDNSIP(rt.svcSubnet, rt.isDualStack) dnsIP, err := kubeadmconstants.GetDNSIP(rt.svcSubnet)
if err != nil { if err != nil {
t.Fatalf("couldn't get dnsIP : %v", err) t.Fatalf("couldn't get dnsIP : %v", err)
} }

View File

@ -32,7 +32,6 @@ import (
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
"k8s.io/kubernetes/cmd/kubeadm/app/features"
"k8s.io/kubernetes/cmd/kubeadm/app/phases/certs" "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs"
pkiutiltesting "k8s.io/kubernetes/cmd/kubeadm/app/util/pkiutil/testing" pkiutiltesting "k8s.io/kubernetes/cmd/kubeadm/app/util/pkiutil/testing"
staticpodutil "k8s.io/kubernetes/cmd/kubeadm/app/util/staticpod" staticpodutil "k8s.io/kubernetes/cmd/kubeadm/app/util/staticpod"
@ -599,7 +598,6 @@ func TestGetControllerManagerCommand(t *testing.T) {
}, },
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
KubernetesVersion: cpVersion, KubernetesVersion: cpVersion,
FeatureGates: map[string]bool{features.IPv6DualStack: true},
}, },
expected: []string{ expected: []string{
"kube-controller-manager", "kube-controller-manager",
@ -616,7 +614,6 @@ func TestGetControllerManagerCommand(t *testing.T) {
"--authorization-kubeconfig=" + kubeadmconstants.KubernetesDir + "/controller-manager.conf", "--authorization-kubeconfig=" + kubeadmconstants.KubernetesDir + "/controller-manager.conf",
"--client-ca-file=" + testCertsDir + "/ca.crt", "--client-ca-file=" + testCertsDir + "/ca.crt",
"--requestheader-client-ca-file=" + testCertsDir + "/front-proxy-ca.crt", "--requestheader-client-ca-file=" + testCertsDir + "/front-proxy-ca.crt",
"--feature-gates=IPv6DualStack=true",
"--allocate-node-cidrs=true", "--allocate-node-cidrs=true",
"--cluster-cidr=10.0.1.15/16", "--cluster-cidr=10.0.1.15/16",
"--service-cluster-ip-range=172.20.0.0/24", "--service-cluster-ip-range=172.20.0.0/24",
@ -728,7 +725,6 @@ func TestGetControllerManagerCommand(t *testing.T) {
}, },
CertificatesDir: testCertsDir, CertificatesDir: testCertsDir,
KubernetesVersion: cpVersion, KubernetesVersion: cpVersion,
FeatureGates: map[string]bool{features.IPv6DualStack: true},
}, },
expected: []string{ expected: []string{
"kube-controller-manager", "kube-controller-manager",
@ -745,7 +741,6 @@ func TestGetControllerManagerCommand(t *testing.T) {
"--authorization-kubeconfig=" + kubeadmconstants.KubernetesDir + "/controller-manager.conf", "--authorization-kubeconfig=" + kubeadmconstants.KubernetesDir + "/controller-manager.conf",
"--client-ca-file=" + testCertsDir + "/ca.crt", "--client-ca-file=" + testCertsDir + "/ca.crt",
"--requestheader-client-ca-file=" + testCertsDir + "/front-proxy-ca.crt", "--requestheader-client-ca-file=" + testCertsDir + "/front-proxy-ca.crt",
"--feature-gates=IPv6DualStack=true",
"--allocate-node-cidrs=true", "--allocate-node-cidrs=true",
"--cluster-cidr=2001:db8::/64,10.1.0.0/16", "--cluster-cidr=2001:db8::/64,10.1.0.0/16",
"--service-cluster-ip-range=fd03::/112,192.168.0.0/16", "--service-cluster-ip-range=fd03::/112,192.168.0.0/16",