diff --git a/pkg/cloudprovider/providers/azure/azure_instances.go b/pkg/cloudprovider/providers/azure/azure_instances.go index bc9685690d7..1f7daac0f25 100644 --- a/pkg/cloudprovider/providers/azure/azure_instances.go +++ b/pkg/cloudprovider/providers/azure/azure_instances.go @@ -31,9 +31,39 @@ import ( // NodeAddresses returns the addresses of the specified instance. func (az *Cloud) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.NodeAddress, error) { + addressGetter := func(nodeName types.NodeName) ([]v1.NodeAddress, error) { + ip, publicIP, err := az.GetIPForMachineWithRetry(nodeName) + if err != nil { + glog.V(2).Infof("NodeAddresses(%s) abort backoff", nodeName) + return nil, err + } + + addresses := []v1.NodeAddress{ + {Type: v1.NodeInternalIP, Address: ip}, + {Type: v1.NodeHostName, Address: string(name)}, + } + if len(publicIP) > 0 { + addresses = append(addresses, v1.NodeAddress{ + Type: v1.NodeExternalIP, + Address: publicIP, + }) + } + return addresses, nil + } + if az.UseInstanceMetadata { + isLocalInstance, err := az.isCurrentInstance(name) + if err != nil { + return nil, err + } + + // Not local instance, get addresses from Azure ARM API. + if !isLocalInstance { + return addressGetter(name) + } + ipAddress := IPAddress{} - err := az.metadata.Object("instance/network/interface/0/ipv4/ipAddress/0", &ipAddress) + err = az.metadata.Object("instance/network/interface/0/ipv4/ipAddress/0", &ipAddress) if err != nil { return nil, err } @@ -51,16 +81,7 @@ func (az *Cloud) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.N return addresses, nil } - ip, err := az.GetIPForMachineWithRetry(name) - if err != nil { - glog.V(2).Infof("NodeAddresses(%s) abort backoff", name) - return nil, err - } - - return []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: ip}, - {Type: v1.NodeHostName, Address: string(name)}, - }, nil + return addressGetter(name) } // NodeAddressesByProviderID returns the node addresses of an instances with the specified unique providerID