Skip to content

Commit 7942dca

Browse files
authored
Merge pull request kubernetes#91162 from kaivalya97/patch-2
gce-Instances NodeAddresses: Add check for multiple interface IPs
2 parents aadaa5d + 9fc2290 commit 7942dca

File tree

1 file changed

+55
-17
lines changed

1 file changed

+55
-17
lines changed

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

Lines changed: 55 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ import (
4242
)
4343

4444
const (
45-
defaultZone = ""
45+
defaultZone = ""
46+
networkInterfaceIP = "instance/network-interfaces/%s/ip"
47+
networkInterfaceAccessConfigs = "instance/network-interfaces/%s/access-configs"
48+
networkInterfaceExternalIP = "instance/network-interfaces/%s/access-configs/%s/external-ip"
4649
)
4750

4851
func newInstancesMetricContext(request, zone string) *metricContext {
@@ -93,28 +96,60 @@ func (g *Cloud) NodeAddresses(ctx context.Context, nodeName types.NodeName) ([]v
9396
// Use metadata server if possible
9497
if g.isCurrentInstance(instanceName) {
9598

96-
internalIP, err := metadata.Get("instance/network-interfaces/0/ip")
99+
nics, err := metadata.Get("instance/network-interfaces/")
97100
if err != nil {
98-
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
101+
return nil, fmt.Errorf("couldn't get network interfaces: %v", err)
99102
}
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},
103+
104+
nicsArr := strings.Split(nics, "/\n")
105+
nodeAddresses := []v1.NodeAddress{}
106+
107+
for _, nic := range nicsArr {
108+
109+
if nic == "" {
110+
continue
111+
}
112+
113+
internalIP, err := metadata.Get(fmt.Sprintf(networkInterfaceIP, nic))
114+
if err != nil {
115+
return nil, fmt.Errorf("couldn't get internal IP: %v", err)
116+
}
117+
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: internalIP})
118+
119+
acs, err := metadata.Get(fmt.Sprintf(networkInterfaceAccessConfigs, nic))
120+
if err != nil {
121+
return nil, fmt.Errorf("couldn't get access configs: %v", err)
122+
}
123+
124+
acsArr := strings.Split(acs, "/\n")
125+
126+
for _, ac := range acsArr {
127+
128+
if ac == "" {
129+
continue
130+
}
131+
132+
externalIP, err := metadata.Get(fmt.Sprintf(networkInterfaceExternalIP, nic, ac))
133+
if err != nil {
134+
return nil, fmt.Errorf("couldn't get external IP: %v", err)
135+
}
136+
137+
if externalIP != "" {
138+
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: externalIP})
139+
}
140+
}
107141
}
108142

109-
if internalDNSFull, err := metadata.Get("instance/hostname"); err != nil {
143+
internalDNSFull, err := metadata.Get("instance/hostname")
144+
if err != nil {
110145
klog.Warningf("couldn't get full internal DNS name: %v", err)
111146
} else {
112-
addresses = append(addresses,
147+
nodeAddresses = append(nodeAddresses,
113148
v1.NodeAddress{Type: v1.NodeInternalDNS, Address: internalDNSFull},
114149
v1.NodeAddress{Type: v1.NodeHostName, Address: internalDNSFull},
115150
)
116151
}
117-
return addresses, nil
152+
return nodeAddresses, nil
118153
}
119154
}
120155

@@ -209,12 +244,15 @@ func nodeAddressesFromInstance(instance *compute.Instance) ([]v1.NodeAddress, er
209244
if len(instance.NetworkInterfaces) < 1 {
210245
return nil, fmt.Errorf("could not find network interfaces for instanceID %q", instance.Id)
211246
}
212-
networkInterface := instance.NetworkInterfaces[0]
247+
nodeAddresses := []v1.NodeAddress{}
213248

214-
nodeAddresses := []v1.NodeAddress{{Type: v1.NodeInternalIP, Address: networkInterface.NetworkIP}}
215-
for _, config := range networkInterface.AccessConfigs {
216-
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: config.NatIP})
249+
for _, nic := range instance.NetworkInterfaces {
250+
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: nic.NetworkIP})
251+
for _, config := range nic.AccessConfigs {
252+
nodeAddresses = append(nodeAddresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: config.NatIP})
253+
}
217254
}
255+
218256
return nodeAddresses, nil
219257
}
220258

0 commit comments

Comments
 (0)