From 3a1973872f73046589724da47b13db60e5e68ea1 Mon Sep 17 00:00:00 2001 From: Ray Krueger Date: Thu, 17 Apr 2025 14:38:36 +0000 Subject: [PATCH] fix: AWSCloudProvider ignores unrecognized provider IDs The AWSCloudProvider only supports aws://zone/name ProviderIDs. It should ignore ProviderIDs it does not recognize. Prior to this fix, an unrecognized ProviderID, such as eks-hybrid://zone/cluster/my-node which is used by EKS Hybrid Nodes, will break the Autoscaler loop. This fix returns logs a warning, and returns nil, nil instead of returning the error. --- .../cloudprovider/aws/aws_cloud_provider.go | 4 +++- .../aws/aws_cloud_provider_test.go | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go index 1670e98e57..3117b1c736 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider.go @@ -117,7 +117,9 @@ func (aws *awsCloudProvider) NodeGroupForNode(node *apiv1.Node) (cloudprovider.N } ref, err := AwsRefFromProviderId(node.Spec.ProviderID) if err != nil { - return nil, err + // Dropping this into V as it will be noisy with many Hybrid Nodes + klog.V(6).Infof("Node %v has unrecognized providerId: %v", node.Name, node.Spec.ProviderID) + return nil, nil } asg := aws.awsManager.GetAsgForInstance(*ref) diff --git a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go index 335cbeb318..1910f8752f 100644 --- a/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go +++ b/cluster-autoscaler/cloudprovider/aws/aws_cloud_provider_test.go @@ -18,6 +18,8 @@ package aws import ( "fmt" + "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" apiv1 "k8s.io/api/core/v1" @@ -26,7 +28,6 @@ import ( "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/aws" "k8s.io/autoscaler/cluster-autoscaler/cloudprovider/aws/aws-sdk-go/service/autoscaling" "k8s.io/autoscaler/cluster-autoscaler/config" - "testing" ) var testAwsManager = &AwsManager{ @@ -251,6 +252,20 @@ func TestNodeGroupForNodeWithNoProviderId(t *testing.T) { assert.Equal(t, group, nil) } +func TestNodeGroupForNodeWithHybridNode(t *testing.T) { + hybridNode := &apiv1.Node{ + Spec: apiv1.NodeSpec{ + ProviderID: "eks-hybrid:///us-west-2/my-cluster/my-node-1", + }, + } + a := &autoScalingMock{} + provider := testProvider(t, newTestAwsManagerWithAsgs(t, a, nil, []string{"1:5:test-asg"})) + group, err := provider.NodeGroupForNode(hybridNode) + + assert.NoError(t, err) + assert.Nil(t, group) +} + func TestAwsRefFromProviderId(t *testing.T) { tests := []struct { provID string