Skip to content

Commit 342e398

Browse files
authored
Resolve clusterDNS for IPv6 MNG AL2023 with custom AMI (#8170)
* resolve cluster DNS for IPv6 MNG AL2023 with custom AMI * correct error message
1 parent 90ff203 commit 342e398

File tree

2 files changed

+48
-22
lines changed

2 files changed

+48
-22
lines changed

pkg/nodebootstrap/al2023_test.go

+22-16
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
3333
ng := api.NewNodeGroup()
3434
makeDefaultNPSettings(ng)
3535

36-
if e.overrideClusterSettings != nil {
37-
e.overrideClusterSettings(cfg)
38-
}
39-
4036
if e.overrideNodegroupSettings != nil {
4137
e.overrideNodegroupSettings(ng)
4238
}
@@ -54,14 +50,6 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
5450
Entry("default", al2023Entry{
5551
expectedUserData: wrapMIMEParts(nodeConfig),
5652
}),
57-
Entry("ipv6", al2023Entry{
58-
overrideClusterSettings: func(cc *api.ClusterConfig) {
59-
cc.Status.KubernetesNetworkConfig.IPFamily = api.IPV6Family
60-
cc.Status.KubernetesNetworkConfig.ServiceIPv6CIDR = "fd00:facc:76a1::/108"
61-
cc.Status.KubernetesNetworkConfig.ServiceIPv4CIDR = ""
62-
},
63-
expectedUserData: wrapMIMEParts(nodeConfigIPv6),
64-
}),
6553
Entry("efa enabled", al2023Entry{
6654
overrideNodegroupSettings: func(np api.NodePool) {
6755
np.BaseNodeGroup().EFAEnabled = aws.Bool(true)
@@ -71,7 +59,13 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
7159
)
7260

7361
var _ = DescribeTable("Managed AL2023", func(e al2023Entry) {
74-
cfg, dns := makeDefaultClusterSettings()
62+
cfg, _ := makeDefaultClusterSettings()
63+
if e.overrideClusterSettings != nil {
64+
e.overrideClusterSettings(cfg)
65+
}
66+
dns, err := nodebootstrap.GetClusterDNS(cfg)
67+
Expect(err).NotTo(HaveOccurred())
68+
7569
mng := api.NewManagedNodeGroup()
7670
makeDefaultNPSettings(mng)
7771
mng.Taints = append(mng.Taints, api.NodeGroupTaint{
@@ -101,6 +95,17 @@ var _ = DescribeTable("Managed AL2023", func(e al2023Entry) {
10195
},
10296
expectedUserData: wrapMIMEParts(managedNodeConfig),
10397
}),
98+
Entry("custom AMI IPv6", al2023Entry{
99+
overrideClusterSettings: func(cc *api.ClusterConfig) {
100+
cc.Status.KubernetesNetworkConfig.IPFamily = api.IPV6Family
101+
cc.Status.KubernetesNetworkConfig.ServiceIPv6CIDR = "fd40:6404:f93b::/108"
102+
cc.Status.KubernetesNetworkConfig.ServiceIPv4CIDR = ""
103+
},
104+
overrideNodegroupSettings: func(np api.NodePool) {
105+
np.BaseNodeGroup().AMI = "ami-xxxx"
106+
},
107+
expectedUserData: wrapMIMEParts(managedNodeConfigIPv6),
108+
}),
104109
)
105110

106111
type al2023OverrideNodeConfigEntry struct {
@@ -400,7 +405,7 @@ spec:
400405
- --node-labels=alpha.eksctl.io/nodegroup-name=al2023-mng-test
401406
402407
`
403-
nodeConfigIPv6 = `--//
408+
managedNodeConfigIPv6 = `--//
404409
Content-Type: application/node.eks.aws
405410
406411
apiVersion: node.eks.aws/v1alpha1
@@ -411,17 +416,18 @@ spec:
411416
cluster:
412417
apiServerEndpoint: https://test.xxx.us-west-2.eks.amazonaws.com
413418
certificateAuthority: dGVzdCBDQQ==
414-
cidr: fd00:facc:76a1::/108
419+
cidr: fd40:6404:f93b::/108
415420
name: al2023-test
416421
containerd: {}
417422
instance:
418423
localStorage: {}
419424
kubelet:
420425
config:
421426
clusterDNS:
422-
- 10.100.0.10
427+
- fd40:6404:f93b::a
423428
flags:
424429
- --node-labels=alpha.eksctl.io/nodegroup-name=al2023-mng-test
430+
- --register-with-taints=special=true:NoSchedule
425431
426432
`
427433
managedNodeConfig = `--//

pkg/nodebootstrap/userdata.go

+26-6
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,37 @@ func NewManagedBootstrapper(clusterConfig *api.ClusterConfig, ng *api.ManagedNod
8989
// GetClusterDNS returns the DNS address to use
9090
func GetClusterDNS(clusterConfig *api.ClusterConfig) (string, error) {
9191
networkConfig := clusterConfig.Status.KubernetesNetworkConfig
92-
if networkConfig == nil || networkConfig.ServiceIPv4CIDR == "" {
92+
if networkConfig == nil {
9393
return "", nil
9494
}
9595

96-
ip, _, err := net.ParseCIDR(networkConfig.ServiceIPv4CIDR)
96+
var (
97+
serviceCIDR string
98+
toClusterDNS func(net.IP) string
99+
)
100+
101+
if networkConfig.ServiceIPv4CIDR != "" {
102+
serviceCIDR = networkConfig.ServiceIPv4CIDR
103+
toClusterDNS = func(parsedIP net.IP) string {
104+
ip := parsedIP.To4()
105+
ip[net.IPv4len-1] = 10
106+
return ip.String()
107+
}
108+
}
109+
if networkConfig.ServiceIPv6CIDR != "" {
110+
serviceCIDR = networkConfig.ServiceIPv6CIDR
111+
toClusterDNS = func(parsedIP net.IP) string {
112+
ip := parsedIP.To16()
113+
ip[net.IPv6len-1] = 10
114+
return ip.String()
115+
}
116+
}
117+
118+
parsedIP, _, err := net.ParseCIDR(serviceCIDR)
97119
if err != nil {
98-
return "", errors.Wrapf(err, "unexpected error parsing kubernetesNetworkConfig.serviceIPv4CIDR: %q", networkConfig.ServiceIPv4CIDR)
120+
return "", errors.Wrapf(err, "unexpected error parsing KubernetesNetworkConfig service CIDR: %q", serviceCIDR)
99121
}
100-
ip = ip.To4()
101-
ip[net.IPv4len-1] = 10
102-
return ip.String(), nil
122+
return toClusterDNS(parsedIP), nil
103123
}
104124

105125
func linuxConfig(clusterConfig *api.ClusterConfig, bootScriptName, bootScriptContent, clusterDNS string, np api.NodePool, scripts ...script) (string, error) {

0 commit comments

Comments
 (0)