@@ -40,7 +40,8 @@ type ResourceManager interface {
40
40
// NewDefaultResourceManager constructs new defaultResourceManager.
41
41
func NewDefaultResourceManager (k8sClient client.Client , elbv2Client services.ELBV2 , ec2Client services.EC2 ,
42
42
podInfoRepo k8s.PodInfoRepo , sgManager networking.SecurityGroupManager , sgReconciler networking.SecurityGroupReconciler ,
43
- vpcID string , clusterName string , eventRecorder record.EventRecorder , logger logr.Logger , useEndpointSlices bool , disabledRestrictedSGRulesFlag bool , vpcInfoProvider networking.VPCInfoProvider ) * defaultResourceManager {
43
+ vpcID string , clusterName string , eventRecorder record.EventRecorder , logger logr.Logger , useEndpointSlices bool ,
44
+ disabledRestrictedSGRulesFlag bool , vpcInfoProvider networking.VPCInfoProvider ) * defaultResourceManager {
44
45
targetsManager := NewCachedTargetsManager (elbv2Client , logger )
45
46
endpointResolver := backend .NewDefaultEndpointResolver (k8sClient , podInfoRepo , logger )
46
47
@@ -58,6 +59,7 @@ func NewDefaultResourceManager(k8sClient client.Client, elbv2Client services.ELB
58
59
logger : logger ,
59
60
vpcID : vpcID ,
60
61
vpcInfoProvider : vpcInfoProvider ,
62
+ podInfoRepo : podInfoRepo ,
61
63
62
64
targetHealthRequeueDuration : defaultTargetHealthRequeueDuration ,
63
65
enableEndpointSlices : useEndpointSlices ,
@@ -75,6 +77,7 @@ type defaultResourceManager struct {
75
77
eventRecorder record.EventRecorder
76
78
logger logr.Logger
77
79
vpcInfoProvider networking.VPCInfoProvider
80
+ podInfoRepo k8s.PodInfoRepo
78
81
vpcID string
79
82
80
83
targetHealthRequeueDuration time.Duration
@@ -334,58 +337,26 @@ func (m *defaultResourceManager) updateTargetHealthPodConditionForPod(ctx contex
334
337
// updatePodAsHealthyForDeletedTGB updates pod's targetHealth condition as healthy when deleting a TGB
335
338
// if the pod has readiness Gate.
336
339
func (m * defaultResourceManager ) updatePodAsHealthyForDeletedTGB (ctx context.Context , tgb * elbv2api.TargetGroupBinding ) error {
337
- svcKey := buildServiceReferenceKey (tgb , tgb .Spec .ServiceRef )
338
340
targetHealthCondType := BuildTargetHealthPodConditionType (tgb )
339
- resolveOpts := []backend.EndpointResolveOption {
340
- backend .WithPodReadinessGate (targetHealthCondType ),
341
- }
342
-
343
- var endpoints []backend.PodEndpoint
344
- var err error
345
341
346
- // Decide whether to use Endpoints or EndpointSlices based on config flag
347
- if m .enableEndpointSlices {
348
- endpoints , _ , err = m .endpointResolver .ResolvePodEndpointsFromSlices (ctx , svcKey , tgb .Spec .ServiceRef .Port , resolveOpts ... )
349
- } else {
350
- endpoints , _ , err = m .endpointResolver .ResolvePodEndpoints (ctx , svcKey , tgb .Spec .ServiceRef .Port , resolveOpts ... )
351
- }
352
- if err != nil {
353
- if errors .Is (err , backend .ErrNotFound ) {
354
- m .eventRecorder .Event (tgb , corev1 .EventTypeWarning , k8s .TargetGroupBindingEventReasonBackendNotFound , err .Error ())
355
- return m .Cleanup (ctx , tgb )
342
+ allPodKeys := m .podInfoRepo .ListKeys (ctx )
343
+ for _ , podKey := range allPodKeys {
344
+ pod , exists , err := m .podInfoRepo .Get (ctx , podKey )
345
+ if err != nil {
346
+ return err
356
347
}
357
- return err
358
- }
359
-
360
- tgARN := tgb .Spec .TargetGroupARN
361
- targets , err := m .targetsManager .ListTargets (ctx , tgARN )
362
- if err != nil {
363
- return err
364
- }
365
- notDrainingTargets , _ := partitionTargetsByDrainingStatus (targets )
366
- matchedEndpointAndTargets , unmatchedEndpointAndTargets , _ := matchPodEndpointWithTargets (endpoints , notDrainingTargets )
367
-
368
- var podsToUpdate []k8s.PodInfo
369
- for _ , endpointAndTarget := range matchedEndpointAndTargets {
370
- pod := endpointAndTarget .endpoint .Pod
371
- if pod .HasAnyOfReadinessGates ([]corev1.PodConditionType {targetHealthCondType }) {
372
- podsToUpdate = append (podsToUpdate , pod )
348
+ if ! exists {
349
+ return errors .New ("couldn't find podInfo for ready endpoint" )
373
350
}
374
- }
375
- for _ , endpoint := range unmatchedEndpointAndTargets {
376
- pod := endpoint .Pod
377
351
if pod .HasAnyOfReadinessGates ([]corev1.PodConditionType {targetHealthCondType }) {
378
- podsToUpdate = append (podsToUpdate , pod )
379
- }
380
- }
381
- for _ , pod := range podsToUpdate {
382
- targetHealth := & elbv2sdk.TargetHealth {
383
- State : awssdk .String (elbv2sdk .TargetHealthStateEnumHealthy ),
384
- Description : awssdk .String ("Target Group Binding is deleted" ),
385
- }
386
- _ , err := m .updateTargetHealthPodConditionForPod (ctx , pod , targetHealth , targetHealthCondType )
387
- if err != nil {
388
- return err
352
+ targetHealth := & elbv2sdk.TargetHealth {
353
+ State : awssdk .String (elbv2sdk .TargetHealthStateEnumHealthy ),
354
+ Description : awssdk .String ("Target Group Binding is deleted" ),
355
+ }
356
+ _ , err := m .updateTargetHealthPodConditionForPod (ctx , pod , targetHealth , targetHealthCondType )
357
+ if err != nil {
358
+ return err
359
+ }
389
360
}
390
361
}
391
362
return nil
0 commit comments