Skip to content

Commit 4658721

Browse files
authored
Merge pull request #227 from chengxiangdong/feat_class
feat: add class support
2 parents 98ae47d + 0980b6c commit 4658721

File tree

16 files changed

+1832
-72
lines changed

16 files changed

+1832
-72
lines changed

docs/huawei-cloud-controller-manager-configuration.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ data:
8383
"type": "SOURCE_IP",
8484
"persistence_timeout": 15
8585
},
86+
"disable-create-security-group": false,
8687
"health-check-flag": "on",
8788
"health-check-option": {
8889
"delay": 5,
@@ -219,3 +220,6 @@ The following arguments are supported:
219220

220221
* `l7-flavor-id` Optional. Specifies the ID of a flavor at Layer 7.
221222
Only dedicated load balancer service will use this annotation.
223+
224+
* `disable-create-security-group` Optional. Disable automatic creation of security groups for ELB health checks.
225+
Valid values are `'true'` and `'false'`. The default is `'false'`.

docs/usage-guide.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,5 +413,4 @@ $ curl 192.168.0.113
413413
<html>
414414
<head>
415415
<title>Welcome to nginx!</title>
416-
...
417416
```

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/mitchellh/mapstructure v1.4.1
99
github.com/onsi/ginkgo/v2 v2.6.1
1010
github.com/onsi/gomega v1.24.1
11+
github.com/patrickmn/go-cache v2.1.0+incompatible
1112
github.com/spf13/pflag v1.0.5
1213
google.golang.org/grpc v1.49.0
1314
gopkg.in/gcfg.v1 v1.2.3

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ github.com/onsi/ginkgo/v2 v2.6.1 h1:1xQPCjcqYw/J5LchOcp4/2q/jzJFjiAOc25chhnDw+Q=
276276
github.com/onsi/ginkgo/v2 v2.6.1/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo=
277277
github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E=
278278
github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM=
279+
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
280+
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
279281
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
280282
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
281283
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=

pkg/cloudprovider/huaweicloud/dedicatedloadbalancer.go

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23+
cloudprovider "k8s.io/cloud-provider"
2324
"strings"
2425

2526
elbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
@@ -107,8 +108,11 @@ func (d *DedicatedLoadBalancer) GetLoadBalancerName(_ context.Context, clusterNa
107108
}
108109

109110
func (d *DedicatedLoadBalancer) EnsureLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
110-
klog.Infof("EnsureLoadBalancer: called with service %s/%s, node: %d",
111-
service.Namespace, service.Name, len(nodes))
111+
if !d.isSupportedSvc(service) {
112+
return nil, cloudprovider.ImplementedElsewhere
113+
}
114+
115+
klog.Infof("EnsureLoadBalancer: called with service %s/%s, node: %d", service.Namespace, service.Name, len(nodes))
112116

113117
if err := ensureLoadBalancerValidation(service, nodes); err != nil {
114118
return nil, err
@@ -491,7 +495,7 @@ func (d *DedicatedLoadBalancer) deletePool(pool *elbmodel.Pool) []error {
491495
}
492496

493497
func (d *DedicatedLoadBalancer) addOrRemoveMembers(loadbalancer *elbmodel.LoadBalancer, service *v1.Service,
494-
pool *elbmodel.Pool, port v1.ServicePort, nodes []*v1.Node) error {
498+
pool *elbmodel.Pool, svcPort v1.ServicePort, nodes []*v1.Node) error {
495499

496500
members, err := d.dedicatedELBClient.ListMembers(&elbmodel.ListMembersRequest{PoolId: pool.Id})
497501
if err != nil {
@@ -530,7 +534,7 @@ func (d *DedicatedLoadBalancer) addOrRemoveMembers(loadbalancer *elbmodel.LoadBa
530534
pod.Namespace, pod.Spec.NodeName)
531535
}
532536

533-
address, err := getNodeAddress(node)
537+
address, portNum, err := getMemberIP(service, node, pod, svcPort)
534538
if err != nil {
535539
if common.IsNotFound(err) {
536540
// Node failure, do not create member
@@ -541,18 +545,18 @@ func (d *DedicatedLoadBalancer) addOrRemoveMembers(loadbalancer *elbmodel.LoadBa
541545
}
542546
}
543547

544-
key := fmt.Sprintf("%s:%d", address, port.NodePort)
548+
key := fmt.Sprintf("%s:%d", address, svcPort.NodePort)
545549
if existsMember[key] {
546550
klog.Infof("[addOrRemoveMembers] node already exists, skip adding, name: %s, address: %s, port: %d",
547-
node.Name, address, port.NodePort)
548-
members = d.popMember(members, address, port.NodePort)
551+
node.Name, address, portNum)
552+
members = d.popMember(members, address, portNum)
549553
continue
550554
}
551555

552556
klog.Infof("[addOrRemoveMembers] add node to pool, name: %s, address: %s, port: %d",
553-
node.Name, address, port.NodePort)
557+
node.Name, address, portNum)
554558
// Add a member to the pool.
555-
if err = d.addMember(loadbalancer, pool, port, node); err != nil {
559+
if err = d.addMember(service, loadbalancer, pool, pod, svcPort, node); err != nil {
556560
return err
557561
}
558562
existsMember[key] = true
@@ -571,22 +575,25 @@ func (d *DedicatedLoadBalancer) addOrRemoveMembers(loadbalancer *elbmodel.LoadBa
571575
return nil
572576
}
573577

574-
func (d *DedicatedLoadBalancer) addMember(loadbalancer *elbmodel.LoadBalancer, pool *elbmodel.Pool, port v1.ServicePort,
575-
node *v1.Node) error {
578+
func (d *DedicatedLoadBalancer) addMember(service *v1.Service, loadbalancer *elbmodel.LoadBalancer, pool *elbmodel.Pool, pod v1.Pod, svcPort v1.ServicePort, node *v1.Node) error {
576579
klog.Infof("Add a member(%s) to pool %s", node.Name, pool.Id)
577-
address, err := getNodeAddress(node)
580+
address, port, err := getMemberIP(service, node, pod, svcPort)
578581
if err != nil {
579582
return err
580583
}
581584

582585
name := utils.CutString(fmt.Sprintf("member_%s_%s", pool.Name, node.Name), defaultMaxNameLength)
583586
opt := &elbmodel.CreateMemberOption{
584587
Name: &name,
585-
ProtocolPort: port.NodePort,
588+
ProtocolPort: port,
586589
Address: address,
587590
}
588591
if !loadbalancer.IpTargetEnable {
589-
opt.SubnetCidrId = &loadbalancer.VipSubnetCidrId
592+
subnetID, err := d.getSubnetID(service, node)
593+
if err != nil {
594+
return err
595+
}
596+
opt.SubnetCidrId = &subnetID
590597
}
591598

592599
if _, err = d.dedicatedELBClient.AddMember(pool.Id, opt); err != nil {
@@ -744,6 +751,10 @@ func (d *DedicatedLoadBalancer) createHealthMonitor(loadbalancerID, poolID, prot
744751

745752
func (d *DedicatedLoadBalancer) UpdateLoadBalancer(ctx context.Context, clusterName string, service *v1.Service, nodes []*v1.Node) error {
746753
klog.Infof("UpdateLoadBalancer: called with service %s/%s, node: %d", service.Namespace, service.Name, len(nodes))
754+
if !d.isSupportedSvc(service) {
755+
return cloudprovider.ImplementedElsewhere
756+
}
757+
747758
// get exits or create a new ELB instance
748759
loadbalancer, err := d.getLoadBalancerInstance(ctx, clusterName, service)
749760
if err != nil {
@@ -875,7 +886,7 @@ func (d *DedicatedLoadBalancer) deleteELBInstance(loadBalancer *elbmodel.LoadBal
875886

876887
klog.Infof("deleting unbind EIP: %v", eipID)
877888
if err := d.eipClient.Delete(eipID); err != nil {
878-
klog.Errorf("failed to delete EIP: %s", loadBalancer.Eips[0].EipAddress)
889+
klog.Errorf("failed to delete EIP: %s", eipID)
879890
}
880891

881892
return nil

0 commit comments

Comments
 (0)