Skip to content

Commit c4c4268

Browse files
authored
Merge pull request #233 from chengxiangdong/fix_node_addr
Fix the issues of querying node external IPs
2 parents 7ce6fcb + b9d0b8a commit c4c4268

File tree

13 files changed

+39
-1954
lines changed

13 files changed

+39
-1954
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ go 1.19
55
require (
66
github.com/fsnotify/fsnotify v1.6.0
77
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.16
8-
github.com/mitchellh/mapstructure v1.4.1
98
github.com/onsi/ginkgo/v2 v2.6.1
109
github.com/onsi/gomega v1.24.1
1110
github.com/patrickmn/go-cache v2.1.0+incompatible

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,6 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
255255
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
256256
github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM=
257257
github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
258-
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
259-
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
260258
github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI=
261259
github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
262260
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=

hack/deploy/huawei-cloud-controller-manager.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,11 @@ spec:
186186
- --cloud-provider=huaweicloud
187187
- --use-service-account-credentials=true
188188
- --bind-address=127.0.0.1
189+
- --node-status-update-frequency=5s
190+
- --node-monitor-period=5s
191+
- --leader-elect-lease-duration=30s
192+
- --leader-elect-renew-deadline=20s
193+
- --leader-elect-retry-period=2s
189194
volumeMounts:
190195
- mountPath: /etc/kubernetes
191196
name: k8s-certs

manifests/huawei-cloud-controller-manager.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ spec:
5151
- --cloud-config=/etc/config/cloud-config
5252
- --cloud-provider=huaweicloud
5353
- --use-service-account-credentials=true
54+
- --node-status-update-frequency=5s
55+
- --node-monitor-period=5s
56+
- --leader-elect-lease-duration=30s
57+
- --leader-elect-renew-deadline=20s
58+
- --leader-elect-retry-period=2s
5459
volumeMounts:
5560
- mountPath: /etc/kubernetes
5661
name: k8s-certs

pkg/cloudprovider/huaweicloud/instances.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func (i *Instances) NodeAddresses(ctx context.Context, name types.NodeName) ([]v
5353

5454
// NodeAddressesByProviderID returns the addresses of the specified instance.
5555
func (i *Instances) NodeAddressesByProviderID(_ context.Context, providerID string) ([]v1.NodeAddress, error) {
56-
klog.Infof("NodeAddressesByProviderID is called witd provider ID %s", providerID)
56+
klog.Infof("NodeAddressesByProviderID is called with provider ID %s", providerID)
5757
instanceID, err := parseInstanceID(providerID)
5858
if err != nil {
5959
return nil, err
@@ -224,6 +224,8 @@ func (i *Instances) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloud
224224
}
225225

226226
return &cloudprovider.InstanceMetadata{
227+
Region: i.cloudConfig.AuthOpts.Region,
228+
Zone: instance.OSEXTAZavailabilityZone,
227229
ProviderID: providerID,
228230
InstanceType: instanceFlavor,
229231
NodeAddresses: addresses,

pkg/cloudprovider/huaweicloud/wrapper/ecs.go

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/sdkerr"
2727
ecs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2"
2828
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model"
29-
"github.com/mitchellh/mapstructure"
3029
"google.golang.org/grpc/codes"
3130
"google.golang.org/grpc/status"
3231
v1 "k8s.io/api/core/v1"
@@ -128,14 +127,14 @@ func (e *EcsClient) ListInterfaces(req *model.ListServerInterfacesRequest) ([]mo
128127

129128
func (e *EcsClient) BuildAddresses(server *model.ServerDetail, interfaces []model.InterfaceAttachment,
130129
networkingOpts *config.NetworkingOptions) ([]v1.NodeAddress, error) {
131-
addrs := []v1.NodeAddress{}
130+
nodeAddresses := make([]v1.NodeAddress, 0)
132131

133132
// parse private IP addresses first in an ordered manner
134-
for _, iface := range interfaces {
135-
for _, fixedIP := range *iface.FixedIps {
136-
if *iface.PortState == "ACTIVE" {
133+
for _, inter := range interfaces {
134+
if *inter.PortState == "ACTIVE" {
135+
for _, fixedIP := range *inter.FixedIps {
137136
if net.ParseIP(*fixedIP.IpAddress).To4() != nil {
138-
addToNodeAddresses(&addrs,
137+
addToNodeAddresses(&nodeAddresses,
139138
v1.NodeAddress{
140139
Type: v1.NodeInternalIP,
141140
Address: *fixedIP.IpAddress,
@@ -148,75 +147,63 @@ func (e *EcsClient) BuildAddresses(server *model.ServerDetail, interfaces []mode
148147

149148
// process public IP addresses
150149
if server.AccessIPv4 != "" {
151-
addToNodeAddresses(&addrs,
150+
addToNodeAddresses(&nodeAddresses,
152151
v1.NodeAddress{
153152
Type: v1.NodeExternalIP,
154153
Address: server.AccessIPv4,
155154
},
156155
)
157156
}
158157

159-
// process the rest
160-
type Address struct {
161-
IPType string `mapstructure:"OS-EXT-IPS:type"`
162-
Addr string
158+
nicIDs := make([]string, 0)
159+
for nicID := range server.Addresses {
160+
nicIDs = append(nicIDs, nicID)
163161
}
162+
sort.Strings(nicIDs)
164163

165-
var addresses map[string][]Address
166-
err := mapstructure.Decode(server.Addresses, &addresses)
167-
if err != nil {
168-
return nil, err
169-
}
170-
171-
var networks []string
172-
for k := range addresses {
173-
networks = append(networks, k)
174-
}
175-
sort.Strings(networks)
176-
177-
for _, network := range networks {
178-
for _, props := range addresses[network] {
164+
for _, nicID := range nicIDs {
165+
for _, serverAddr := range server.Addresses[nicID] {
179166
var addressType v1.NodeAddressType
180-
if props.IPType == "floating" {
167+
if serverAddr.OSEXTIPStype != nil && serverAddr.OSEXTIPStype.Value() == "floating" {
181168
addressType = v1.NodeExternalIP
182-
} else if utils.IsStrSliceContains(networkingOpts.PublicNetworkName, network) {
169+
} else if utils.IsStrSliceContains(networkingOpts.PublicNetworkName, nicID) {
183170
addressType = v1.NodeExternalIP
184171
// removing already added address to avoid listing it as both ExternalIP and InternalIP
185172
// may happen due to listing "private" network as "public" in CCM's CloudConfig
186-
removeFromNodeAddresses(&addrs,
173+
removeFromNodeAddresses(&nodeAddresses,
187174
v1.NodeAddress{
188-
Address: props.Addr,
175+
Address: serverAddr.Addr,
189176
},
190177
)
191178
} else {
192179
if len(networkingOpts.InternalNetworkName) == 0 ||
193-
utils.IsStrSliceContains(networkingOpts.InternalNetworkName, network) {
180+
utils.IsStrSliceContains(networkingOpts.InternalNetworkName, nicID) {
194181
addressType = v1.NodeInternalIP
195182
} else {
196-
klog.V(4).Infof("[DEBUG] Node '%s' address '%s' "+
197-
"ignored due to 'internal-network-name' option", server.Name, props.Addr)
183+
klog.V(4).Infof("[DEBUG] Node '%s' address '%s' ignored due to 'internal-network-name' option",
184+
server.Name, serverAddr.Addr)
198185

199-
removeFromNodeAddresses(&addrs,
186+
removeFromNodeAddresses(&nodeAddresses,
200187
v1.NodeAddress{
201-
Address: props.Addr,
188+
Address: serverAddr.Addr,
202189
},
203190
)
204191
continue
205192
}
206193
}
207194

208-
if net.ParseIP(props.Addr).To4() != nil {
209-
addToNodeAddresses(&addrs,
195+
if net.ParseIP(serverAddr.Addr).To4() != nil {
196+
addToNodeAddresses(&nodeAddresses,
210197
v1.NodeAddress{
211198
Type: addressType,
212-
Address: props.Addr,
199+
Address: serverAddr.Addr,
213200
},
214201
)
215202
}
216203
}
217204
}
218-
219-
return addrs, nil
205+
klog.V(6).Infof("server: %s/%s, network addresses: %s", server.Name, server.Id, utils.ToString(nodeAddresses))
206+
return nodeAddresses, nil
220207
}
221208

222209
func (e *EcsClient) ListSecurityGroups(instanceID string) ([]model.NovaSecurityGroup, error) {

vendor/github.com/mitchellh/mapstructure/CHANGELOG.md

Lines changed: 0 additions & 73 deletions
This file was deleted.

vendor/github.com/mitchellh/mapstructure/LICENSE

Lines changed: 0 additions & 21 deletions
This file was deleted.

vendor/github.com/mitchellh/mapstructure/README.md

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)