Skip to content

Commit ac347e6

Browse files
authored
fix: use latest managed addon version for kube-proxy image name (#8505)
fix: use latest managed addon version for kube-proxy instead of cluster version When eksctl updates a self-managed kube-proxy addon, it previously used the larger version between describe-addon-versions API response and the k8s cluster version. This assumption is incorrect for cases like k8s v1.32.8 where the latest available image is v1.32.7-eksbuild.1. Changes: - Always use the latest version from managed addon versions API - Remove version comparison logic and unused helper functions - Update unit tests to reflect the new behavior - Add test case for k8s v1.32.8 scenario This ensures kube-proxy always uses the most recent available image version from AWS EKS managed addon API, which is more reliable than assuming cluster version has a corresponding image.
1 parent b79b0c2 commit ac347e6

2 files changed

Lines changed: 23 additions & 32 deletions

File tree

pkg/addons/default/kube_proxy.go

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -115,39 +115,13 @@ func addArm64NodeSelector(daemonSet *v1.DaemonSet) error {
115115
}
116116

117117
func getLatestKubeProxyImage(ctx context.Context, input AddonInput) (string, error) {
118-
defaultClusterVersion := generateImageVersionFromClusterVersion(input.ControlPlaneVersion)
118+
// Always use the latest version from managed addon versions
119119
latestEKSReportedVersion, err := getLatestImageVersionFromEKS(ctx, input.AddonVersionDescriber, input.ControlPlaneVersion)
120120
if err != nil {
121121
return "", err
122122
}
123123

124-
// Sometimes the EKS API is ahead, sometimes behind. Pick whichever is latest
125-
eksVersionIsGreaterThanDefaultVersion, err := versionGreaterThan(latestEKSReportedVersion, defaultClusterVersion)
126-
if err != nil {
127-
return "", err
128-
}
129-
130-
if eksVersionIsGreaterThanDefaultVersion {
131-
return latestEKSReportedVersion, nil
132-
}
133-
134-
return defaultClusterVersion, nil
135-
}
136-
137-
func versionGreaterThan(v1, v2 string) (bool, error) {
138-
v1Version, err := parseVersion(v1)
139-
if err != nil {
140-
return false, err
141-
}
142-
v2Version, err := parseVersion(v2)
143-
if err != nil {
144-
return false, err
145-
}
146-
return v1Version.GreaterThan(v2Version), nil
147-
}
148-
149-
func generateImageVersionFromClusterVersion(controlPlaneVersion string) string {
150-
return fmt.Sprintf("v%s-eksbuild.1", controlPlaneVersion)
124+
return latestEKSReportedVersion, nil
151125
}
152126

153127
func getLatestImageVersionFromEKS(ctx context.Context, addonDescriber AddonVersionDescriber, controlPlaneVersion string) (string, error) {

pkg/addons/default/kube_proxy_test.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,16 +151,16 @@ var _ = Describe("KubeProxy", func() {
151151
expectedImageTag: "1.23.1-minimal-eksbuild.2",
152152
}),
153153

154-
Entry("version that is behind the default cluster version should not be used", versionUpdateEntry{
154+
Entry("always uses the latest version from managed addon versions", versionUpdateEntry{
155155
addonOutput: ekstypes.AddonInfo{
156156
AddonName: aws.String("kube-proxy"),
157157
AddonVersions: []ekstypes.AddonVersionInfo{
158158
{
159159
AddonVersion: aws.String("v1.17.0-eksbuild.1"),
160160
},
161161
{
162-
// Latest, unordered list to ensure we sort correctly
163-
// behind the default-cluster version 1.18.1-eksbuild.1.
162+
// Latest version from managed addon versions should always be used
163+
// regardless of cluster version
164164
AddonVersion: aws.String("v1.18.0-eksbuild.2"),
165165
},
166166
{
@@ -169,7 +169,24 @@ var _ = Describe("KubeProxy", func() {
169169
},
170170
},
171171

172-
expectedImageTag: "v1.23.1-eksbuild.1",
172+
expectedImageTag: "v1.18.0-minimal-eksbuild.2",
173+
}),
174+
175+
Entry("uses latest managed addon version when cluster version has no corresponding image (k8s v1.32.8 scenario)", versionUpdateEntry{
176+
addonOutput: ekstypes.AddonInfo{
177+
AddonName: aws.String("kube-proxy"),
178+
AddonVersions: []ekstypes.AddonVersionInfo{
179+
{
180+
AddonVersion: aws.String("v1.32.6-eksbuild.1"),
181+
},
182+
{
183+
// Latest available image is v1.32.7-eksbuild.1, even though cluster is v1.32.8
184+
AddonVersion: aws.String("v1.32.7-eksbuild.1"),
185+
},
186+
},
187+
},
188+
189+
expectedImageTag: "v1.32.7-minimal-eksbuild.1",
173190
}),
174191
)
175192

0 commit comments

Comments
 (0)