Merge pull request #91162 from kaivalya97/patch-2

gce-Instances NodeAddresses: Add check for multiple interface IPs
This commit is contained in:
Kubernetes Prow Robot 2020-06-28 22:18:14 -07:00 committed by GitHub
commit 7942dca975
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -42,7 +42,10 @@ import (
)
const (
defaultZone = ""
defaultZone = ""
networkInterfaceIP = "instance/network-interfaces/%s/ip"
networkInterfaceAccessConfigs = "instance/network-interfaces/%s/access-configs"
networkInterfaceExternalIP = "instance/network-interfaces/%s/access-configs/%s/external-ip"
)
func newInstancesMetricContext(request, zone string) *metricContext {
@ -93,28 +96,60 @@ func (g *Cloud) NodeAddresses(ctx context.Context, nodeName types.NodeName) ([]v
// Use metadata server if possible
if g.isCurrentInstance(instanceName) {
internalIP, err := metadata.Get("instance/network-interfaces/0/ip")
nics, err := metadata.Get("instance/network-interfaces/")
if err != nil {
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
}
externalIP, err := metadata.Get("instance/network-interfaces/0/access-configs/0/external-ip")
if err != nil {
return nil, fmt.Errorf("couldn't get external IP: %v", err)
}
addresses := []v1.NodeAddress{
{Type: v1.NodeInternalIP, Address: internalIP},
{Type: v1.NodeExternalIP, Address: externalIP},
return nil, fmt.Errorf("couldn't get network interfaces: %v", err)
}
if internalDNSFull, err := metadata.Get("instance/hostname"); err != nil {
nicsArr := strings.Split(nics, "/\n")
nodeAddresses := []v1.NodeAddress{}
for _, nic := range nicsArr {
if nic == "" {
continue
}
internalIP, err := metadata.Get(fmt.Sprintf(networkInterfaceIP, nic))
if err != nil {
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
}
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: internalIP})
acs, err := metadata.Get(fmt.Sprintf(networkInterfaceAccessConfigs, nic))
if err != nil {
return nil, fmt.Errorf("couldn't get access configs: %v", err)
}
acsArr := strings.Split(acs, "/\n")
for _, ac := range acsArr {
if ac == "" {
continue
}
externalIP, err := metadata.Get(fmt.Sprintf(networkInterfaceExternalIP, nic, ac))
if err != nil {
return nil, fmt.Errorf("couldn't get external IP: %v", err)
}
if externalIP != "" {
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: externalIP})
}
}
}
internalDNSFull, err := metadata.Get("instance/hostname")
if err != nil {
klog.Warningf("couldn't get full internal DNS name: %v", err)
} else {
addresses = append(addresses,
nodeAddresses = append(nodeAddresses,
v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull},
v1.NodeAddress{Type: v1.NodeHostName, Address: internalDNSFull},
)
}
return addresses, nil
return nodeAddresses, nil
}
}
@ -209,12 +244,15 @@ func nodeAddressesFromInstance(instance *compute.Instance) ([]v1.NodeAddress, er
if len(instance.NetworkInterfaces) < 1 {
return nil, fmt.Errorf("could not find network interfaces for instanceID %q", instance.Id)
}
networkInterface := instance.NetworkInterfaces[0]
nodeAddresses := []v1.NodeAddress{}
nodeAddresses := []v1.NodeAddress{{Type: v1.NodeInternalIP, Address: networkInterface.NetworkIP}}
for _, config := range networkInterface.AccessConfigs {
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: config.NatIP})
for _, nic := range instance.NetworkInterfaces {
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: nic.NetworkIP})
for _, config := range nic.AccessConfigs {
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: config.NatIP})
}
}
return nodeAddresses, nil
}