Skip to content

Commit d37c425

Browse files
Merge pull request #236 from linode/internal-ip
[fix] handle cases where the internal-ip is already set (e.g. kubelet)
2 parents 42e3341 + ff4c10f commit d37c425

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

cloud/linode/instances.go

+7
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,13 @@ func (i *instances) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloud
285285
addresses = append(addresses, v1.NodeAddress{Type: ip.ipType, Address: ip.ip})
286286
}
287287

288+
// include IPs set by kubelet for internal node IP
289+
for _, addr := range node.Status.Addresses {
290+
if addr.Type == v1.NodeInternalIP {
291+
addresses = append(addresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: addr.Address})
292+
}
293+
}
294+
288295
klog.Infof("Instance %s, assembled IP addresses: %v", node.Name, addresses)
289296
// note that Zone is omitted as it's not a thing in Linode
290297
meta := &cloudprovider.InstanceMetadata{

cloud/linode/instances_test.go

+35-7
Original file line numberDiff line numberDiff line change
@@ -143,19 +143,29 @@ func TestMetadataRetrieval(t *testing.T) {
143143
})
144144

145145
ipTests := []struct {
146-
name string
147-
inputIPv4s []string
148-
inputIPv6 string
149-
externalNetwork string
150-
outputAddresses []v1.NodeAddress
151-
expectedErr error
146+
name string
147+
inputIPv4s []string
148+
inputIPv6 string
149+
externalNetwork string
150+
existingAddresses []v1.NodeAddress
151+
outputAddresses []v1.NodeAddress
152+
expectedErr error
152153
}{
153-
{"no IPs", nil, "", "", nil, instanceNoIPAddressesError{192910}},
154+
{
155+
"no IPs",
156+
nil,
157+
"",
158+
"",
159+
nil,
160+
nil,
161+
instanceNoIPAddressesError{192910},
162+
},
154163
{
155164
"one public, one private",
156165
[]string{"32.74.121.25", "192.168.121.42"},
157166
"",
158167
"",
168+
nil,
159169
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}, {Type: v1.NodeInternalIP, Address: "192.168.121.42"}},
160170
nil,
161171
},
@@ -164,6 +174,7 @@ func TestMetadataRetrieval(t *testing.T) {
164174
[]string{"32.74.121.25"},
165175
"2600:3c06::f03c:94ff:fe1e:e072",
166176
"",
177+
nil,
167178
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}, {Type: v1.NodeExternalIP, Address: "2600:3c06::f03c:94ff:fe1e:e072"}},
168179
nil,
169180
},
@@ -172,6 +183,7 @@ func TestMetadataRetrieval(t *testing.T) {
172183
[]string{"32.74.121.25"},
173184
"",
174185
"",
186+
nil,
175187
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}},
176188
nil,
177189
},
@@ -180,6 +192,7 @@ func TestMetadataRetrieval(t *testing.T) {
180192
[]string{"192.168.121.42"},
181193
"",
182194
"",
195+
nil,
183196
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}},
184197
nil,
185198
},
@@ -188,6 +201,7 @@ func TestMetadataRetrieval(t *testing.T) {
188201
[]string{"32.74.121.25", "32.74.121.22"},
189202
"",
190203
"",
204+
nil,
191205
[]v1.NodeAddress{{Type: v1.NodeExternalIP, Address: "32.74.121.25"}, {Type: v1.NodeExternalIP, Address: "32.74.121.22"}},
192206
nil,
193207
},
@@ -196,6 +210,7 @@ func TestMetadataRetrieval(t *testing.T) {
196210
[]string{"192.168.121.42", "10.0.2.15"},
197211
"",
198212
"",
213+
nil,
199214
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}, {Type: v1.NodeInternalIP, Address: "10.0.2.15"}},
200215
nil,
201216
},
@@ -204,9 +219,19 @@ func TestMetadataRetrieval(t *testing.T) {
204219
[]string{"192.168.121.42", "10.0.2.15"},
205220
"",
206221
"10.0.2.0/16",
222+
nil,
207223
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}, {Type: v1.NodeExternalIP, Address: "10.0.2.15"}},
208224
nil,
209225
},
226+
{
227+
"one private addresses, one existing internal IP set on the node",
228+
[]string{"192.168.121.42"},
229+
"",
230+
"",
231+
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "10.0.0.1"}},
232+
[]v1.NodeAddress{{Type: v1.NodeInternalIP, Address: "192.168.121.42"}, {Type: v1.NodeInternalIP, Address: "10.0.0.1"}},
233+
nil,
234+
},
210235
}
211236

212237
for _, test := range ipTests {
@@ -221,6 +246,9 @@ func TestMetadataRetrieval(t *testing.T) {
221246
} else {
222247
_, Options.LinodeExternalNetwork, _ = net.ParseCIDR(test.externalNetwork)
223248
}
249+
if test.existingAddresses != nil {
250+
node.Status.Addresses = append(node.Status.Addresses, test.existingAddresses...)
251+
}
224252
ips := make([]*net.IP, 0, len(test.inputIPv4s))
225253
for _, ip := range test.inputIPv4s {
226254
parsed := net.ParseIP(ip)

0 commit comments

Comments
 (0)