@@ -83,29 +83,53 @@ func (g *Cloud) ToInstanceReferences(zone string, instanceNames []string) (refs
83
83
}
84
84
85
85
// 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
+ }
90
119
}
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 )
92
123
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 )
98
125
}
99
126
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 )
107
130
}
108
- return addresses , nil
131
+
132
+ return nodeAddressesFromInstance (instance )
109
133
}
110
134
111
135
// NodeAddressesByProviderID will not be called from the node that is requesting this ID.
0 commit comments