Skip to content

Commit 2a5c053

Browse files
committed
add literal target group
1 parent b6294da commit 2a5c053

File tree

8 files changed

+292
-256
lines changed

8 files changed

+292
-256
lines changed

controllers/gateway/gateway_controller.go

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package gateway
33
import (
44
"context"
55
"fmt"
6+
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_utils"
67
"time"
78

89
elbv2types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
@@ -56,13 +57,13 @@ const (
5657
var _ Reconciler = &gatewayReconciler{}
5758

5859
// NewNLBGatewayReconciler constructs a gateway reconciler to handle specifically for NLB gateways
59-
func NewNLBGatewayReconciler(routeLoader routeutils.Loader, referenceCounter referencecounter.ServiceReferenceCounter, cloud services.Cloud, k8sClient client.Client, eventRecorder record.EventRecorder, controllerConfig config.ControllerConfig, finalizerManager k8s.FinalizerManager, networkingManager networking.NetworkingManager, networkingSGReconciler networking.SecurityGroupReconciler, networkingSGManager networking.SecurityGroupManager, elbv2TaggingManager elbv2deploy.TaggingManager, subnetResolver networking.SubnetsResolver, vpcInfoProvider networking.VPCInfoProvider, backendSGProvider networking.BackendSGProvider, sgResolver networking.SecurityGroupResolver, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector, reconcileCounters *metricsutil.ReconcileCounters, targetGroupCollector awsmetrics.TargetGroupCollector) Reconciler {
60-
return newGatewayReconciler(constants.NLBGatewayController, elbv2model.LoadBalancerTypeNetwork, controllerConfig.NLBGatewayMaxConcurrentReconciles, constants.NLBGatewayTagPrefix, shared_constants.NLBGatewayFinalizer, routeLoader, referenceCounter, routeutils.L4RouteFilter, cloud, k8sClient, eventRecorder, controllerConfig, finalizerManager, networkingSGReconciler, networkingManager, networkingSGManager, elbv2TaggingManager, subnetResolver, vpcInfoProvider, backendSGProvider, sgResolver, nlbAddons, logger, metricsCollector, reconcileCounters.IncrementNLBGateway, targetGroupCollector)
60+
func NewNLBGatewayReconciler(routeLoader routeutils.Loader, referenceCounter referencecounter.ServiceReferenceCounter, cloud services.Cloud, k8sClient client.Client, eventRecorder record.EventRecorder, controllerConfig config.ControllerConfig, finalizerManager k8s.FinalizerManager, networkingManager networking.NetworkingManager, networkingSGReconciler networking.SecurityGroupReconciler, networkingSGManager networking.SecurityGroupManager, elbv2TaggingManager elbv2deploy.TaggingManager, subnetResolver networking.SubnetsResolver, vpcInfoProvider networking.VPCInfoProvider, backendSGProvider networking.BackendSGProvider, sgResolver networking.SecurityGroupResolver, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector, reconcileCounters *metricsutil.ReconcileCounters, targetGroupCollector awsmetrics.TargetGroupCollector, targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper) Reconciler {
61+
return newGatewayReconciler(constants.NLBGatewayController, elbv2model.LoadBalancerTypeNetwork, controllerConfig.NLBGatewayMaxConcurrentReconciles, constants.NLBGatewayTagPrefix, shared_constants.NLBGatewayFinalizer, routeLoader, referenceCounter, routeutils.L4RouteFilter, cloud, k8sClient, eventRecorder, controllerConfig, finalizerManager, networkingSGReconciler, networkingManager, networkingSGManager, elbv2TaggingManager, subnetResolver, vpcInfoProvider, backendSGProvider, sgResolver, nlbAddons, targetGroupNameToArnMapper, logger, metricsCollector, reconcileCounters.IncrementNLBGateway, targetGroupCollector)
6162
}
6263

6364
// NewALBGatewayReconciler constructs a gateway reconciler to handle specifically for ALB gateways
64-
func NewALBGatewayReconciler(routeLoader routeutils.Loader, cloud services.Cloud, k8sClient client.Client, referenceCounter referencecounter.ServiceReferenceCounter, eventRecorder record.EventRecorder, controllerConfig config.ControllerConfig, finalizerManager k8s.FinalizerManager, networkingManager networking.NetworkingManager, networkingSGReconciler networking.SecurityGroupReconciler, networkingSGManager networking.SecurityGroupManager, elbv2TaggingManager elbv2deploy.TaggingManager, subnetResolver networking.SubnetsResolver, vpcInfoProvider networking.VPCInfoProvider, backendSGProvider networking.BackendSGProvider, sgResolver networking.SecurityGroupResolver, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector, reconcileCounters *metricsutil.ReconcileCounters, targetGroupCollector awsmetrics.TargetGroupCollector) Reconciler {
65-
return newGatewayReconciler(constants.ALBGatewayController, elbv2model.LoadBalancerTypeApplication, controllerConfig.ALBGatewayMaxConcurrentReconciles, constants.ALBGatewayTagPrefix, shared_constants.ALBGatewayFinalizer, routeLoader, referenceCounter, routeutils.L7RouteFilter, cloud, k8sClient, eventRecorder, controllerConfig, finalizerManager, networkingSGReconciler, networkingManager, networkingSGManager, elbv2TaggingManager, subnetResolver, vpcInfoProvider, backendSGProvider, sgResolver, albAddons, logger, metricsCollector, reconcileCounters.IncrementALBGateway, targetGroupCollector)
65+
func NewALBGatewayReconciler(routeLoader routeutils.Loader, cloud services.Cloud, k8sClient client.Client, referenceCounter referencecounter.ServiceReferenceCounter, eventRecorder record.EventRecorder, controllerConfig config.ControllerConfig, finalizerManager k8s.FinalizerManager, networkingManager networking.NetworkingManager, networkingSGReconciler networking.SecurityGroupReconciler, networkingSGManager networking.SecurityGroupManager, elbv2TaggingManager elbv2deploy.TaggingManager, subnetResolver networking.SubnetsResolver, vpcInfoProvider networking.VPCInfoProvider, backendSGProvider networking.BackendSGProvider, sgResolver networking.SecurityGroupResolver, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector, reconcileCounters *metricsutil.ReconcileCounters, targetGroupCollector awsmetrics.TargetGroupCollector, targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper) Reconciler {
66+
return newGatewayReconciler(constants.ALBGatewayController, elbv2model.LoadBalancerTypeApplication, controllerConfig.ALBGatewayMaxConcurrentReconciles, constants.ALBGatewayTagPrefix, shared_constants.ALBGatewayFinalizer, routeLoader, referenceCounter, routeutils.L7RouteFilter, cloud, k8sClient, eventRecorder, controllerConfig, finalizerManager, networkingSGReconciler, networkingManager, networkingSGManager, elbv2TaggingManager, subnetResolver, vpcInfoProvider, backendSGProvider, sgResolver, albAddons, targetGroupNameToArnMapper, logger, metricsCollector, reconcileCounters.IncrementALBGateway, targetGroupCollector)
6667
}
6768

6869
// newGatewayReconciler constructs a reconciler that responds to gateway object changes
@@ -72,7 +73,7 @@ func newGatewayReconciler(controllerName string, lbType elbv2model.LoadBalancerT
7273
finalizerManager k8s.FinalizerManager, networkingSGReconciler networking.SecurityGroupReconciler,
7374
networkingManager networking.NetworkingManager, networkingSGManager networking.SecurityGroupManager, elbv2TaggingManager elbv2deploy.TaggingManager,
7475
subnetResolver networking.SubnetsResolver, vpcInfoProvider networking.VPCInfoProvider, backendSGProvider networking.BackendSGProvider,
75-
sgResolver networking.SecurityGroupResolver, supportedAddons []addon.Addon, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector,
76+
sgResolver networking.SecurityGroupResolver, supportedAddons []addon.Addon, targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper, logger logr.Logger, metricsCollector lbcmetrics.MetricCollector,
7677
reconcileTracker func(namespaceName types.NamespacedName), targetGroupCollector awsmetrics.TargetGroupCollector) Reconciler {
7778

7879
trackingProvider := tracking.NewDefaultProvider(gatewayTagPrefix, controllerConfig.ClusterName)
@@ -84,49 +85,51 @@ func newGatewayReconciler(controllerName string, lbType elbv2model.LoadBalancerT
8485
cfgResolver := newGatewayConfigResolver()
8586

8687
return &gatewayReconciler{
87-
controllerName: controllerName,
88-
lbType: lbType,
89-
maxConcurrentReconciles: maxConcurrentReconciles,
90-
finalizer: finalizer,
91-
gatewayLoader: routeLoader,
92-
routeFilter: routeFilter,
93-
k8sClient: k8sClient,
94-
modelBuilder: modelBuilder,
95-
backendSGProvider: backendSGProvider,
96-
stackMarshaller: stackMarshaller,
97-
stackDeployer: stackDeployer,
98-
finalizerManager: finalizerManager,
99-
eventRecorder: eventRecorder,
100-
logger: logger,
101-
metricsCollector: metricsCollector,
102-
reconcileTracker: reconcileTracker,
103-
cfgResolver: cfgResolver,
104-
serviceReferenceCounter: serviceReferenceCounter,
105-
gatewayConditionUpdater: prepareGatewayConditionUpdate,
88+
controllerName: controllerName,
89+
lbType: lbType,
90+
maxConcurrentReconciles: maxConcurrentReconciles,
91+
finalizer: finalizer,
92+
gatewayLoader: routeLoader,
93+
routeFilter: routeFilter,
94+
k8sClient: k8sClient,
95+
modelBuilder: modelBuilder,
96+
backendSGProvider: backendSGProvider,
97+
stackMarshaller: stackMarshaller,
98+
stackDeployer: stackDeployer,
99+
finalizerManager: finalizerManager,
100+
eventRecorder: eventRecorder,
101+
logger: logger,
102+
metricsCollector: metricsCollector,
103+
reconcileTracker: reconcileTracker,
104+
cfgResolver: cfgResolver,
105+
serviceReferenceCounter: serviceReferenceCounter,
106+
gatewayConditionUpdater: prepareGatewayConditionUpdate,
107+
targetGroupNameToArnMapper: targetGroupNameToArnMapper,
106108
}
107109
}
108110

109111
// gatewayReconciler reconciles a Gateway.
110112
type gatewayReconciler struct {
111-
controllerName string
112-
lbType elbv2model.LoadBalancerType
113-
finalizer string
114-
maxConcurrentReconciles int
115-
gatewayLoader routeutils.Loader
116-
routeFilter routeutils.LoadRouteFilter
117-
k8sClient client.Client
118-
modelBuilder gatewaymodel.Builder
119-
backendSGProvider networking.BackendSGProvider
120-
secretsManager k8s.SecretsManager
121-
stackMarshaller deploy.StackMarshaller
122-
stackDeployer deploy.StackDeployer
123-
finalizerManager k8s.FinalizerManager
124-
eventRecorder record.EventRecorder
125-
logger logr.Logger
126-
metricsCollector lbcmetrics.MetricCollector
127-
reconcileTracker func(namespaceName types.NamespacedName)
128-
serviceReferenceCounter referencecounter.ServiceReferenceCounter
129-
gatewayConditionUpdater func(gw *gwv1.Gateway, targetConditionType string, newStatus metav1.ConditionStatus, reason string, message string) bool
113+
controllerName string
114+
lbType elbv2model.LoadBalancerType
115+
finalizer string
116+
maxConcurrentReconciles int
117+
gatewayLoader routeutils.Loader
118+
routeFilter routeutils.LoadRouteFilter
119+
k8sClient client.Client
120+
modelBuilder gatewaymodel.Builder
121+
backendSGProvider networking.BackendSGProvider
122+
secretsManager k8s.SecretsManager
123+
stackMarshaller deploy.StackMarshaller
124+
stackDeployer deploy.StackDeployer
125+
finalizerManager k8s.FinalizerManager
126+
eventRecorder record.EventRecorder
127+
targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper
128+
logger logr.Logger
129+
metricsCollector lbcmetrics.MetricCollector
130+
reconcileTracker func(namespaceName types.NamespacedName)
131+
serviceReferenceCounter referencecounter.ServiceReferenceCounter
132+
gatewayConditionUpdater func(gw *gwv1.Gateway, targetConditionType string, newStatus metav1.ConditionStatus, reason string, message string) bool
130133

131134
cfgResolver gatewayConfigResolver
132135
}
@@ -363,7 +366,7 @@ func (r *gatewayReconciler) deployModel(ctx context.Context, gw *gwv1.Gateway, s
363366
}
364367

365368
func (r *gatewayReconciler) buildModel(ctx context.Context, gw *gwv1.Gateway, cfg elbv2gw.LoadBalancerConfiguration, listenerToRoute map[int32][]routeutils.RouteDescriptor, currentAddonConfig []addon.Addon) (core.Stack, *elbv2model.LoadBalancer, []addon.AddonMetadata, bool, []types.NamespacedName, error) {
366-
stack, lb, newAddOnConfig, backendSGRequired, secrets, err := r.modelBuilder.Build(ctx, gw, cfg, listenerToRoute, currentAddonConfig, r.secretsManager)
369+
stack, lb, newAddOnConfig, backendSGRequired, secrets, err := r.modelBuilder.Build(ctx, gw, cfg, listenerToRoute, currentAddonConfig, r.secretsManager, r.targetGroupNameToArnMapper)
367370
if err != nil {
368371
r.eventRecorder.Event(gw, corev1.EventTypeWarning, k8s.GatewayEventReasonFailedBuildModel, fmt.Sprintf("Failed build model due to %v", err))
369372
return nil, nil, nil, false, nil, err

pkg/gateway/model/base_model_builder.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package model
22

33
import (
44
"context"
5+
"sigs.k8s.io/aws-load-balancer-controller/pkg/shared_utils"
56

67
"k8s.io/apimachinery/pkg/types"
78
"sigs.k8s.io/aws-load-balancer-controller/pkg/addon"
@@ -32,7 +33,7 @@ import (
3233
// Builder builds the model stack for a Gateway resource.
3334
type Builder interface {
3435
// Build model stack for a gateway
35-
Build(ctx context.Context, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor, currentAddonConfig []addon.Addon, secretsManager k8s.SecretsManager) (core.Stack, *elbv2model.LoadBalancer, []addon.AddonMetadata, bool, []types.NamespacedName, error)
36+
Build(ctx context.Context, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor, currentAddonConfig []addon.Addon, secretsManager k8s.SecretsManager, targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper) (core.Stack, *elbv2model.LoadBalancer, []addon.AddonMetadata, bool, []types.NamespacedName, error)
3637
}
3738

3839
// NewModelBuilder construct a new baseModelBuilder
@@ -123,9 +124,9 @@ type baseModelBuilder struct {
123124
defaultIPType elbv2model.IPAddressType
124125
}
125126

126-
func (baseBuilder *baseModelBuilder) Build(ctx context.Context, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor, currentAddonConfig []addon.Addon, secretsManager k8s.SecretsManager) (core.Stack, *elbv2model.LoadBalancer, []addon.AddonMetadata, bool, []types.NamespacedName, error) {
127+
func (baseBuilder *baseModelBuilder) Build(ctx context.Context, gw *gwv1.Gateway, lbConf elbv2gw.LoadBalancerConfiguration, routes map[int32][]routeutils.RouteDescriptor, currentAddonConfig []addon.Addon, secretsManager k8s.SecretsManager, targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper) (core.Stack, *elbv2model.LoadBalancer, []addon.AddonMetadata, bool, []types.NamespacedName, error) {
127128
stack := core.NewDefaultStack(core.StackID(k8s.NamespacedName(gw)))
128-
tgBuilder := newTargetGroupBuilder(baseBuilder.clusterName, baseBuilder.vpcID, baseBuilder.gwTagHelper, baseBuilder.loadBalancerType, baseBuilder.tgPropertiesConstructor, baseBuilder.disableRestrictedSGRules, baseBuilder.defaultTargetType)
129+
tgBuilder := newTargetGroupBuilder(baseBuilder.clusterName, baseBuilder.vpcID, baseBuilder.gwTagHelper, baseBuilder.loadBalancerType, baseBuilder.tgPropertiesConstructor, baseBuilder.disableRestrictedSGRules, baseBuilder.defaultTargetType, targetGroupNameToArnMapper)
129130
listenerBuilder := newListenerBuilder(baseBuilder.loadBalancerType, tgBuilder, baseBuilder.gwTagHelper, baseBuilder.clusterName, baseBuilder.defaultSSLPolicy, baseBuilder.elbv2Client, baseBuilder.acmClient, baseBuilder.k8sClient, baseBuilder.allowedCAARNs, secretsManager, baseBuilder.logger)
130131
var isPreDelete bool
131132
if gw.DeletionTimestamp != nil && !gw.DeletionTimestamp.IsZero() {

pkg/gateway/model/mock_tg_builder.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@ type MockTargetGroupBuilder struct {
1515
buildErr error
1616
}
1717

18-
func (m *MockTargetGroupBuilder) buildTargetGroup(stack core.Stack, gw *gwv1.Gateway, lbConfig elbv2gw.LoadBalancerConfiguration, lbIPType elbv2model.IPAddressType, routeDescriptor routeutils.RouteDescriptor, backend routeutils.Backend, backendSGIDToken core.StringToken) (*elbv2model.TargetGroup, error) {
18+
func (m *MockTargetGroupBuilder) buildTargetGroup(stack core.Stack, gw *gwv1.Gateway, lbConfig elbv2gw.LoadBalancerConfiguration, lbIPType elbv2model.IPAddressType, routeDescriptor routeutils.RouteDescriptor, backend routeutils.Backend, backendSGIDToken core.StringToken) (core.StringToken, error) {
1919
var tg *elbv2model.TargetGroup
2020

2121
if len(m.tgs) > 0 {
2222
tg = m.tgs[0]
2323
m.tgs = m.tgs[1:]
2424
}
2525

26-
return tg, m.buildErr
26+
var arn core.StringToken
27+
if tg != nil {
28+
arn = tg.TargetGroupARN()
29+
}
30+
return arn, m.buildErr
2731
}
2832

2933
func (m *MockTargetGroupBuilder) buildTargetGroupSpec(gw *gwv1.Gateway, route routeutils.RouteDescriptor, lbConfig elbv2gw.LoadBalancerConfiguration, lbIPType elbv2model.IPAddressType, backend routeutils.Backend, targetGroupProps *elbv2gw.TargetGroupProps) (elbv2model.TargetGroupSpec, error) {

pkg/gateway/model/model_build_listener.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,17 @@ type listenerBuilder interface {
3838
}
3939

4040
type listenerBuilderImpl struct {
41-
elbv2Client services.ELBV2
42-
k8sClient client.Client
43-
loadBalancerType elbv2model.LoadBalancerType
44-
clusterName string
45-
tagHelper tagHelper
46-
tgBuilder targetGroupBuilder
47-
defaultSSLPolicy string
48-
secretsManager k8s.SecretsManager
49-
certDiscovery certs.CertDiscovery
50-
logger logr.Logger
41+
elbv2Client services.ELBV2
42+
k8sClient client.Client
43+
loadBalancerType elbv2model.LoadBalancerType
44+
clusterName string
45+
tagHelper tagHelper
46+
tgBuilder targetGroupBuilder
47+
defaultSSLPolicy string
48+
secretsManager k8s.SecretsManager
49+
certDiscovery certs.CertDiscovery
50+
targetGroupNameToArnMapper shared_utils.TargetGroupARNMapper
51+
logger logr.Logger
5152
}
5253

5354
func (l listenerBuilderImpl) buildListeners(ctx context.Context, stack core.Stack, lb *elbv2model.LoadBalancer, securityGroups securityGroupOutput, gw *gwv1.Gateway, routes map[int32][]routeutils.RouteDescriptor, lbCfg elbv2gw.LoadBalancerConfiguration) ([]types.NamespacedName, error) {
@@ -179,11 +180,11 @@ func (l listenerBuilderImpl) buildL4ListenerSpec(ctx context.Context, stack core
179180
return nil, nil
180181
}
181182

182-
targetGroup, tgErr := l.tgBuilder.buildTargetGroup(stack, gw, lbCfg, lb.Spec.IPAddressType, routeDescriptor, backend, securityGroups.backendSecurityGroupToken)
183+
arn, tgErr := l.tgBuilder.buildTargetGroup(stack, gw, lbCfg, lb.Spec.IPAddressType, routeDescriptor, backend, securityGroups.backendSecurityGroupToken)
183184
if tgErr != nil {
184185
return &elbv2model.ListenerSpec{}, tgErr
185186
}
186-
listenerSpec.DefaultActions = buildL4ListenerDefaultActions(targetGroup)
187+
listenerSpec.DefaultActions = buildL4ListenerDefaultActions(arn)
187188
return listenerSpec, nil
188189
}
189190

@@ -224,14 +225,14 @@ func (l listenerBuilderImpl) buildListenerRules(ctx context.Context, stack core.
224225
}
225226
targetGroupTuples := make([]elbv2model.TargetGroupTuple, 0, len(rule.GetBackends()))
226227
for _, backend := range rule.GetBackends() {
227-
targetGroup, tgErr := l.tgBuilder.buildTargetGroup(stack, gw, lbCfg, ipAddressType, route, backend, securityGroups.backendSecurityGroupToken)
228+
arn, tgErr := l.tgBuilder.buildTargetGroup(stack, gw, lbCfg, ipAddressType, route, backend, securityGroups.backendSecurityGroupToken)
228229
if tgErr != nil {
229230
return nil, tgErr
230231
}
231232
// weighted target group support
232233
weight := int32(backend.Weight)
233234
targetGroupTuples = append(targetGroupTuples, elbv2model.TargetGroupTuple{
234-
TargetGroupARN: targetGroup.TargetGroupARN(),
235+
TargetGroupARN: arn,
235236
Weight: &weight,
236237
})
237238
}
@@ -393,14 +394,14 @@ func buildL7ListenerNoBackendActions() elbv2model.Action {
393394
return action503
394395
}
395396

396-
func buildL4ListenerDefaultActions(targetGroup *elbv2model.TargetGroup) []elbv2model.Action {
397+
func buildL4ListenerDefaultActions(arn core.StringToken) []elbv2model.Action {
397398
return []elbv2model.Action{
398399
{
399400
Type: elbv2model.ActionTypeForward,
400401
ForwardConfig: &elbv2model.ForwardActionConfig{
401402
TargetGroups: []elbv2model.TargetGroupTuple{
402403
{
403-
TargetGroupARN: targetGroup.TargetGroupARN(),
404+
TargetGroupARN: arn,
404405
},
405406
},
406407
},

0 commit comments

Comments
 (0)