From 0da56949a4f6e426eb5b4b43f4b6bb34e7da081f Mon Sep 17 00:00:00 2001 From: wangamel Date: Thu, 25 Aug 2022 12:43:08 -0700 Subject: [PATCH 1/4] Use ip address to describeENI for fargate nodes --- pkg/providers/v1/aws.go | 15 ++++++++++++--- pkg/providers/v1/aws_test.go | 9 +++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pkg/providers/v1/aws.go b/pkg/providers/v1/aws.go index f6276b0ec3..ccbbb29e20 100644 --- a/pkg/providers/v1/aws.go +++ b/pkg/providers/v1/aws.go @@ -5120,6 +5120,13 @@ func IsFargateNode(nodeName string) bool { return strings.HasPrefix(nodeName, fargateNodeNamePrefix) } +// extract private ip address from node name +func nodeNameToIpAddress(nodeName string) string { + nodeName = strings.TrimPrefix(nodeName, privateDNSNamePrefix) + nodeName = strings.Split(nodeName, ".")[0] + return strings.ReplaceAll(nodeName, "-", ".") +} + func (c *Cloud) nodeNameToProviderID(nodeName types.NodeName) (InstanceID, error) { if len(nodeName) == 0 { return "", fmt.Errorf("no nodeName provided") @@ -5184,12 +5191,14 @@ func (c *Cloud) describeNetworkInterfaces(nodeName string) (*ec2.NetworkInterfac } // when enableDnsSupport is set to false in a VPC, interface will not have private DNS names. + // convert node name to ip address because ip-name based and resource-named EC2 resources + // may have different privateDNSName formats but same privateIpAddress format if strings.HasPrefix(eniEndpoint, privateDNSNamePrefix) { - filters = append(filters, newEc2Filter("private-dns-name", eniEndpoint)) - } else { - filters = append(filters, newEc2Filter("private-ip-address", eniEndpoint)) + eniEndpoint = nodeNameToIpAddress(eniEndpoint) } + filters = append(filters, newEc2Filter("private-ip-address", eniEndpoint)) + request := &ec2.DescribeNetworkInterfacesInput{ Filters: filters, } diff --git a/pkg/providers/v1/aws_test.go b/pkg/providers/v1/aws_test.go index 273dca6266..a1e1afc5d6 100644 --- a/pkg/providers/v1/aws_test.go +++ b/pkg/providers/v1/aws_test.go @@ -3578,6 +3578,15 @@ func TestInstanceExistsByProviderIDForFargate(t *testing.T) { assert.True(t, instanceExist) } +func TestInstanceExistsByProviderIDWithNodeNameForFargate(t *testing.T) { + awsServices := newMockedFakeAWSServices(TestClusterID) + c, _ := newAWSCloud(CloudConfig{}, awsServices) + + instanceExist, err := c.InstanceExistsByProviderID(context.TODO(), "aws:///us-west-2c/1abc-2def/fargate-ip-192-168-164-88.us-west-2.compute.internal") + assert.Nil(t, err) + assert.True(t, instanceExist) +} + func TestInstanceNotExistsByProviderIDForFargate(t *testing.T) { awsServices := newMockedFakeAWSServices(TestClusterID) c, _ := newAWSCloud(CloudConfig{}, awsServices) From 982b952dfe0ac6f1c95afe06e5484d4eb32fa0c2 Mon Sep 17 00:00:00 2001 From: Amelia <62352183+wangamel@users.noreply.github.com> Date: Thu, 25 Aug 2022 23:49:36 -0700 Subject: [PATCH 2/4] Fix nodeNameToIpAddress name --- pkg/providers/v1/aws.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/providers/v1/aws.go b/pkg/providers/v1/aws.go index ccbbb29e20..3e94138fd8 100644 --- a/pkg/providers/v1/aws.go +++ b/pkg/providers/v1/aws.go @@ -5121,7 +5121,7 @@ func IsFargateNode(nodeName string) bool { } // extract private ip address from node name -func nodeNameToIpAddress(nodeName string) string { +func nodeNameToIPAddress(nodeName string) string { nodeName = strings.TrimPrefix(nodeName, privateDNSNamePrefix) nodeName = strings.Split(nodeName, ".")[0] return strings.ReplaceAll(nodeName, "-", ".") @@ -5194,7 +5194,7 @@ func (c *Cloud) describeNetworkInterfaces(nodeName string) (*ec2.NetworkInterfac // convert node name to ip address because ip-name based and resource-named EC2 resources // may have different privateDNSName formats but same privateIpAddress format if strings.HasPrefix(eniEndpoint, privateDNSNamePrefix) { - eniEndpoint = nodeNameToIpAddress(eniEndpoint) + eniEndpoint = nodeNameToIPAddress(eniEndpoint) } filters = append(filters, newEc2Filter("private-ip-address", eniEndpoint)) From 929a298b94f80add899caad3c0e68a7e50c3ae22 Mon Sep 17 00:00:00 2001 From: wangamel Date: Thu, 25 Aug 2022 23:51:26 -0700 Subject: [PATCH 3/4] Fix TestNodeAddressesForFargate --- pkg/providers/v1/aws_fakes.go | 2 +- pkg/providers/v1/aws_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/providers/v1/aws_fakes.go b/pkg/providers/v1/aws_fakes.go index dc82c1bbfe..1b3780512f 100644 --- a/pkg/providers/v1/aws_fakes.go +++ b/pkg/providers/v1/aws_fakes.go @@ -728,7 +728,7 @@ func (ec2i *FakeEC2Impl) DescribeNetworkInterfaces(input *ec2.DescribeNetworkInt return &ec2.DescribeNetworkInterfacesOutput{}, nil } - if *filter.Name == "private-dns-name" { + if *filter.Values[0] == "return.private.dns.name" { networkInterface[0].PrivateDnsName = aws.String("ip-1-2-3-4.compute.amazon.com") } } diff --git a/pkg/providers/v1/aws_test.go b/pkg/providers/v1/aws_test.go index a1e1afc5d6..dc5455d9ac 100644 --- a/pkg/providers/v1/aws_test.go +++ b/pkg/providers/v1/aws_test.go @@ -3545,7 +3545,7 @@ func TestNodeAddressesForFargate(t *testing.T) { awsServices := newMockedFakeAWSServices(TestClusterID) c, _ := newAWSCloud(CloudConfig{}, awsServices) - nodeAddresses, _ := c.NodeAddressesByProviderID(context.TODO(), "aws:///us-west-2c/1abc-2def/fargate-ip-192.168.164.88") + nodeAddresses, _ := c.NodeAddressesByProviderID(context.TODO(), "aws:///us-west-2c/1abc-2def/fargate-ip-return-private-dns-name.us-west-2.compute.internal") verifyNodeAddressesForFargate(t, true, nodeAddresses) } From e7e8d0bc7a04b6afb360f038c787755cf85d27a0 Mon Sep 17 00:00:00 2001 From: wangamel Date: Thu, 25 Aug 2022 23:51:26 -0700 Subject: [PATCH 4/4] Fix TestNodeAddressesForFargate --- pkg/providers/v1/aws.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/providers/v1/aws.go b/pkg/providers/v1/aws.go index 3e94138fd8..e09a8e8cb1 100644 --- a/pkg/providers/v1/aws.go +++ b/pkg/providers/v1/aws.go @@ -5126,7 +5126,7 @@ func nodeNameToIPAddress(nodeName string) string { nodeName = strings.Split(nodeName, ".")[0] return strings.ReplaceAll(nodeName, "-", ".") } - + func (c *Cloud) nodeNameToProviderID(nodeName types.NodeName) (InstanceID, error) { if len(nodeName) == 0 { return "", fmt.Errorf("no nodeName provided")