Skip to content

Commit 26ce165

Browse files
authored
add outpost support and remove resolveViaNameOrID into subnet resolver (#1627)
1 parent 70468de commit 26ce165

File tree

9 files changed

+1838
-933
lines changed

9 files changed

+1838
-933
lines changed

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func main() {
101101
nodeENIResolver := networking.NewDefaultNodeENIInfoResolver(cloud.EC2(), ctrl.Log)
102102
sgManager := networking.NewDefaultSecurityGroupManager(cloud.EC2(), ctrl.Log)
103103
sgReconciler := networking.NewDefaultSecurityGroupReconciler(sgManager, ctrl.Log)
104-
subnetResolver := networking.NewSubnetsResolver(cloud.EC2(), cloud.VpcID(), controllerCFG.ClusterName, ctrl.Log.WithName("subnets-resolver"))
104+
subnetResolver := networking.NewDefaultSubnetsResolver(cloud.EC2(), cloud.VpcID(), controllerCFG.ClusterName, ctrl.Log.WithName("subnets-resolver"))
105105
tgbResManager := targetgroupbinding.NewDefaultResourceManager(mgr.GetClient(), cloud.ELBV2(),
106106
podInfoRepo, podENIResolver, nodeENIResolver, sgManager, sgReconciler, cloud.VpcID(), controllerCFG.ClusterName, ctrl.Log)
107107

mocks/networking/mock_subnet_resolver.go

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

pkg/ingress/model_build_load_balancer.go

Lines changed: 17 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"sigs.k8s.io/aws-load-balancer-controller/pkg/equality"
1616
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
1717
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
18+
"sigs.k8s.io/aws-load-balancer-controller/pkg/networking"
1819
"strings"
1920
)
2021

@@ -151,19 +152,16 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
151152
}
152153
explicitSubnetNameOrIDsList = append(explicitSubnetNameOrIDsList, rawSubnetNameOrIDs)
153154
}
155+
154156
if len(explicitSubnetNameOrIDsList) == 0 {
155-
chosenSubnets, err := t.subnetsResolver.DiscoverSubnets(ctx, scheme)
157+
chosenSubnets, err := t.subnetsResolver.ResolveViaDiscovery(ctx,
158+
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
159+
networking.WithSubnetsResolveLBScheme(scheme),
160+
)
156161
if err != nil {
157-
return nil, err
158-
}
159-
var chosenSubnetIDs []string
160-
for _, subnet := range chosenSubnets {
161-
chosenSubnetIDs = append(chosenSubnetIDs, awssdk.StringValue(subnet.SubnetId))
162-
}
163-
if len(chosenSubnetIDs) < 2 {
164-
return nil, errors.Errorf("cannot find at least two subnets from different Availability Zones, discovered subnetIDs: %v", chosenSubnetIDs)
162+
return nil, errors.Wrap(err, "couldn't auto-discover subnets")
165163
}
166-
return buildLoadBalancerSubnetMappingsWithSubnetIDs(chosenSubnetIDs), nil
164+
return buildLoadBalancerSubnetMappingsWithSubnets(chosenSubnets), nil
167165
}
168166

169167
chosenSubnetNameOrIDs := explicitSubnetNameOrIDsList[0]
@@ -173,11 +171,14 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
173171
return nil, errors.Errorf("conflicting subnets: %v | %v", chosenSubnetNameOrIDs, subnetNameOrIDs)
174172
}
175173
}
176-
chosenSubnetIDs, err := t.resolveSubnetIDsViaNameOrIDSlice(ctx, chosenSubnetNameOrIDs)
174+
chosenSubnets, err := t.subnetsResolver.ResolveViaNameOrIDSlice(ctx, chosenSubnetNameOrIDs,
175+
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
176+
networking.WithSubnetsResolveLBScheme(scheme),
177+
)
177178
if err != nil {
178179
return nil, err
179180
}
180-
return buildLoadBalancerSubnetMappingsWithSubnetIDs(chosenSubnetIDs), nil
181+
return buildLoadBalancerSubnetMappingsWithSubnets(chosenSubnets), nil
181182
}
182183

183184
func (t *defaultModelBuildTask) buildLoadBalancerSecurityGroups(ctx context.Context, listenPortConfigByPort map[int64]listenPortConfig, ipAddressType elbv2model.IPAddressType) ([]core.StringToken, error) {
@@ -256,57 +257,6 @@ func (t *defaultModelBuildTask) buildLoadBalancerTags(_ context.Context) (map[st
256257
return mergedTags, nil
257258
}
258259

259-
// resolveSubnetIDsViaNameOrIDSlice resolves the subnetIDs for LoadBalancer via a slice of subnetName or subnetIDs.
260-
func (t *defaultModelBuildTask) resolveSubnetIDsViaNameOrIDSlice(ctx context.Context, subnetNameOrIDs []string) ([]string, error) {
261-
var subnetIDs []string
262-
var subnetNames []string
263-
for _, nameOrID := range subnetNameOrIDs {
264-
if strings.HasPrefix(nameOrID, "subnet-") {
265-
subnetIDs = append(subnetIDs, nameOrID)
266-
} else {
267-
subnetNames = append(subnetNames, nameOrID)
268-
}
269-
}
270-
var resolvedSubnets []*ec2sdk.Subnet
271-
if len(subnetIDs) > 0 {
272-
req := &ec2sdk.DescribeSubnetsInput{
273-
SubnetIds: awssdk.StringSlice(subnetIDs),
274-
}
275-
subnets, err := t.ec2Client.DescribeSubnetsAsList(ctx, req)
276-
if err != nil {
277-
return nil, err
278-
}
279-
resolvedSubnets = append(resolvedSubnets, subnets...)
280-
}
281-
if len(subnetNames) > 0 {
282-
req := &ec2sdk.DescribeSubnetsInput{
283-
Filters: []*ec2sdk.Filter{
284-
{
285-
Name: awssdk.String("tag:Name"),
286-
Values: awssdk.StringSlice(subnetNames),
287-
},
288-
{
289-
Name: awssdk.String("vpc-id"),
290-
Values: awssdk.StringSlice([]string{t.vpcID}),
291-
},
292-
},
293-
}
294-
subnets, err := t.ec2Client.DescribeSubnetsAsList(ctx, req)
295-
if err != nil {
296-
return nil, err
297-
}
298-
resolvedSubnets = append(resolvedSubnets, subnets...)
299-
}
300-
resolvedSubnetIDs := make([]string, 0, len(resolvedSubnets))
301-
for _, subnet := range resolvedSubnets {
302-
resolvedSubnetIDs = append(resolvedSubnetIDs, awssdk.StringValue(subnet.SubnetId))
303-
}
304-
if len(resolvedSubnetIDs) != len(subnetNameOrIDs) {
305-
return nil, errors.Errorf("couldn't found all subnets, nameOrIDs: %v, found: %v", subnetNameOrIDs, resolvedSubnetIDs)
306-
}
307-
return resolvedSubnetIDs, nil
308-
}
309-
310260
func (t *defaultModelBuildTask) resolveSecurityGroupIDsViaNameOrIDSlice(ctx context.Context, sgNameOrIDs []string) ([]string, error) {
311261
var sgIDs []string
312262
var sgNames []string
@@ -357,11 +307,11 @@ func (t *defaultModelBuildTask) resolveSecurityGroupIDsViaNameOrIDSlice(ctx cont
357307
return resolvedSGIDs, nil
358308
}
359309

360-
func buildLoadBalancerSubnetMappingsWithSubnetIDs(subnetIDs []string) []elbv2model.SubnetMapping {
361-
subnetMappings := make([]elbv2model.SubnetMapping, 0, len(subnetIDs))
362-
for _, subnetID := range subnetIDs {
310+
func buildLoadBalancerSubnetMappingsWithSubnets(subnets []*ec2sdk.Subnet) []elbv2model.SubnetMapping {
311+
subnetMappings := make([]elbv2model.SubnetMapping, 0, len(subnets))
312+
for _, subnet := range subnets {
363313
subnetMappings = append(subnetMappings, elbv2model.SubnetMapping{
364-
SubnetID: subnetID,
314+
SubnetID: awssdk.StringValue(subnet.SubnetId),
365315
})
366316
}
367317
return subnetMappings

pkg/ingress/model_builder_test.go

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@ import (
1818
mock_networking "sigs.k8s.io/aws-load-balancer-controller/mocks/networking"
1919
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy"
21-
elbv2model "sigs.k8s.io/aws-load-balancer-controller/pkg/model/elbv2"
2221
testclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
2322
"sigs.k8s.io/controller-runtime/pkg/log"
2423
"testing"
2524
)
2625

2726
func Test_defaultModelBuilder_Build(t *testing.T) {
28-
type discoverSubnetsCall struct {
29-
schema elbv2model.LoadBalancerScheme
27+
type resolveViaDiscoveryCall struct {
3028
subnets []*ec2sdk.Subnet
3129
err error
3230
}
@@ -35,7 +33,7 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
3533
svcs []*corev1.Service
3634
}
3735
type fields struct {
38-
discoverSubnetsCalls []discoverSubnetsCall
36+
resolveViaDiscoveryCalls []resolveViaDiscoveryCall
3937
}
4038
type args struct {
4139
ingGroup Group
@@ -111,8 +109,7 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
111109
},
112110
}
113111

114-
discoverSubnetsCallForInternalLB := discoverSubnetsCall{
115-
schema: elbv2model.LoadBalancerSchemeInternal,
112+
resolveViaDiscoveryCallForInternalLB := resolveViaDiscoveryCall{
116113
subnets: []*ec2sdk.Subnet{
117114
{
118115
SubnetId: awssdk.String("subnet-a"),
@@ -124,8 +121,7 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
124121
},
125122
},
126123
}
127-
discoverSubnetsCallForInternetFacingLB := discoverSubnetsCall{
128-
schema: elbv2model.LoadBalancerSchemeInternetFacing,
124+
resolveViaDiscoveryCallForInternetFacingLB := resolveViaDiscoveryCall{
129125
subnets: []*ec2sdk.Subnet{
130126
{
131127
SubnetId: awssdk.String("subnet-c"),
@@ -152,7 +148,7 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
152148
svcs: []*corev1.Service{ns_1_svc_1, ns_1_svc_2, ns_1_svc_3},
153149
},
154150
fields: fields{
155-
discoverSubnetsCalls: []discoverSubnetsCall{discoverSubnetsCallForInternalLB},
151+
resolveViaDiscoveryCalls: []resolveViaDiscoveryCall{resolveViaDiscoveryCallForInternalLB},
156152
},
157153
args: args{
158154
ingGroup: Group{
@@ -595,7 +591,7 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
595591
svcs: []*corev1.Service{ns_1_svc_1, ns_1_svc_2, ns_1_svc_3},
596592
},
597593
fields: fields{
598-
discoverSubnetsCalls: []discoverSubnetsCall{discoverSubnetsCallForInternetFacingLB},
594+
resolveViaDiscoveryCalls: []resolveViaDiscoveryCall{resolveViaDiscoveryCallForInternetFacingLB},
599595
},
600596
args: args{
601597
ingGroup: Group{
@@ -1053,9 +1049,10 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
10531049
clusterName := "cluster-dummy"
10541050
ec2Client := mock_services.NewMockEC2(ctrl)
10551051
subnetsResolver := mock_networking.NewMockSubnetsResolver(ctrl)
1056-
for _, call := range tt.fields.discoverSubnetsCalls {
1057-
subnetsResolver.EXPECT().DiscoverSubnets(gomock.Any(), call.schema).Return(call.subnets, call.err)
1052+
for _, call := range tt.fields.resolveViaDiscoveryCalls {
1053+
subnetsResolver.EXPECT().ResolveViaDiscovery(gomock.Any(), gomock.Any()).Return(call.subnets, call.err)
10581054
}
1055+
10591056
certDiscovery := mock_ingress.NewMockCertDiscovery(ctrl)
10601057
annotationParser := annotations.NewSuffixAnnotationParser("alb.ingress.kubernetes.io")
10611058
authConfigBuilder := NewDefaultAuthConfigBuilder(annotationParser)

0 commit comments

Comments
 (0)