Skip to content

Commit f99ca92

Browse files
author
Chinmay Gadgil
committed
Merge remote-tracking branch 'upstream/main' into prow_infra
# Conflicts: # scripts/run-e2e-test.sh
2 parents 406c96f + 0ad294b commit f99ca92

24 files changed

+543
-153
lines changed

controllers/ingress/group_controller.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,26 @@ const (
4444
func NewGroupReconciler(cloud aws.Cloud, k8sClient client.Client, eventRecorder record.EventRecorder,
4545
finalizerManager k8s.FinalizerManager, networkingSGManager networkingpkg.SecurityGroupManager,
4646
networkingSGReconciler networkingpkg.SecurityGroupReconciler, subnetsResolver networkingpkg.SubnetsResolver,
47-
config config.ControllerConfig, backendSGProvider networkingpkg.BackendSGProvider, logger logr.Logger) *groupReconciler {
47+
controllerConfig config.ControllerConfig, backendSGProvider networkingpkg.BackendSGProvider, logger logr.Logger) *groupReconciler {
4848

4949
annotationParser := annotations.NewSuffixAnnotationParser(annotations.AnnotationPrefixIngress)
5050
authConfigBuilder := ingress.NewDefaultAuthConfigBuilder(annotationParser)
5151
enhancedBackendBuilder := ingress.NewDefaultEnhancedBackendBuilder(k8sClient, annotationParser, authConfigBuilder)
5252
referenceIndexer := ingress.NewDefaultReferenceIndexer(enhancedBackendBuilder, authConfigBuilder, logger)
53-
trackingProvider := tracking.NewDefaultProvider(ingressTagPrefix, config.ClusterName)
54-
elbv2TaggingManager := elbv2deploy.NewDefaultTaggingManager(cloud.ELBV2(), cloud.VpcID(), config.FeatureGates, logger)
53+
trackingProvider := tracking.NewDefaultProvider(ingressTagPrefix, controllerConfig.ClusterName)
54+
elbv2TaggingManager := elbv2deploy.NewDefaultTaggingManager(cloud.ELBV2(), cloud.VpcID(), controllerConfig.FeatureGates, logger)
5555
modelBuilder := ingress.NewDefaultModelBuilder(k8sClient, eventRecorder,
5656
cloud.EC2(), cloud.ACM(),
5757
annotationParser, subnetsResolver,
58-
authConfigBuilder, enhancedBackendBuilder, trackingProvider, elbv2TaggingManager,
59-
cloud.VpcID(), config.ClusterName, config.DefaultTags, config.ExternalManagedTags,
60-
config.DefaultSSLPolicy, backendSGProvider, config.EnableBackendSecurityGroup, config.DisableRestrictedSGRules, logger)
58+
authConfigBuilder, enhancedBackendBuilder, trackingProvider, elbv2TaggingManager, controllerConfig.FeatureGates,
59+
cloud.VpcID(), controllerConfig.ClusterName, controllerConfig.DefaultTags, controllerConfig.ExternalManagedTags,
60+
controllerConfig.DefaultSSLPolicy, backendSGProvider, controllerConfig.EnableBackendSecurityGroup, controllerConfig.DisableRestrictedSGRules, controllerConfig.FeatureGates.Enabled(config.EnableIPTargetType), logger)
6161
stackMarshaller := deploy.NewDefaultStackMarshaller()
6262
stackDeployer := deploy.NewDefaultStackDeployer(cloud, k8sClient, networkingSGManager, networkingSGReconciler,
63-
config, ingressTagPrefix, logger)
63+
controllerConfig, ingressTagPrefix, logger)
6464
classLoader := ingress.NewDefaultClassLoader(k8sClient)
65-
classAnnotationMatcher := ingress.NewDefaultClassAnnotationMatcher(config.IngressConfig.IngressClass)
66-
manageIngressesWithoutIngressClass := config.IngressConfig.IngressClass == ""
65+
classAnnotationMatcher := ingress.NewDefaultClassAnnotationMatcher(controllerConfig.IngressConfig.IngressClass)
66+
manageIngressesWithoutIngressClass := controllerConfig.IngressConfig.IngressClass == ""
6767
groupLoader := ingress.NewDefaultGroupLoader(k8sClient, eventRecorder, annotationParser, classLoader, classAnnotationMatcher, manageIngressesWithoutIngressClass)
6868
groupFinalizerManager := ingress.NewDefaultFinalizerManager(finalizerManager)
6969

@@ -80,7 +80,7 @@ func NewGroupReconciler(cloud aws.Cloud, k8sClient client.Client, eventRecorder
8080
groupFinalizerManager: groupFinalizerManager,
8181
logger: logger,
8282

83-
maxConcurrentReconciles: config.IngressConfig.MaxConcurrentReconciles,
83+
maxConcurrentReconciles: controllerConfig.IngressConfig.MaxConcurrentReconciles,
8484
}
8585
}
8686

controllers/service/service_controller.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,30 +36,30 @@ const (
3636
func NewServiceReconciler(cloud aws.Cloud, k8sClient client.Client, eventRecorder record.EventRecorder,
3737
finalizerManager k8s.FinalizerManager, networkingSGManager networking.SecurityGroupManager,
3838
networkingSGReconciler networking.SecurityGroupReconciler, subnetsResolver networking.SubnetsResolver,
39-
vpcInfoProvider networking.VPCInfoProvider, config config.ControllerConfig, logger logr.Logger) *serviceReconciler {
39+
vpcInfoProvider networking.VPCInfoProvider, controllerConfig config.ControllerConfig, logger logr.Logger) *serviceReconciler {
4040

4141
annotationParser := annotations.NewSuffixAnnotationParser(serviceAnnotationPrefix)
42-
trackingProvider := tracking.NewDefaultProvider(serviceTagPrefix, config.ClusterName)
43-
elbv2TaggingManager := elbv2.NewDefaultTaggingManager(cloud.ELBV2(), cloud.VpcID(), config.FeatureGates, logger)
44-
serviceUtils := service.NewServiceUtils(annotationParser, serviceFinalizer, config.ServiceConfig.LoadBalancerClass, config.FeatureGates)
42+
trackingProvider := tracking.NewDefaultProvider(serviceTagPrefix, controllerConfig.ClusterName)
43+
elbv2TaggingManager := elbv2.NewDefaultTaggingManager(cloud.ELBV2(), cloud.VpcID(), controllerConfig.FeatureGates, logger)
44+
serviceUtils := service.NewServiceUtils(annotationParser, serviceFinalizer, controllerConfig.ServiceConfig.LoadBalancerClass, controllerConfig.FeatureGates)
4545
modelBuilder := service.NewDefaultModelBuilder(annotationParser, subnetsResolver, vpcInfoProvider, cloud.VpcID(), trackingProvider,
46-
elbv2TaggingManager, config.ClusterName, config.DefaultTags, config.ExternalManagedTags, config.DefaultSSLPolicy, serviceUtils)
46+
elbv2TaggingManager, controllerConfig.FeatureGates, controllerConfig.ClusterName, controllerConfig.DefaultTags, controllerConfig.ExternalManagedTags, controllerConfig.DefaultSSLPolicy, controllerConfig.FeatureGates.Enabled(config.EnableIPTargetType), serviceUtils)
4747
stackMarshaller := deploy.NewDefaultStackMarshaller()
48-
stackDeployer := deploy.NewDefaultStackDeployer(cloud, k8sClient, networkingSGManager, networkingSGReconciler, config, serviceTagPrefix, logger)
48+
stackDeployer := deploy.NewDefaultStackDeployer(cloud, k8sClient, networkingSGManager, networkingSGReconciler, controllerConfig, serviceTagPrefix, logger)
4949
return &serviceReconciler{
5050
k8sClient: k8sClient,
5151
eventRecorder: eventRecorder,
5252
finalizerManager: finalizerManager,
5353
annotationParser: annotationParser,
54-
loadBalancerClass: config.ServiceConfig.LoadBalancerClass,
54+
loadBalancerClass: controllerConfig.ServiceConfig.LoadBalancerClass,
5555
serviceUtils: serviceUtils,
5656

5757
modelBuilder: modelBuilder,
5858
stackMarshaller: stackMarshaller,
5959
stackDeployer: stackDeployer,
6060
logger: logger,
6161

62-
maxConcurrentReconciles: config.ServiceMaxConcurrentReconciles,
62+
maxConcurrentReconciles: controllerConfig.ServiceMaxConcurrentReconciles,
6363
}
6464
}
6565

docs/deploy/configurations.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,5 @@ They are a set of kye=value pairs that describe AWS load balance controller feat
146146
| ServiceTypeLoadBalancerOnly | string | false | If enabled, controller will be limited to reconciling service of type `LoadBalancer`|
147147
| EndpointsFailOpen | string | false | Enable or disable allowing endpoints with `ready:unknown` state in the target groups. |
148148
| EnableServiceController | string | true | Toggles support for `Service` type resources. |
149+
| EnableIPTargetType | string | true | Used to toggle support for target-type `ip` across `Ingress` and `Service` type resources. |
150+
| SubnetsClusterTagCheck | string | true | Enable or disable the check for `kubernetes.io/cluster/${cluster-name}` during subnet auto-discovery |

docs/deploy/subnet_discovery.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ In version v2.1.1 and older, both the public and private subnets must be tagged
3131

3232
`${cluster-name}` is the name of the kubernetes cluster
3333

34-
The cluster tag is not required in v2.1.2 and newer releases, unless a cluster tag for another cluster is present.
34+
The cluster tag is not required in versions from v2.1.2 to v2.4.1, unless a cluster tag for another cluster is present.
35+
36+
Starting from v2.4.2 release, you can disable the cluster tag check completely by specifying the feature gate `SubnetsClusterTagCheck=false`

pkg/config/feature_gates.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const (
1515
ServiceTypeLoadBalancerOnly Feature = "ServiceTypeLoadBalancerOnly"
1616
EndpointsFailOpen Feature = "EndpointsFailOpen"
1717
EnableServiceController Feature = "EnableServiceController"
18+
EnableIPTargetType Feature = "EnableIPTargetType"
19+
SubnetsClusterTagCheck Feature = "SubnetsClusterTagCheck"
1820
)
1921

2022
type FeatureGates interface {
@@ -47,6 +49,8 @@ func NewFeatureGates() FeatureGates {
4749
ServiceTypeLoadBalancerOnly: false,
4850
EndpointsFailOpen: false,
4951
EnableServiceController: true,
52+
EnableIPTargetType: true,
53+
SubnetsClusterTagCheck: true,
5054
},
5155
}
5256
}

pkg/ingress/model_build_load_balancer.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ import (
88
"regexp"
99
"strings"
1010

11-
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
12-
1311
awssdk "github.com/aws/aws-sdk-go/aws"
1412
ec2sdk "github.com/aws/aws-sdk-go/service/ec2"
1513
"github.com/google/go-cmp/cmp"
1614
"github.com/pkg/errors"
1715
"k8s.io/apimachinery/pkg/util/sets"
1816
"sigs.k8s.io/aws-load-balancer-controller/pkg/algorithm"
1917
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
18+
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
19+
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
2020
"sigs.k8s.io/aws-load-balancer-controller/pkg/equality"
2121
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
2222
"sigs.k8s.io/aws-load-balancer-controller/pkg/model/core"
@@ -225,6 +225,7 @@ func (t *defaultModelBuildTask) buildLoadBalancerSubnetMappings(ctx context.Cont
225225
networking.WithSubnetsResolveLBType(elbv2model.LoadBalancerTypeApplication),
226226
networking.WithSubnetsResolveLBScheme(scheme),
227227
networking.WithSubnetsResolveAvailableIPAddressCount(minimalAvailableIPAddressCount),
228+
networking.WithSubnetsClusterTagCheck(t.featureGates.Enabled(config.SubnetsClusterTagCheck)),
228229
)
229230
if err != nil {
230231
return nil, errors.Wrap(err, "couldn't auto-discover subnets")

pkg/ingress/model_build_target_group.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,9 @@ func (t *defaultModelBuildTask) buildTargetGroupTargetType(_ context.Context, sv
214214
case string(elbv2model.TargetTypeInstance):
215215
return elbv2model.TargetTypeInstance, nil
216216
case string(elbv2model.TargetTypeIP):
217+
if !t.enableIPTargetType {
218+
return "", errors.Errorf("unsupported targetType: %v when EnableIPTargetType is %v", rawTargetType, t.enableIPTargetType)
219+
}
217220
return elbv2model.TargetTypeIP, nil
218221
default:
219222
return "", errors.Errorf("unknown targetType: %v", rawTargetType)

pkg/ingress/model_builder.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"k8s.io/client-go/tools/record"
1414
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
1515
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
16+
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
1617
elbv2deploy "sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
1718
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
1819
"sigs.k8s.io/aws-load-balancer-controller/pkg/k8s"
@@ -38,9 +39,9 @@ func NewDefaultModelBuilder(k8sClient client.Client, eventRecorder record.EventR
3839
ec2Client services.EC2, acmClient services.ACM,
3940
annotationParser annotations.Parser, subnetsResolver networkingpkg.SubnetsResolver,
4041
authConfigBuilder AuthConfigBuilder, enhancedBackendBuilder EnhancedBackendBuilder,
41-
trackingProvider tracking.Provider, elbv2TaggingManager elbv2deploy.TaggingManager,
42+
trackingProvider tracking.Provider, elbv2TaggingManager elbv2deploy.TaggingManager, featureGates config.FeatureGates,
4243
vpcID string, clusterName string, defaultTags map[string]string, externalManagedTags []string, defaultSSLPolicy string,
43-
backendSGProvider networkingpkg.BackendSGProvider, enableBackendSG bool, disableRestrictedSGRules bool, logger logr.Logger) *defaultModelBuilder {
44+
backendSGProvider networkingpkg.BackendSGProvider, enableBackendSG bool, disableRestrictedSGRules bool, enableIPTargetType bool, logger logr.Logger) *defaultModelBuilder {
4445
certDiscovery := NewACMCertDiscovery(acmClient, logger)
4546
ruleOptimizer := NewDefaultRuleOptimizer(logger)
4647
return &defaultModelBuilder{
@@ -58,11 +59,13 @@ func NewDefaultModelBuilder(k8sClient client.Client, eventRecorder record.EventR
5859
ruleOptimizer: ruleOptimizer,
5960
trackingProvider: trackingProvider,
6061
elbv2TaggingManager: elbv2TaggingManager,
62+
featureGates: featureGates,
6163
defaultTags: defaultTags,
6264
externalManagedTags: sets.NewString(externalManagedTags...),
6365
defaultSSLPolicy: defaultSSLPolicy,
6466
enableBackendSG: enableBackendSG,
6567
disableRestrictedSGRules: disableRestrictedSGRules,
68+
enableIPTargetType: enableIPTargetType,
6669
logger: logger,
6770
}
6871
}
@@ -87,11 +90,13 @@ type defaultModelBuilder struct {
8790
ruleOptimizer RuleOptimizer
8891
trackingProvider tracking.Provider
8992
elbv2TaggingManager elbv2deploy.TaggingManager
93+
featureGates config.FeatureGates
9094
defaultTags map[string]string
9195
externalManagedTags sets.String
9296
defaultSSLPolicy string
9397
enableBackendSG bool
9498
disableRestrictedSGRules bool
99+
enableIPTargetType bool
95100

96101
logger logr.Logger
97102
}
@@ -113,10 +118,12 @@ func (b *defaultModelBuilder) Build(ctx context.Context, ingGroup Group) (core.S
113118
ruleOptimizer: b.ruleOptimizer,
114119
trackingProvider: b.trackingProvider,
115120
elbv2TaggingManager: b.elbv2TaggingManager,
121+
featureGates: b.featureGates,
116122
backendSGProvider: b.backendSGProvider,
117123
logger: b.logger,
118124
enableBackendSG: b.enableBackendSG,
119125
disableRestrictedSGRules: b.disableRestrictedSGRules,
126+
enableIPTargetType: b.enableIPTargetType,
120127

121128
ingGroup: ingGroup,
122129
stack: stack,
@@ -164,6 +171,7 @@ type defaultModelBuildTask struct {
164171
ruleOptimizer RuleOptimizer
165172
trackingProvider tracking.Provider
166173
elbv2TaggingManager elbv2deploy.TaggingManager
174+
featureGates config.FeatureGates
167175
logger logr.Logger
168176

169177
ingGroup Group
@@ -172,6 +180,7 @@ type defaultModelBuildTask struct {
172180
backendSGIDToken core.StringToken
173181
enableBackendSG bool
174182
disableRestrictedSGRules bool
183+
enableIPTargetType bool
175184

176185
defaultTags map[string]string
177186
externalManagedTags sets.String

pkg/ingress/model_builder_test.go

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"k8s.io/client-go/tools/record"
2121
"sigs.k8s.io/aws-load-balancer-controller/pkg/annotations"
2222
"sigs.k8s.io/aws-load-balancer-controller/pkg/aws/services"
23+
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
2324
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy"
2425
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/elbv2"
2526
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
@@ -194,12 +195,13 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
194195
}
195196

196197
tests := []struct {
197-
name string
198-
env env
199-
args args
200-
fields fields
201-
wantStackJSON string
202-
wantErr error
198+
name string
199+
env env
200+
enableIPTargetType *bool
201+
args args
202+
fields fields
203+
wantStackJSON string
204+
wantErr error
203205
}{
204206
{
205207
name: "Ingress - vanilla internal",
@@ -3611,6 +3613,59 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
36113613
},
36123614
wantErr: errors.New("ingress: ns-1/ing-1: unsupported IPv6 configuration, lb not dual-stack"),
36133615
},
3616+
{
3617+
name: "target type IP with enableIPTargetType set to false",
3618+
env: env{
3619+
svcs: []*corev1.Service{svcWithNamedTargetPort},
3620+
},
3621+
enableIPTargetType: awssdk.Bool(false),
3622+
fields: fields{
3623+
resolveViaDiscoveryCalls: []resolveViaDiscoveryCall{resolveViaDiscoveryCallForInternalLB},
3624+
listLoadBalancersCalls: []listLoadBalancersCall{listLoadBalancerCallForEmptyLB},
3625+
enableBackendSG: true,
3626+
},
3627+
args: args{
3628+
ingGroup: Group{
3629+
ID: GroupID{Namespace: "ns-1", Name: "ing-1"},
3630+
Members: []ClassifiedIngress{
3631+
{
3632+
Ing: &networking.Ingress{ObjectMeta: metav1.ObjectMeta{
3633+
Namespace: "ns-1",
3634+
Name: "ing-1",
3635+
Annotations: map[string]string{
3636+
"alb.ingress.kubernetes.io/target-type": "ip",
3637+
},
3638+
},
3639+
Spec: networking.IngressSpec{
3640+
Rules: []networking.IngressRule{
3641+
{
3642+
IngressRuleValue: networking.IngressRuleValue{
3643+
HTTP: &networking.HTTPIngressRuleValue{
3644+
Paths: []networking.HTTPIngressPath{
3645+
{
3646+
Path: "/",
3647+
Backend: networking.IngressBackend{
3648+
Service: &networking.IngressServiceBackend{
3649+
Name: svcWithNamedTargetPort.Name,
3650+
Port: networking.ServiceBackendPort{
3651+
Name: "https",
3652+
},
3653+
},
3654+
},
3655+
},
3656+
},
3657+
},
3658+
},
3659+
},
3660+
},
3661+
},
3662+
},
3663+
},
3664+
},
3665+
},
3666+
},
3667+
wantErr: errors.New("ingress: ns-1/ing-1: unsupported targetType: ip when EnableIPTargetType is false"),
3668+
},
36143669
{
36153670
name: "target type IP with named target port",
36163671
env: env{
@@ -3895,11 +3950,18 @@ func Test_defaultModelBuilder_Build(t *testing.T) {
38953950
trackingProvider: trackingProvider,
38963951
elbv2TaggingManager: elbv2TaggingManager,
38973952
enableBackendSG: tt.fields.enableBackendSG,
3953+
featureGates: config.NewFeatureGates(),
38983954
logger: &log.NullLogger{},
38993955

39003956
defaultSSLPolicy: "ELBSecurityPolicy-2016-08",
39013957
}
39023958

3959+
if tt.enableIPTargetType == nil {
3960+
b.enableIPTargetType = true
3961+
} else {
3962+
b.enableIPTargetType = *tt.enableIPTargetType
3963+
}
3964+
39033965
gotStack, _, _, err := b.Build(context.Background(), tt.args.ingGroup)
39043966
if tt.wantErr != nil {
39053967
assert.EqualError(t, err, tt.wantErr.Error())

0 commit comments

Comments
 (0)