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

@ -43,6 +43,9 @@ import (
const ( 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 { 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 // Use metadata server if possible
if g.isCurrentInstance(instanceName) { 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 network interfaces: %v", err)
}
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 { if err != nil {
return nil, fmt.Errorf("couldn't get internal IP: %v", err) return nil, fmt.Errorf("couldn't get internal IP: %v", err)
} }
externalIP, err := metadata.Get("instance/network-interfaces/0/access-configs/0/external-ip") 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 { if err != nil {
return nil, fmt.Errorf("couldn't get external IP: %v", err) return nil, fmt.Errorf("couldn't get external IP: %v", err)
} }
addresses := []v1.NodeAddress{
{Type: v1.NodeInternalIP, Address: internalIP}, if externalIP != "" {
{Type: v1.NodeExternalIP, Address: externalIP}, nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: externalIP})
}
}
} }
if internalDNSFull, err := metadata.Get("instance/hostname"); err != nil { internalDNSFull, err := metadata.Get("instance/hostname")
if err != nil {
klog.Warningf("couldn't get full internal DNS name: %v", err) klog.Warningf("couldn't get full internal DNS name: %v", err)
} else { } else {
addresses = append(addresses, nodeAddresses = append(nodeAddresses,
v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull}, v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull},
v1.NodeAddress{Type: v1.NodeHostName, 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 { if len(instance.NetworkInterfaces) < 1 {
return nil, fmt.Errorf("could not find network interfaces for instanceID %q", instance.Id) 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 _, nic := range instance.NetworkInterfaces {
for _, config := range networkInterface.AccessConfigs { 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}) nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: config.NatIP})
} }
}
return nodeAddresses, nil return nodeAddresses, nil
} }