@@ -279,19 +279,29 @@ func (i *instances) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloud
279279 return nil , err
280280 }
281281
282- addresses := []v1.NodeAddress {{Type : v1 .NodeHostName , Address : linode .Label }}
283-
282+ uniqueAddrs := make (map [string ]v1.NodeAddressType , len (node .Status .Addresses )+ len (ips ))
284283 for _ , ip := range ips {
285- addresses = append (addresses , v1.NodeAddress {Type : ip .ipType , Address : ip .ip })
284+ if _ , ok := uniqueAddrs [ip .ip ]; ok {
285+ continue
286+ }
287+ uniqueAddrs [ip .ip ] = ip .ipType
286288 }
287289
288290 // include IPs set by kubelet for internal node IP
289291 for _ , addr := range node .Status .Addresses {
292+ if _ , ok := uniqueAddrs [addr .Address ]; ok {
293+ continue
294+ }
290295 if addr .Type == v1 .NodeInternalIP {
291- addresses = append ( addresses , v1.NodeAddress { Type : v1 . NodeInternalIP , Address : addr . Address })
296+ uniqueAddrs [ addr . Address ] = v1 .NodeInternalIP
292297 }
293298 }
294299
300+ addresses := []v1.NodeAddress {{Type : v1 .NodeHostName , Address : linode .Label }}
301+ for k , v := range uniqueAddrs {
302+ addresses = append (addresses , v1.NodeAddress {Type : v , Address : k })
303+ }
304+
295305 klog .Infof ("Instance %s, assembled IP addresses: %v" , node .Name , addresses )
296306 // note that Zone is omitted as it's not a thing in Linode
297307 meta := & cloudprovider.InstanceMetadata {
0 commit comments