@@ -3,6 +3,7 @@ package gateway
33import (
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 (
5657var _ 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.
110112type 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}
@@ -274,7 +277,6 @@ func (r *gatewayReconciler) reconcileHelper(ctx context.Context, req reconcile.R
274277 r .logger .Error (err , "Failed to process gateway delete" )
275278 return err
276279 }
277- r .serviceReferenceCounter .UpdateRelations ([]types.NamespacedName {}, k8s .NamespacedName (gw ), true )
278280 return nil
279281 }
280282 r .serviceReferenceCounter .UpdateRelations (getServicesFromRoutes (allRoutes ), k8s .NamespacedName (gw ), false )
@@ -310,6 +312,7 @@ func (r *gatewayReconciler) reconcileDelete(ctx context.Context, gw *gwv1.Gatewa
310312 if err := r .backendSGProvider .Release (ctx , networking .ResourceTypeGateway , []types.NamespacedName {k8s .NamespacedName (gw )}); err != nil {
311313 return err
312314 }
315+ r .serviceReferenceCounter .UpdateRelations ([]types.NamespacedName {}, k8s .NamespacedName (gw ), true )
313316 // remove gateway finalizer
314317 if err := r .finalizerManager .RemoveFinalizers (ctx , gw , r .finalizer ); err != nil {
315318 r .eventRecorder .Event (gw , corev1 .EventTypeWarning , k8s .GatewayEventReasonFailedRemoveFinalizer , fmt .Sprintf ("Failed remove gateway finalizer due to %v" , err ))
@@ -363,7 +366,7 @@ func (r *gatewayReconciler) deployModel(ctx context.Context, gw *gwv1.Gateway, s
363366}
364367
365368func (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
0 commit comments