Skip to content

Commit 440b5c2

Browse files
authored
Merge pull request kubernetes#90738 from kaivalya97/patch-1
Change gce Instances::NodeAddresses function to work if it runs outside kubelet
2 parents 8f5e851 + dd1f029 commit 440b5c2

File tree

1 file changed

+42
-18
lines changed

1 file changed

+42
-18
lines changed

staging/src/k8s.io/legacy-cloud-providers/gce/gce_instances.go

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -83,29 +83,53 @@ func (g *Cloud) ToInstanceReferences(zone string, instanceNames []string) (refs
8383
}
8484

8585
// NodeAddresses is an implementation of Instances.NodeAddresses.
86-
func (g *Cloud) NodeAddresses(_ context.Context, _ types.NodeName) ([]v1.NodeAddress, error) {
87-
internalIP, err := metadata.Get("instance/network-interfaces/0/ip")
88-
if err != nil {
89-
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
86+
func (g *Cloud) NodeAddresses(ctx context.Context, nodeName types.NodeName) ([]v1.NodeAddress, error) {
87+
timeoutCtx, cancel := context.WithTimeout(ctx, 1*time.Hour)
88+
defer cancel()
89+
90+
instanceName := string(nodeName)
91+
92+
if g.useMetadataServer {
93+
// Use metadata server if possible
94+
if g.isCurrentInstance(instanceName) {
95+
96+
internalIP, err := metadata.Get("instance/network-interfaces/0/ip")
97+
if err != nil {
98+
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
99+
}
100+
externalIP, err := metadata.Get("instance/network-interfaces/0/access-configs/0/external-ip")
101+
if err != nil {
102+
return nil, fmt.Errorf("couldn't get external IP: %v", err)
103+
}
104+
addresses := []v1.NodeAddress{
105+
{Type: v1.NodeInternalIP, Address: internalIP},
106+
{Type: v1.NodeExternalIP, Address: externalIP},
107+
}
108+
109+
if internalDNSFull, err := metadata.Get("instance/hostname"); err != nil {
110+
klog.Warningf("couldn't get full internal DNS name: %v", err)
111+
} else {
112+
addresses = append(addresses,
113+
v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull},
114+
v1.NodeAddress{Type: v1.NodeHostName, Address: internalDNSFull},
115+
)
116+
}
117+
return addresses, nil
118+
}
90119
}
91-
externalIP, err := metadata.Get("instance/network-interfaces/0/access-configs/0/external-ip")
120+
121+
// Use GCE API
122+
instanceObj, err := g.getInstanceByName(instanceName)
92123
if err != nil {
93-
return nil, fmt.Errorf("couldn't get external IP: %v", err)
94-
}
95-
addresses := []v1.NodeAddress{
96-
{Type: v1.NodeInternalIP, Address: internalIP},
97-
{Type: v1.NodeExternalIP, Address: externalIP},
124+
return nil, fmt.Errorf("couldn't get instance details: %v", err)
98125
}
99126

100-
if internalDNSFull, err := metadata.Get("instance/hostname"); err != nil {
101-
klog.Warningf("couldn't get full internal DNS name: %v", err)
102-
} else {
103-
addresses = append(addresses,
104-
v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull},
105-
v1.NodeAddress{Type: v1.NodeHostName, Address: internalDNSFull},
106-
)
127+
instance, err := g.c.Instances().Get(timeoutCtx, meta.ZonalKey(canonicalizeInstanceName(instanceObj.Name), instanceObj.Zone))
128+
if err != nil {
129+
return []v1.NodeAddress{}, fmt.Errorf("error while querying for instance: %v", err)
107130
}
108-
return addresses, nil
131+
132+
return nodeAddressesFromInstance(instance)
109133
}
110134

111135
// NodeAddressesByProviderID will not be called from the node that is requesting this ID.

0 commit comments

Comments
 (0)