Skip to content

Commit

Permalink
Resolve clusterDNS for IPv6 MNG AL2023 with custom AMI (#8170)
Browse files Browse the repository at this point in the history
* resolve cluster DNS for IPv6 MNG AL2023 with custom AMI

* correct error message
  • Loading branch information
TiberiuGC authored Jan 29, 2025
1 parent 90ff203 commit 342e398
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 22 deletions.
38 changes: 22 additions & 16 deletions pkg/nodebootstrap/al2023_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,6 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
ng := api.NewNodeGroup()
makeDefaultNPSettings(ng)

if e.overrideClusterSettings != nil {
e.overrideClusterSettings(cfg)
}

if e.overrideNodegroupSettings != nil {
e.overrideNodegroupSettings(ng)
}
Expand All @@ -54,14 +50,6 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
Entry("default", al2023Entry{
expectedUserData: wrapMIMEParts(nodeConfig),
}),
Entry("ipv6", al2023Entry{
overrideClusterSettings: func(cc *api.ClusterConfig) {
cc.Status.KubernetesNetworkConfig.IPFamily = api.IPV6Family
cc.Status.KubernetesNetworkConfig.ServiceIPv6CIDR = "fd00:facc:76a1::/108"
cc.Status.KubernetesNetworkConfig.ServiceIPv4CIDR = ""
},
expectedUserData: wrapMIMEParts(nodeConfigIPv6),
}),
Entry("efa enabled", al2023Entry{
overrideNodegroupSettings: func(np api.NodePool) {
np.BaseNodeGroup().EFAEnabled = aws.Bool(true)
Expand All @@ -71,7 +59,13 @@ var _ = DescribeTable("Unmanaged AL2023", func(e al2023Entry) {
)

var _ = DescribeTable("Managed AL2023", func(e al2023Entry) {
cfg, dns := makeDefaultClusterSettings()
cfg, _ := makeDefaultClusterSettings()
if e.overrideClusterSettings != nil {
e.overrideClusterSettings(cfg)
}
dns, err := nodebootstrap.GetClusterDNS(cfg)
Expect(err).NotTo(HaveOccurred())

mng := api.NewManagedNodeGroup()
makeDefaultNPSettings(mng)
mng.Taints = append(mng.Taints, api.NodeGroupTaint{
Expand Down Expand Up @@ -101,6 +95,17 @@ var _ = DescribeTable("Managed AL2023", func(e al2023Entry) {
},
expectedUserData: wrapMIMEParts(managedNodeConfig),
}),
Entry("custom AMI IPv6", al2023Entry{
overrideClusterSettings: func(cc *api.ClusterConfig) {
cc.Status.KubernetesNetworkConfig.IPFamily = api.IPV6Family
cc.Status.KubernetesNetworkConfig.ServiceIPv6CIDR = "fd40:6404:f93b::/108"
cc.Status.KubernetesNetworkConfig.ServiceIPv4CIDR = ""
},
overrideNodegroupSettings: func(np api.NodePool) {
np.BaseNodeGroup().AMI = "ami-xxxx"
},
expectedUserData: wrapMIMEParts(managedNodeConfigIPv6),
}),
)

type al2023OverrideNodeConfigEntry struct {
Expand Down Expand Up @@ -400,7 +405,7 @@ spec:
- --node-labels=alpha.eksctl.io/nodegroup-name=al2023-mng-test
`
nodeConfigIPv6 = `--//
managedNodeConfigIPv6 = `--//
Content-Type: application/node.eks.aws
apiVersion: node.eks.aws/v1alpha1
Expand All @@ -411,17 +416,18 @@ spec:
cluster:
apiServerEndpoint: https://test.xxx.us-west-2.eks.amazonaws.com
certificateAuthority: dGVzdCBDQQ==
cidr: fd00:facc:76a1::/108
cidr: fd40:6404:f93b::/108
name: al2023-test
containerd: {}
instance:
localStorage: {}
kubelet:
config:
clusterDNS:
- 10.100.0.10
- fd40:6404:f93b::a
flags:
- --node-labels=alpha.eksctl.io/nodegroup-name=al2023-mng-test
- --register-with-taints=special=true:NoSchedule
`
managedNodeConfig = `--//
Expand Down
32 changes: 26 additions & 6 deletions pkg/nodebootstrap/userdata.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,17 +89,37 @@ func NewManagedBootstrapper(clusterConfig *api.ClusterConfig, ng *api.ManagedNod
// GetClusterDNS returns the DNS address to use
func GetClusterDNS(clusterConfig *api.ClusterConfig) (string, error) {
networkConfig := clusterConfig.Status.KubernetesNetworkConfig
if networkConfig == nil || networkConfig.ServiceIPv4CIDR == "" {
if networkConfig == nil {
return "", nil
}

ip, _, err := net.ParseCIDR(networkConfig.ServiceIPv4CIDR)
var (
serviceCIDR string
toClusterDNS func(net.IP) string
)

if networkConfig.ServiceIPv4CIDR != "" {
serviceCIDR = networkConfig.ServiceIPv4CIDR
toClusterDNS = func(parsedIP net.IP) string {
ip := parsedIP.To4()
ip[net.IPv4len-1] = 10
return ip.String()
}
}
if networkConfig.ServiceIPv6CIDR != "" {
serviceCIDR = networkConfig.ServiceIPv6CIDR
toClusterDNS = func(parsedIP net.IP) string {
ip := parsedIP.To16()
ip[net.IPv6len-1] = 10
return ip.String()
}
}

parsedIP, _, err := net.ParseCIDR(serviceCIDR)
if err != nil {
return "", errors.Wrapf(err, "unexpected error parsing kubernetesNetworkConfig.serviceIPv4CIDR: %q", networkConfig.ServiceIPv4CIDR)
return "", errors.Wrapf(err, "unexpected error parsing KubernetesNetworkConfig service CIDR: %q", serviceCIDR)
}
ip = ip.To4()
ip[net.IPv4len-1] = 10
return ip.String(), nil
return toClusterDNS(parsedIP), nil
}

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

0 comments on commit 342e398

Please sign in to comment.