Skip to content

Commit 0bb20f7

Browse files
committed
refactor subnet resolver and add discovery by subnet's reachability(public/private)
1 parent 858b93b commit 0bb20f7

File tree

8 files changed

+437
-260
lines changed

8 files changed

+437
-260
lines changed

main.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ limitations under the License.
1717
package main
1818

1919
import (
20-
"k8s.io/client-go/util/workqueue"
2120
"os"
2221

22+
"k8s.io/client-go/util/workqueue"
23+
2324
elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
2425

2526
"github.com/go-logr/logr"
@@ -119,7 +120,11 @@ func main() {
119120
sgReconciler := networking.NewDefaultSecurityGroupReconciler(sgManager, ctrl.Log)
120121
azInfoProvider := networking.NewDefaultAZInfoProvider(cloud.EC2(), ctrl.Log.WithName("az-info-provider"))
121122
vpcInfoProvider := networking.NewDefaultVPCInfoProvider(cloud.EC2(), ctrl.Log.WithName("vpc-info-provider"))
122-
subnetResolver := networking.NewDefaultSubnetsResolver(azInfoProvider, cloud.EC2(), cloud.VpcID(), controllerCFG.ClusterName, ctrl.Log.WithName("subnets-resolver"))
123+
subnetResolver := networking.NewDefaultSubnetsResolver(azInfoProvider, cloud.EC2(), cloud.VpcID(), controllerCFG.ClusterName,
124+
controllerCFG.FeatureGates.Enabled(config.SubnetsClusterTagCheck),
125+
controllerCFG.FeatureGates.Enabled(config.ALBSingleSubnet),
126+
controllerCFG.FeatureGates.Enabled(config.SubnetDiscoveryByReachability),
127+
ctrl.Log.WithName("subnets-resolver"))
123128
multiClusterManager := targetgroupbinding.NewMultiClusterManager(mgr.GetClient(), mgr.GetAPIReader(), ctrl.Log)
124129
tgbResManager := targetgroupbinding.NewDefaultResourceManager(mgr.GetClient(), cloud.ELBV2(), cloud.EC2(),
125130
podInfoRepo, sgManager, sgReconciler, vpcInfoProvider, multiClusterManager, lbcMetricsCollector,

pkg/aws/services/ec2.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package services
22

33
import (
44
"context"
5+
56
"github.com/aws/aws-sdk-go-v2/service/ec2"
67
"github.com/aws/aws-sdk-go-v2/service/ec2/types"
78
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/provider"
@@ -24,6 +25,9 @@ type EC2 interface {
2425
// DescribeVPCsAsList wraps the DescribeVpcsPagesWithContext API, which aggregates paged results into list.
2526
DescribeVPCsAsList(ctx context.Context, input *ec2.DescribeVpcsInput) ([]types.Vpc, error)
2627

28+
// DescribeRouteTablesAsList wraps the DescribeRouteTablesWithContext API, which aggregates paged results into list.
29+
DescribeRouteTablesAsList(ctx context.Context, input *ec2.DescribeRouteTablesInput) ([]types.RouteTable, error)
30+
2731
CreateTagsWithContext(ctx context.Context, input *ec2.CreateTagsInput) (*ec2.CreateTagsOutput, error)
2832
DeleteTagsWithContext(ctx context.Context, input *ec2.DeleteTagsInput) (*ec2.DeleteTagsOutput, error)
2933
CreateSecurityGroupWithContext(ctx context.Context, input *ec2.CreateSecurityGroupInput) (*ec2.CreateSecurityGroupOutput, error)
@@ -141,6 +145,23 @@ func (c *ec2Client) DescribeVPCsAsList(ctx context.Context, input *ec2.DescribeV
141145
return result, nil
142146
}
143147

148+
func (c *ec2Client) DescribeRouteTablesAsList(ctx context.Context, input *ec2.DescribeRouteTablesInput) ([]types.RouteTable, error) {
149+
var result []types.RouteTable
150+
client, err := c.awsClientsProvider.GetEC2Client(ctx, "DescribeRouteTables")
151+
if err != nil {
152+
return nil, err
153+
}
154+
paginator := ec2.NewDescribeRouteTablesPaginator(client, input)
155+
for paginator.HasMorePages() {
156+
output, err := paginator.NextPage(ctx)
157+
if err != nil {
158+
return nil, err
159+
}
160+
result = append(result, output.RouteTables...)
161+
}
162+
return result, nil
163+
}
164+
144165
func (c *ec2Client) CreateTagsWithContext(ctx context.Context, input *ec2.CreateTagsInput) (*ec2.CreateTagsOutput, error) {
145166
client, err := c.awsClientsProvider.GetEC2Client(ctx, "CreateTags")
146167
if err != nil {

pkg/aws/services/ec2_mocks.go

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/config/feature_gates.go

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@ import (
1111
type Feature string
1212

1313
const (
14-
ListenerRulesTagging Feature = "ListenerRulesTagging"
15-
WeightedTargetGroups Feature = "WeightedTargetGroups"
16-
ServiceTypeLoadBalancerOnly Feature = "ServiceTypeLoadBalancerOnly"
17-
EndpointsFailOpen Feature = "EndpointsFailOpen"
18-
EnableServiceController Feature = "EnableServiceController"
19-
EnableIPTargetType Feature = "EnableIPTargetType"
20-
EnableRGTAPI Feature = "EnableRGTAPI"
21-
SubnetsClusterTagCheck Feature = "SubnetsClusterTagCheck"
22-
NLBHealthCheckAdvancedConfig Feature = "NLBHealthCheckAdvancedConfig"
23-
NLBSecurityGroup Feature = "NLBSecurityGroup"
24-
ALBSingleSubnet Feature = "ALBSingleSubnet"
25-
LBCapacityReservation Feature = "LBCapacityReservation"
14+
ListenerRulesTagging Feature = "ListenerRulesTagging"
15+
WeightedTargetGroups Feature = "WeightedTargetGroups"
16+
ServiceTypeLoadBalancerOnly Feature = "ServiceTypeLoadBalancerOnly"
17+
EndpointsFailOpen Feature = "EndpointsFailOpen"
18+
EnableServiceController Feature = "EnableServiceController"
19+
EnableIPTargetType Feature = "EnableIPTargetType"
20+
EnableRGTAPI Feature = "EnableRGTAPI"
21+
SubnetsClusterTagCheck Feature = "SubnetsClusterTagCheck"
22+
NLBHealthCheckAdvancedConfig Feature = "NLBHealthCheckAdvancedConfig"
23+
NLBSecurityGroup Feature = "NLBSecurityGroup"
24+
ALBSingleSubnet Feature = "ALBSingleSubnet"
25+
SubnetDiscoveryByReachability Feature = "SubnetDiscoveryByReachability"
26+
LBCapacityReservation Feature = "LBCapacityReservation"
2627
)
2728

2829
type FeatureGates interface {
@@ -50,18 +51,19 @@ type defaultFeatureGates struct {
5051
func NewFeatureGates() FeatureGates {
5152
return &defaultFeatureGates{
5253
featureState: map[Feature]bool{
53-
ListenerRulesTagging: true,
54-
WeightedTargetGroups: true,
55-
ServiceTypeLoadBalancerOnly: false,
56-
EndpointsFailOpen: true,
57-
EnableServiceController: true,
58-
EnableIPTargetType: true,
59-
EnableRGTAPI: false,
60-
SubnetsClusterTagCheck: true,
61-
NLBHealthCheckAdvancedConfig: true,
62-
NLBSecurityGroup: true,
63-
ALBSingleSubnet: false,
64-
LBCapacityReservation: true,
54+
ListenerRulesTagging: true,
55+
WeightedTargetGroups: true,
56+
ServiceTypeLoadBalancerOnly: false,
57+
EndpointsFailOpen: true,
58+
EnableServiceController: true,
59+
EnableIPTargetType: true,
60+
EnableRGTAPI: false,
61+
SubnetsClusterTagCheck: true,
62+
NLBHealthCheckAdvancedConfig: true,
63+
NLBSecurityGroup: true,
64+
ALBSingleSubnet: false,
65+
SubnetDiscoveryByReachability: true,
66+
LBCapacityReservation: true,
6567
},
6668
}
6769
}

pkg/ingress/model_build_load_balancer.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ import (
55
"crypto/sha256"
66
"encoding/hex"
77
"fmt"
8+
"regexp"
9+
810
awssdk "github.com/aws/aws-sdk-go-v2/aws"
911
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
1012
"github.com/google/go-cmp/cmp"
1113
"github.com/pkg/errors"
1214
"k8s.io/apimachinery/pkg/util/sets"
13-
"regexp"
1415
"sigs.k8s.io/aws-load-balancer-controller/apis/elbv2/v1beta1"
1516
"sigs.k8s.io/aws-load-balancer-controller/pkg/algorithm"
1617
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
17-
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
1818
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
1919
"sigs.k8s.io/aws-load-balancer-controller/pkg/equality"
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
@@ -24,8 +24,7 @@ import (
2424
)
2525

2626
const (
27-
resourceIDLoadBalancer = "LoadBalancer"
28-
minimalAvailableIPAddressCount = int32(8)
27+
resourceIDLoadBalancer = "LoadBalancer"
2928
)
3029

3130
func (t *defaultModelBuildTask) buildLoadBalancer(ctx context.Context, listenPortConfigByPort map[int32]listenPortConfig) (*elbv2model.LoadBalancer, error) {
@@ -226,8 +225,6 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
226225
chosenSubnets, err := t.subnetsResolver.ResolveViaSelector(ctx, chosenSubnetSelector,
227226
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
228227
networking.WithSubnetsResolveLBScheme(scheme),
229-
networking.WithSubnetsClusterTagCheck(t.featureGates.Enabled(config.SubnetsClusterTagCheck)),
230-
networking.WithALBSingleSubnet(t.featureGates.Enabled(config.ALBSingleSubnet)),
231228
)
232229
if err != nil {
233230
return nil, err
@@ -246,7 +243,6 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
246243
chosenSubnets, err := t.subnetsResolver.ResolveViaNameOrIDSlice(ctx, chosenSubnetNameOrIDs,
247244
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
248245
networking.WithSubnetsResolveLBScheme(scheme),
249-
networking.WithALBSingleSubnet(t.featureGates.Enabled(config.ALBSingleSubnet)),
250246
)
251247
if err != nil {
252248
return nil, err
@@ -264,8 +260,6 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
264260
chosenSubnets, err := t.subnetsResolver.ResolveViaDiscovery(ctx,
265261
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
266262
networking.WithSubnetsResolveLBScheme(scheme),
267-
networking.WithSubnetsResolveAvailableIPAddressCount(minimalAvailableIPAddressCount),
268-
networking.WithSubnetsClusterTagCheck(t.featureGates.Enabled(config.SubnetsClusterTagCheck)),
269263
)
270264
if err != nil {
271265
return nil, errors.Wrap(err, "couldn't auto-discover subnets")

pkg/ingress/model_build_load_balancer_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
87
"strings"
98
"testing"
109

10+
ec2types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
11+
1112
awssdk "github.com/aws/aws-sdk-go-v2/aws"
1213
"github.com/aws/aws-sdk-go-v2/service/ec2"
1314
"github.com/go-logr/logr"
@@ -1271,6 +1272,9 @@ func Test_defaultModelBuildTask_buildLoadBalancerSubnets(t *testing.T) {
12711272
mockEC2,
12721273
"vpc-1",
12731274
"test-cluster",
1275+
true,
1276+
true,
1277+
true,
12741278
logr.New(&log.NullLogSink{}),
12751279
)
12761280

0 commit comments

Comments
 (0)