@@ -20,10 +20,8 @@ import (
2020 "context"
2121 "encoding/json"
2222 "fmt"
23- ecsmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model"
24- eipmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/eip/v2/model"
25- elbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v2/model"
26- elbmodelv3 "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
23+ "strconv"
24+
2725 "google.golang.org/grpc/codes"
2826 "google.golang.org/grpc/status"
2927 corev1 "k8s.io/api/core/v1"
@@ -33,7 +31,10 @@ import (
3331 cloudprovider "k8s.io/cloud-provider"
3432 "k8s.io/klog/v2"
3533 "k8s.io/utils/pointer"
36- "strconv"
34+
35+ eipmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/eip/v2/model"
36+ elbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v2/model"
37+ elbmodelv3 "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model"
3738
3839 "sigs.k8s.io/cloud-provider-huaweicloud/pkg/cloudprovider/huaweicloud/wrapper"
3940 "sigs.k8s.io/cloud-provider-huaweicloud/pkg/common"
@@ -155,9 +156,10 @@ func (l *SharedLoadBalancer) EnsureLoadBalancer(ctx context.Context, clusterName
155156 return nil , err
156157 }
157158 if err != nil && common .IsNotFound (err ) {
158- subnetID , e := l .getSubnetID (service , nodes [0 ])
159- if e != nil {
160- return nil , e
159+ subnetID := getStringFromSvsAnnotation (service , ElbSubnetID , l .cloudConfig .VpcOpts .SubnetID )
160+ if subnetID == "" {
161+ return nil , status .Errorf (codes .InvalidArgument , "missing subnet-id, " +
162+ "can not to read subnet-id from service or cloud-config" )
161163 }
162164 loadbalancer , err = l .createLoadbalancer (clusterName , subnetID , service )
163165 }
@@ -989,47 +991,6 @@ func unbindEIP(eipClient *wrapper.EIpClient, vipPortID, eipID string, keepEIP bo
989991 return nil
990992}
991993
992- func (l * SharedLoadBalancer ) getSubnetID (service * v1.Service , node * v1.Node ) (string , error ) {
993- subnetID := getStringFromSvsAnnotation (service , ElbSubnetID , l .cloudConfig .VpcOpts .SubnetID )
994- if subnetID != "" {
995- return subnetID , nil
996- }
997-
998- subnetID , err := l .getNodeSubnetID (node )
999- if err != nil {
1000- return "" , status .Errorf (codes .InvalidArgument , "missing subnet-id, " +
1001- "can not to read subnet-id from the node also, error: %s" , err )
1002- }
1003- return subnetID , nil
1004- }
1005-
1006- func (l * SharedLoadBalancer ) getNodeSubnetID (node * corev1.Node ) (string , error ) {
1007- ipAddress , err := getNodeAddress (node )
1008- if err != nil {
1009- return "" , err
1010- }
1011-
1012- instance , err := l .ecsClient .GetByNodeName (node .Name )
1013- if err != nil {
1014- return "" , err
1015- }
1016-
1017- interfaces , err := l .ecsClient .ListInterfaces (& ecsmodel.ListServerInterfacesRequest {ServerId : instance .Id })
1018- if err != nil {
1019- return "" , err
1020- }
1021-
1022- for _ , ia := range interfaces {
1023- for _ , fixedIP := range * ia .FixedIps {
1024- if * fixedIP .IpAddress == ipAddress {
1025- return * fixedIP .SubnetId , nil
1026- }
1027- }
1028- }
1029-
1030- return "" , fmt .Errorf ("failed to get node subnet ID" )
1031- }
1032-
1033994func getNodeAddress (node * corev1.Node ) (string , error ) {
1034995 addresses := node .Status .Addresses
1035996 if len (addresses ) == 0 {
0 commit comments