Skip to content

Commit c78d2ca

Browse files
committed
Add new feature gate to remove subnets minimal count restirction
1 parent 631041d commit c78d2ca

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

pkg/config/feature_gates.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ const (
2121
SubnetsClusterTagCheck Feature = "SubnetsClusterTagCheck"
2222
NLBHealthCheckAdvancedConfig Feature = "NLBHealthCheckAdvancedConfig"
2323
NLBSecurityGroup Feature = "NLBSecurityGroup"
24+
ALBSingleSubnet Feature = "ALBSingleSubnet"
2425
)
2526

2627
type FeatureGates interface {
@@ -58,6 +59,7 @@ func NewFeatureGates() FeatureGates {
5859
SubnetsClusterTagCheck: true,
5960
NLBHealthCheckAdvancedConfig: true,
6061
NLBSecurityGroup: true,
62+
ALBSingleSubnet: false,
6163
},
6264
}
6365
}

pkg/ingress/model_build_load_balancer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
215215
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
216216
networking.WithSubnetsResolveLBScheme(scheme),
217217
networking.WithSubnetsClusterTagCheck(t.featureGates.Enabled(config.SubnetsClusterTagCheck)),
218+
networking.WithALBSingleSubnet(t.featureGates.Enabled(config.ALBSingleSubnet)),
218219
)
219220
if err != nil {
220221
return nil, err
@@ -233,6 +234,7 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
233234
chosenSubnets, err := t.subnetsResolver.ResolveViaNameOrIDSlice(ctx, chosenSubnetNameOrIDs,
234235
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
235236
networking.WithSubnetsResolveLBScheme(scheme),
237+
networking.WithALBSingleSubnet(t.featureGates.Enabled(config.ALBSingleSubnet)),
236238
)
237239
if err != nil {
238240
return nil, err

pkg/networking/subnet_resolver.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ type SubnetsResolveOptions struct {
4848
AvailableIPAddressCount int64
4949
// whether to check the cluster tag
5050
SubnetsClusterTagCheck bool
51+
// Disable subnet minimal count restriction
52+
ALBSingleSubnet bool
5153
}
5254

5355
// ApplyOptions applies slice of SubnetsResolveOption.
@@ -95,6 +97,13 @@ func WithSubnetsClusterTagCheck(SubnetsClusterTagCheck bool) SubnetsResolveOptio
9597
}
9698
}
9799

100+
// WithALBSingleSubnet generate an option that foncigure ALBSingleSubnet
101+
func WithALBSingleSubnet(ALBSingleSubnet bool) SubnetsResolveOption {
102+
return func(opts *SubnetsResolveOptions) {
103+
opts.ALBSingleSubnet = ALBSingleSubnet
104+
}
105+
}
106+
98107
// SubnetsResolver is responsible for resolve EC2 Subnets for Load Balancers.
99108
type SubnetsResolver interface {
100109
// ResolveViaDiscovery resolve subnets by auto discover matching subnets.
@@ -364,6 +373,9 @@ func (r *defaultSubnetsResolver) validateSubnetsMinimalCount(subnets []*ec2sdk.S
364373
// computeSubnetsMinimalCount returns the minimal count requirement for subnets.
365374
func (r *defaultSubnetsResolver) computeSubnetsMinimalCount(subnetLocale subnetLocaleType, resolveOpts SubnetsResolveOptions) int {
366375
minimalCount := 1
376+
if resolveOpts.ALBSingleSubnet {
377+
return minimalCount
378+
}
367379
if resolveOpts.LBType == elbv2model.LoadBalancerTypeApplication && subnetLocale == subnetLocaleTypeAvailabilityZone {
368380
minimalCount = 2
369381
}

0 commit comments

Comments
 (0)