@@ -42,7 +42,10 @@ import (
42
42
)
43
43
44
44
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"
46
49
)
47
50
48
51
func newInstancesMetricContext (request , zone string ) * metricContext {
@@ -93,28 +96,60 @@ func (g *Cloud) NodeAddresses(ctx context.Context, nodeName types.NodeName) ([]v
93
96
// Use metadata server if possible
94
97
if g .isCurrentInstance (instanceName ) {
95
98
96
- internalIP , err := metadata .Get ("instance/network-interfaces/0/ip " )
99
+ nics , err := metadata .Get ("instance/network-interfaces/" )
97
100
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 )
99
102
}
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
+ }
107
141
}
108
142
109
- if internalDNSFull , err := metadata .Get ("instance/hostname" ); err != nil {
143
+ internalDNSFull , err := metadata .Get ("instance/hostname" )
144
+ if err != nil {
110
145
klog .Warningf ("couldn't get full internal DNS name: %v" , err )
111
146
} else {
112
- addresses = append (addresses ,
147
+ nodeAddresses = append (nodeAddresses ,
113
148
v1.NodeAddress {Type : v1 .NodeInternalDNS , Address : internalDNSFull },
114
149
v1.NodeAddress {Type : v1 .NodeHostName , Address : internalDNSFull },
115
150
)
116
151
}
117
- return addresses , nil
152
+ return nodeAddresses , nil
118
153
}
119
154
}
120
155
@@ -209,12 +244,15 @@ func nodeAddressesFromInstance(instance *compute.Instance) ([]v1.NodeAddress, er
209
244
if len (instance .NetworkInterfaces ) < 1 {
210
245
return nil , fmt .Errorf ("could not find network interfaces for instanceID %q" , instance .Id )
211
246
}
212
- networkInterface := instance . NetworkInterfaces [ 0 ]
247
+ nodeAddresses := []v1. NodeAddress {}
213
248
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
+ }
217
254
}
255
+
218
256
return nodeAddresses , nil
219
257
}
220
258
0 commit comments