Skip to content

Commit

Permalink
Merge pull request #475 from wangamel/automated-cherry-pick-of-#471-u…
Browse files Browse the repository at this point in the history
…pstream-release-1.21

Automated cherry pick of #471: Use ip address to describeENI for fargate nodes
  • Loading branch information
k8s-ci-robot authored Aug 29, 2022
2 parents 8018ec8 + e7e8d0b commit 7af8b68
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
15 changes: 12 additions & 3 deletions pkg/providers/v1/aws.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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,
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/providers/v1/aws_fakes.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
}
}
Expand Down
11 changes: 10 additions & 1 deletion pkg/providers/v1/aws_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 7af8b68

Please sign in to comment.