Skip to content

Commit a0c1562

Browse files
authored
add ability for targetGroupBinding to change to nil networking (kubernetes-sigs#1510)
1 parent cdc8f71 commit a0c1562

File tree

6 files changed

+128
-50
lines changed

6 files changed

+128
-50
lines changed

controllers/elbv2/targetgroupbinding_controller.go

+17
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ package controllers
1818

1919
import (
2020
"context"
21+
"github.com/aws/aws-sdk-go/aws"
22+
"github.com/pkg/errors"
2123
corev1 "k8s.io/api/core/v1"
2224
"sigs.k8s.io/aws-load-balancer-controller/controllers/elbv2/eventhandlers"
2325
"sigs.k8s.io/aws-load-balancer-controller/pkg/config"
@@ -98,6 +100,9 @@ func (r *targetGroupBindingReconciler) reconcileTargetGroupBinding(ctx context.C
98100
if err := r.tgbResourceManager.Reconcile(ctx, tgb); err != nil {
99101
return err
100102
}
103+
if err := r.updateTargetGroupBindingStatus(ctx, tgb); err != nil {
104+
return err
105+
}
101106
return nil
102107
}
103108

@@ -113,6 +118,18 @@ func (r *targetGroupBindingReconciler) cleanupTargetGroupBinding(ctx context.Con
113118
return nil
114119
}
115120

121+
func (r *targetGroupBindingReconciler) updateTargetGroupBindingStatus(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
122+
if aws.Int64Value(tgb.Status.ObservedGeneration) == tgb.Generation {
123+
return nil
124+
}
125+
tgbOld := tgb.DeepCopy()
126+
tgb.Status.ObservedGeneration = aws.Int64(tgb.Generation)
127+
if err := r.k8sClient.Status().Patch(ctx, tgb, client.MergeFrom(tgbOld)); err != nil {
128+
return errors.Wrapf(err, "failed to update targetGroupBinding status: %v", k8s.NamespacedName(tgb))
129+
}
130+
return nil
131+
}
132+
116133
func (r *targetGroupBindingReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Manager) error {
117134
if err := r.setupIndexes(ctx, mgr.GetFieldIndexer()); err != nil {
118135
return err

go.mod

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ require (
1616
go.uber.org/zap v1.10.0
1717
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
1818
gomodules.xyz/jsonpatch/v2 v2.0.1
19-
k8s.io/api v0.18.4
20-
k8s.io/apimachinery v0.18.4
21-
k8s.io/client-go v0.18.4
22-
sigs.k8s.io/controller-runtime v0.6.1
19+
k8s.io/api v0.18.6
20+
k8s.io/apimachinery v0.18.6
21+
k8s.io/client-go v0.18.6
22+
sigs.k8s.io/controller-runtime v0.6.3
2323
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e // indirect
2424
)

go.sum

+16
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ github.com/aws/aws-sdk-go v1.33.14/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve
2929
github.com/aws/aws-sdk-go v1.35.4 h1:GG0sdhmzQSe4/UcF9iuQP9i+58bPRyU4OpujyzMlVjo=
3030
github.com/aws/aws-sdk-go v1.35.4/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48=
3131
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
32+
github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
3233
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
3334
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
3435
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
@@ -67,6 +68,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
6768
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
6869
github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
6970
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
71+
github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses=
72+
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
7073
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
7174
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
7275
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
@@ -452,15 +455,26 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh
452455
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
453456
k8s.io/api v0.18.4 h1:8x49nBRxuXGUlDlwlWd3RMY1SayZrzFfxea3UZSkFw4=
454457
k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4=
458+
k8s.io/api v0.18.6 h1:osqrAXbOQjkKIWDTjrqxWQ3w0GkKb1KA1XkUGHHYpeE=
459+
k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI=
455460
k8s.io/apiextensions-apiserver v0.18.4 h1:Y3HGERmS8t9u12YNUFoOISqefaoGRuTc43AYCLzWmWE=
456461
k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio=
462+
k8s.io/apiextensions-apiserver v0.18.6 h1:vDlk7cyFsDyfwn2rNAO2DbmUbvXy5yT5GE3rrqOzaMo=
463+
k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M=
457464
k8s.io/apimachinery v0.18.4 h1:ST2beySjhqwJoIFk6p7Hp5v5O0hYY6Gngq/gUYXTPIA=
458465
k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
466+
k8s.io/apimachinery v0.18.6 h1:RtFHnfGNfd1N0LeSrKCUznz5xtUP1elRGvHJbL3Ntag=
467+
k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko=
459468
k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8=
469+
k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg=
460470
k8s.io/client-go v0.18.4 h1:un55V1Q/B3JO3A76eS0kUSywgGK/WR3BQ8fHQjNa6Zc=
461471
k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g=
472+
k8s.io/client-go v0.18.6 h1:I+oWqJbibLSGsZj8Xs8F0aWVXJVIoUHWaaJV3kUN/Zw=
473+
k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q=
462474
k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
475+
k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c=
463476
k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk=
477+
k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14=
464478
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
465479
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
466480
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -477,6 +491,8 @@ k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
477491
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
478492
sigs.k8s.io/controller-runtime v0.6.1 h1:LcK2+nk0kmaOnKGN+vBcWHqY5WDJNJNB/c5pW+sU8fc=
479493
sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A=
494+
sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE=
495+
sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY=
480496
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
481497
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
482498
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=

pkg/deploy/elbv2/target_group_binding_manager.go

+74-28
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package elbv2
22

33
import (
44
"context"
5+
awssdk "github.com/aws/aws-sdk-go/aws"
56
"github.com/go-logr/logr"
67
"github.com/pkg/errors"
78
corev1 "k8s.io/api/core/v1"
9+
"k8s.io/apimachinery/pkg/api/equality"
810
apierrors "k8s.io/apimachinery/pkg/api/errors"
9-
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1012
"k8s.io/apimachinery/pkg/util/wait"
1113
elbv2api "sigs.k8s.io/aws-load-balancer-controller/apis/elbv2/v1beta1"
1214
"sigs.k8s.io/aws-load-balancer-controller/pkg/deploy/tracking"
@@ -17,6 +19,8 @@ import (
1719
)
1820

1921
const (
22+
defaultWaitTGBObservedPollInterval = 200 * time.Millisecond
23+
defaultWaitTGBObservedTimeout = 60 * time.Second
2024
defaultWaitTGBDeletionPollInterval = 200 * time.Millisecond
2125
defaultWaitTGBDeletionTimeout = 60 * time.Second
2226
)
@@ -37,78 +41,81 @@ func NewDefaultTargetGroupBindingManager(k8sClient client.Client, trackingProvid
3741
trackingProvider: trackingProvider,
3842
logger: logger,
3943

44+
waitTGBObservedPollInterval: defaultWaitTGBObservedPollInterval,
45+
waitTGBObservedTimout: defaultWaitTGBObservedTimeout,
4046
waitTGBDeletionPollInterval: defaultWaitTGBDeletionPollInterval,
4147
waitTGBDeletionTimeout: defaultWaitTGBDeletionTimeout,
4248
}
4349
}
4450

4551
var _ TargetGroupBindingManager = &defaultTargetGroupBindingManager{}
4652

53+
// default implementation for TargetGroupBindingManager.
4754
type defaultTargetGroupBindingManager struct {
4855
k8sClient client.Client
4956
trackingProvider tracking.Provider
5057
logger logr.Logger
5158

59+
waitTGBObservedPollInterval time.Duration
60+
waitTGBObservedTimout time.Duration
5261
waitTGBDeletionPollInterval time.Duration
5362
waitTGBDeletionTimeout time.Duration
5463
}
5564

5665
func (m *defaultTargetGroupBindingManager) Create(ctx context.Context, resTGB *elbv2model.TargetGroupBindingResource) (elbv2model.TargetGroupBindingResourceStatus, error) {
57-
tgARN, err := resTGB.Spec.Template.Spec.TargetGroupARN.Resolve(ctx)
66+
k8sTGBSpec, err := buildK8sTargetGroupBindingSpec(ctx, resTGB)
5867
if err != nil {
5968
return elbv2model.TargetGroupBindingResourceStatus{}, err
6069
}
61-
stackLabels := m.trackingProvider.StackLabels(resTGB.Stack())
62-
k8sTGBSpec := elbv2api.TargetGroupBindingSpec{
63-
TargetGroupARN: tgARN,
64-
TargetType: resTGB.Spec.Template.Spec.TargetType,
65-
ServiceRef: resTGB.Spec.Template.Spec.ServiceRef,
66-
}
67-
if resTGB.Spec.Template.Spec.Networking != nil {
68-
k8sTGBNetworking, err := buildK8sTargetGroupBindingNetworking(ctx, *resTGB.Spec.Template.Spec.Networking)
69-
if err != nil {
70-
return elbv2model.TargetGroupBindingResourceStatus{}, err
71-
}
72-
k8sTGBSpec.Networking = &k8sTGBNetworking
73-
}
7470

71+
stackLabels := m.trackingProvider.StackLabels(resTGB.Stack())
7572
k8sTGB := &elbv2api.TargetGroupBinding{
76-
ObjectMeta: v1.ObjectMeta{
73+
ObjectMeta: metav1.ObjectMeta{
7774
Namespace: resTGB.Spec.Template.Namespace,
7875
Name: resTGB.Spec.Template.Name,
7976
Labels: stackLabels,
8077
},
8178
Spec: k8sTGBSpec,
8279
}
80+
81+
m.logger.Info("creating targetGroupBinding",
82+
"stackID", resTGB.Stack().StackID(),
83+
"resourceID", resTGB.ID())
8384
if err := m.k8sClient.Create(ctx, k8sTGB); err != nil {
8485
return elbv2model.TargetGroupBindingResourceStatus{}, err
8586
}
87+
m.logger.Info("created targetGroupBinding",
88+
"stackID", resTGB.Stack().StackID(),
89+
"resourceID", resTGB.ID(),
90+
"targetGroupBinding", k8s.NamespacedName(k8sTGB))
8691
return buildResTargetGroupBindingStatus(k8sTGB), nil
8792
}
8893

8994
func (m *defaultTargetGroupBindingManager) Update(ctx context.Context, resTGB *elbv2model.TargetGroupBindingResource, k8sTGB *elbv2api.TargetGroupBinding) (elbv2model.TargetGroupBindingResourceStatus, error) {
90-
tgARN, err := resTGB.Spec.Template.Spec.TargetGroupARN.Resolve(ctx)
95+
k8sTGBSpec, err := buildK8sTargetGroupBindingSpec(ctx, resTGB)
9196
if err != nil {
9297
return elbv2model.TargetGroupBindingResourceStatus{}, err
9398
}
94-
k8sTGBSpec := elbv2api.TargetGroupBindingSpec{
95-
TargetGroupARN: tgARN,
96-
TargetType: resTGB.Spec.Template.Spec.TargetType,
97-
ServiceRef: resTGB.Spec.Template.Spec.ServiceRef,
98-
}
99-
if resTGB.Spec.Template.Spec.Networking != nil {
100-
k8sTGBNetworking, err := buildK8sTargetGroupBindingNetworking(ctx, *resTGB.Spec.Template.Spec.Networking)
101-
if err != nil {
102-
return elbv2model.TargetGroupBindingResourceStatus{}, err
103-
}
104-
k8sTGBSpec.Networking = &k8sTGBNetworking
99+
if equality.Semantic.DeepEqual(k8sTGB.Spec, k8sTGBSpec) {
100+
return buildResTargetGroupBindingStatus(k8sTGB), nil
105101
}
106102

107103
oldK8sTGB := k8sTGB.DeepCopy()
108104
k8sTGB.Spec = k8sTGBSpec
105+
m.logger.Info("modifying targetGroupBinding",
106+
"stackID", resTGB.Stack().StackID(),
107+
"resourceID", resTGB.ID(),
108+
"targetGroupBinding", k8s.NamespacedName(k8sTGB))
109109
if err := m.k8sClient.Patch(ctx, k8sTGB, client.MergeFrom(oldK8sTGB)); err != nil {
110110
return elbv2model.TargetGroupBindingResourceStatus{}, err
111111
}
112+
if err := m.waitUntilTargetGroupBindingObserved(ctx, k8sTGB); err != nil {
113+
return elbv2model.TargetGroupBindingResourceStatus{}, err
114+
}
115+
m.logger.Info("modified targetGroupBinding",
116+
"stackID", resTGB.Stack().StackID(),
117+
"resourceID", resTGB.ID(),
118+
"targetGroupBinding", k8s.NamespacedName(k8sTGB))
112119
return buildResTargetGroupBindingStatus(k8sTGB), nil
113120
}
114121

@@ -126,6 +133,23 @@ func (m *defaultTargetGroupBindingManager) Delete(ctx context.Context, tgb *elbv
126133
return nil
127134
}
128135

136+
func (m *defaultTargetGroupBindingManager) waitUntilTargetGroupBindingObserved(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
137+
ctx, cancel := context.WithTimeout(ctx, m.waitTGBObservedTimout)
138+
defer cancel()
139+
140+
observedTGB := &elbv2api.TargetGroupBinding{}
141+
return wait.PollImmediateUntil(m.waitTGBObservedPollInterval, func() (bool, error) {
142+
if err := m.k8sClient.Get(ctx, k8s.NamespacedName(tgb), observedTGB); err != nil {
143+
return false, err
144+
}
145+
if awssdk.Int64Value(observedTGB.Status.ObservedGeneration) >= tgb.Generation {
146+
return true, nil
147+
}
148+
149+
return false, nil
150+
}, ctx.Done())
151+
}
152+
129153
func (m *defaultTargetGroupBindingManager) waitUntilTargetGroupBindingDeleted(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
130154
ctx, cancel := context.WithTimeout(ctx, m.waitTGBDeletionTimeout)
131155
defer cancel()
@@ -142,6 +166,28 @@ func (m *defaultTargetGroupBindingManager) waitUntilTargetGroupBindingDeleted(ct
142166
}, ctx.Done())
143167
}
144168

169+
func buildK8sTargetGroupBindingSpec(ctx context.Context, resTGB *elbv2model.TargetGroupBindingResource) (elbv2api.TargetGroupBindingSpec, error) {
170+
tgARN, err := resTGB.Spec.Template.Spec.TargetGroupARN.Resolve(ctx)
171+
if err != nil {
172+
return elbv2api.TargetGroupBindingSpec{}, err
173+
}
174+
175+
k8sTGBSpec := elbv2api.TargetGroupBindingSpec{
176+
TargetGroupARN: tgARN,
177+
TargetType: resTGB.Spec.Template.Spec.TargetType,
178+
ServiceRef: resTGB.Spec.Template.Spec.ServiceRef,
179+
}
180+
181+
if resTGB.Spec.Template.Spec.Networking != nil {
182+
k8sTGBNetworking, err := buildK8sTargetGroupBindingNetworking(ctx, *resTGB.Spec.Template.Spec.Networking)
183+
if err != nil {
184+
return elbv2api.TargetGroupBindingSpec{}, err
185+
}
186+
k8sTGBSpec.Networking = &k8sTGBNetworking
187+
}
188+
return k8sTGBSpec, nil
189+
}
190+
145191
func buildK8sTargetGroupBindingNetworking(ctx context.Context, resTGBNetworking elbv2model.TargetGroupBindingNetworking) (elbv2api.TargetGroupBindingNetworking, error) {
146192
k8sIngress := make([]elbv2api.NetworkingIngressRule, 0, len(resTGBNetworking.Ingress))
147193
for _, rule := range resTGBNetworking.Ingress {

pkg/targetgroupbinding/networking_manager.go

+14-17
Original file line numberDiff line numberDiff line change
@@ -90,33 +90,30 @@ type defaultNetworkingManager struct {
9090
}
9191

9292
func (m *defaultNetworkingManager) ReconcileForPodEndpoints(ctx context.Context, tgb *elbv2api.TargetGroupBinding, endpoints []backend.PodEndpoint) error {
93-
if tgb.Spec.Networking == nil {
94-
return nil
95-
}
96-
97-
ingressPermissionsPerSG, err := m.computeIngressPermissionsPerSGWithPodEndpoints(ctx, *tgb.Spec.Networking, endpoints)
98-
if err != nil {
99-
return err
93+
var ingressPermissionsPerSG map[string][]networking.IPPermissionInfo
94+
if tgb.Spec.Networking != nil {
95+
var err error
96+
ingressPermissionsPerSG, err = m.computeIngressPermissionsPerSGWithPodEndpoints(ctx, *tgb.Spec.Networking, endpoints)
97+
if err != nil {
98+
return err
99+
}
100100
}
101101
return m.reconcileWithIngressPermissionsPerSG(ctx, tgb, ingressPermissionsPerSG)
102102
}
103103

104104
func (m *defaultNetworkingManager) ReconcileForNodePortEndpoints(ctx context.Context, tgb *elbv2api.TargetGroupBinding, endpoints []backend.NodePortEndpoint) error {
105-
if tgb.Spec.Networking == nil {
106-
return nil
107-
}
108-
109-
ingressPermissionsPerSG, err := m.computeIngressPermissionsPerSGWithNodePortEndpoints(ctx, *tgb.Spec.Networking, endpoints)
110-
if err != nil {
111-
return err
105+
var ingressPermissionsPerSG map[string][]networking.IPPermissionInfo
106+
if tgb.Spec.Networking != nil {
107+
var err error
108+
ingressPermissionsPerSG, err = m.computeIngressPermissionsPerSGWithNodePortEndpoints(ctx, *tgb.Spec.Networking, endpoints)
109+
if err != nil {
110+
return err
111+
}
112112
}
113113
return m.reconcileWithIngressPermissionsPerSG(ctx, tgb, ingressPermissionsPerSG)
114114
}
115115

116116
func (m *defaultNetworkingManager) Cleanup(ctx context.Context, tgb *elbv2api.TargetGroupBinding) error {
117-
if tgb.Spec.Networking == nil {
118-
return nil
119-
}
120117
return m.reconcileWithIngressPermissionsPerSG(ctx, tgb, nil)
121118
}
122119

pkg/targetgroupbinding/resource_manager.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ func (m *defaultResourceManager) reconcileWithInstanceTargetType(ctx context.Con
133133
if err != nil {
134134
return err
135135
}
136-
_, unmatchedEndpoints, unmatchedTargets := matchNodePortEndpointWithTargets(endpoints, targets)
136+
notDrainingTargets, drainingTargets := partitionTargetsByDrainingStatus(targets)
137+
_, unmatchedEndpoints, unmatchedTargets := matchNodePortEndpointWithTargets(endpoints, notDrainingTargets)
137138

138139
if err := m.networkingManager.ReconcileForNodePortEndpoints(ctx, tgb, endpoints); err != nil {
139140
return err
@@ -144,6 +145,7 @@ func (m *defaultResourceManager) reconcileWithInstanceTargetType(ctx context.Con
144145
if err := m.registerNodePortEndpoints(ctx, tgARN, unmatchedEndpoints); err != nil {
145146
return err
146147
}
148+
_ = drainingTargets
147149
return nil
148150
}
149151

0 commit comments

Comments
 (0)