Skip to content

Commit d2e53e5

Browse files
Create EFA specific security group for self-managed node groups always (#8554)
1 parent 4c3ca02 commit d2e53e5

File tree

5 files changed

+21
-34
lines changed

5 files changed

+21
-34
lines changed

pkg/cfn/builder/managed_launch_template.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (m *ManagedNodeGroupResourceSet) makeLaunchTemplateData(ctx context.Context
8484
Description: "worker nodes in group " + m.nodeGroup.Name,
8585
}
8686

87-
efaSG, err := efa.ProcessSecurityGroup(config, m.addEFASecurityGroup)
87+
efaSG, err := efa.ProcessSecurityGroup(config, m.addEFASecurityGroup, true)
8888
if err != nil {
8989
return nil, err
9090
} else if efaSG != nil {

pkg/cfn/builder/nodegroup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ func (n *NodeGroupResourceSet) addResourcesForSecurityGroups() error {
231231
Description: desc,
232232
}
233233

234-
efaSG, err := efa.ProcessSecurityGroup(config, n.rs.addEFASecurityGroup)
234+
efaSG, err := efa.ProcessSecurityGroup(config, n.rs.addEFASecurityGroup, false)
235235
if err != nil {
236236
return err
237237
} else if efaSG != nil {

pkg/cfn/builder/nodegroup_test.go

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -684,27 +684,15 @@ var _ = Describe("Unmanaged NodeGroup Template Builder", func() {
684684
)
685685
})
686686

687-
Context("Kubernetes 1.33+ with built-in EFA support", func() {
687+
Context("Kubernetes 1.33+ has no built-in EFA support since self managed", func() {
688688
BeforeEach(func() {
689689
cfg.Metadata.Version = "1.33"
690690
})
691691

692-
It("does not create custom EFA security groups", func() {
693-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFASG"))
694-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFAEgressSelf"))
695-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFAIngressSelf"))
696-
})
697-
})
698-
699-
Context("Kubernetes 1.34 with built-in EFA support", func() {
700-
BeforeEach(func() {
701-
cfg.Metadata.Version = "1.34"
702-
})
703-
704-
It("does not create custom EFA security groups", func() {
705-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFASG"))
706-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFAEgressSelf"))
707-
Expect(ngTemplate.Resources).NotTo(HaveKey("EFAIngressSelf"))
692+
It("creates custom EFA security groups", func() {
693+
Expect(ngTemplate.Resources).To(HaveKey("EFASG"))
694+
Expect(ngTemplate.Resources).To(HaveKey("EFAEgressSelf"))
695+
Expect(ngTemplate.Resources).To(HaveKey("EFAIngressSelf"))
708696
})
709697
})
710698

pkg/utils/efa/efa.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import (
1010
)
1111

1212
// IsBuiltInSupported returns true if the Kubernetes version supports built-in EFA in the default security group
13-
func IsBuiltInSupported(kubernetesVersion string) (bool, error) {
14-
supported, err := version.IsMinVersion(api.EFABuiltInSupportVersion, kubernetesVersion)
13+
func IsBuiltInSupported(kubernetesVersion string, isManagedNodeGroups bool) (bool, error) {
14+
minVersion, err := version.IsMinVersion(api.EFABuiltInSupportVersion, kubernetesVersion)
1515
if err != nil {
1616
return false, fmt.Errorf("failed to determine EFA built-in support for Kubernetes version %q (minimum required: %s): %w",
1717
kubernetesVersion, api.EFABuiltInSupportVersion, err)
1818
}
19-
return supported, nil
19+
return minVersion && isManagedNodeGroups, nil
2020
}
2121

2222
// SecurityGroupConfig holds the configuration needed for EFA security group creation
@@ -30,16 +30,16 @@ type SecurityGroupConfig struct {
3030

3131
// ProcessSecurityGroup handles the common EFA security group logic
3232
// Returns the security group (nil if built-in EFA is used) and any error
33-
func ProcessSecurityGroup(config SecurityGroupConfig, addEFASecurityGroupFunc func(*gfnt.Value, string, string) *gfnt.Value) (*gfnt.Value, error) {
34-
supported, err := IsBuiltInSupported(config.ClusterVersion)
33+
func ProcessSecurityGroup(config SecurityGroupConfig, addEFASecurityGroupFunc func(*gfnt.Value, string, string) *gfnt.Value, isManagedNodeGroups bool) (*gfnt.Value, error) {
34+
supported, err := IsBuiltInSupported(config.ClusterVersion, isManagedNodeGroups)
3535
if err != nil {
3636
logger.Warning("failed to parse Kubernetes version %s for EFA configuration: %v; falling back to custom EFA security group creation", config.ClusterVersion, err)
3737
// Fall back to creating custom EFA security group when version parsing fails
3838
supported = false
3939
}
4040

4141
if !supported {
42-
logger.Info("creating custom EFA security group for nodegroup %s with Kubernetes %s (EFA built-in support requires version 1.33+)", config.NodeGroupName, config.ClusterVersion)
42+
logger.Info("creating custom EFA security group for nodegroup %s with Kubernetes %s (EFA built-in support requires version 1.33+ and managed-node groups)", config.NodeGroupName, config.ClusterVersion)
4343
efaSG := addEFASecurityGroupFunc(config.VPCID, config.ClusterName, config.Description)
4444
if efaSG == nil {
4545
return nil, fmt.Errorf("failed to create EFA security group for nodegroup %s with Kubernetes %s: invalid VPC ID or cluster configuration", config.NodeGroupName, config.ClusterVersion)
@@ -48,6 +48,6 @@ func ProcessSecurityGroup(config SecurityGroupConfig, addEFASecurityGroupFunc fu
4848
return efaSG, nil
4949
}
5050

51-
logger.Info("using built-in EFA support in default security group for nodegroup %s with Kubernetes %s (no custom EFA security group needed)", config.NodeGroupName, config.ClusterVersion)
51+
logger.Info("using built-in EFA support in default security group for managed nodegroup %s with Kubernetes %s (no custom EFA security group needed)", config.NodeGroupName, config.ClusterVersion)
5252
return nil, nil
5353
}

pkg/utils/efa/efa_test.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var _ = Describe("EFA Utils", func() {
1212
Describe("IsBuiltInSupported", func() {
1313
DescribeTable("EFA built-in support version detection",
1414
func(kubernetesVersion string, expected bool, expectError bool) {
15-
result, err := efa.IsBuiltInSupported(kubernetesVersion)
15+
result, err := efa.IsBuiltInSupported(kubernetesVersion, true)
1616
if expectError {
1717
Expect(err).To(HaveOccurred())
1818
} else {
@@ -42,22 +42,21 @@ var _ = Describe("EFA Utils", func() {
4242

4343
Context("Test error handling", func() {
4444
It("should provide detailed error context for invalid versions", func() {
45-
_, err := efa.IsBuiltInSupported("invalid.version")
45+
_, err := efa.IsBuiltInSupported("invalid.version", true)
4646
Expect(err).To(HaveOccurred())
4747
Expect(err.Error()).To(ContainSubstring("failed to determine EFA built-in support"))
4848
Expect(err.Error()).To(ContainSubstring("invalid.version"))
4949
Expect(err.Error()).To(ContainSubstring("minimum required: 1.33"))
5050
})
5151

52-
It("should provide detailed error context for empty versions", func() {
53-
_, err := efa.IsBuiltInSupported("")
54-
Expect(err).To(HaveOccurred())
55-
Expect(err.Error()).To(ContainSubstring("failed to determine EFA built-in support"))
56-
Expect(err.Error()).To(ContainSubstring("minimum required: 1.33"))
52+
It("should return false if managed node groups is false", func() {
53+
result, err := efa.IsBuiltInSupported("1.34", false)
54+
Expect(err).NotTo(HaveOccurred())
55+
Expect(result).To(BeFalse())
5756
})
5857

5958
It("should provide detailed error context for malformed versions", func() {
60-
_, err := efa.IsBuiltInSupported("1.33.invalid.extra")
59+
_, err := efa.IsBuiltInSupported("1.33.invalid.extra", true)
6160
Expect(err).To(HaveOccurred())
6261
Expect(err.Error()).To(ContainSubstring("failed to determine EFA built-in support"))
6362
Expect(err.Error()).To(ContainSubstring("1.33.invalid.extra"))

0 commit comments

Comments
 (0)