Skip to content

Commit 230f829

Browse files
committed
Skip listener attributes reconcile for Isolated regions
1 parent 0700e85 commit 230f829

File tree

2 files changed

+49
-18
lines changed

2 files changed

+49
-18
lines changed

pkg/deploy/elbv2/listener_manager.go

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package elbv2
33
import (
44
"context"
55
"reflect"
6+
"strings"
67
"time"
78

89
awssdk "github.com/aws/aws-sdk-go-v2/aws"
@@ -29,6 +30,12 @@ var PROTOCOLS_SUPPORTING_LISTENER_ATTRIBUTES = map[elbv2model.Protocol]bool{
2930
elbv2model.ProtocolTLS: false,
3031
}
3132

33+
var isolatedRegions = map[string]bool{
34+
"us-iso-east-1": true,
35+
"us-iso-west-1": true,
36+
"us-isob-east-1": true,
37+
}
38+
3239
// ListenerManager is responsible for create/update/delete Listener resources.
3340
type ListenerManager interface {
3441
Create(ctx context.Context, resLS *elbv2model.Listener) (elbv2model.ListenerStatus, error)
@@ -101,9 +108,12 @@ func (m *defaultListenerManager) Create(ctx context.Context, resLS *elbv2model.L
101108
}); err != nil {
102109
return elbv2model.ListenerStatus{}, errors.Wrap(err, "failed to update extra certificates on listener")
103110
}
104-
if areListenerAttributesSupported(resLS.Spec.Protocol) {
105-
if err := m.attributesReconciler.Reconcile(ctx, resLS, sdkLS); err != nil {
106-
return elbv2model.ListenerStatus{}, err
111+
listenerARN := awssdk.ToString(sdkLS.Listener.ListenerArn)
112+
if !isIsolatedRegion(getRegionFromARN(listenerARN)) {
113+
if areListenerAttributesSupported(resLS.Spec.Protocol) {
114+
if err := m.attributesReconciler.Reconcile(ctx, resLS, sdkLS); err != nil {
115+
return elbv2model.ListenerStatus{}, err
116+
}
107117
}
108118
}
109119
return buildResListenerStatus(sdkLS), nil
@@ -121,9 +131,12 @@ func (m *defaultListenerManager) Update(ctx context.Context, resLS *elbv2model.L
121131
if err := m.updateSDKListenerWithExtraCertificates(ctx, resLS, sdkLS, false); err != nil {
122132
return elbv2model.ListenerStatus{}, err
123133
}
124-
if areListenerAttributesSupported(resLS.Spec.Protocol) {
125-
if err := m.attributesReconciler.Reconcile(ctx, resLS, sdkLS); err != nil {
126-
return elbv2model.ListenerStatus{}, err
134+
listenerARN := awssdk.ToString(sdkLS.Listener.ListenerArn)
135+
if !isIsolatedRegion(getRegionFromARN(listenerARN)) {
136+
if areListenerAttributesSupported(resLS.Spec.Protocol) {
137+
if err := m.attributesReconciler.Reconcile(ctx, resLS, sdkLS); err != nil {
138+
return elbv2model.ListenerStatus{}, err
139+
}
127140
}
128141
}
129142
return buildResListenerStatus(sdkLS), nil
@@ -379,3 +392,18 @@ func areListenerAttributesSupported(protocol elbv2model.Protocol) bool {
379392
supported, exists := PROTOCOLS_SUPPORTING_LISTENER_ATTRIBUTES[protocol]
380393
return exists && supported
381394
}
395+
396+
func getRegionFromARN(arn string) string {
397+
if strings.HasPrefix(arn, "arn:") {
398+
arnElements := strings.Split(arn, ":")
399+
if len(arnElements) > 3 {
400+
return arnElements[3]
401+
}
402+
}
403+
return ""
404+
}
405+
406+
func isIsolatedRegion(region string) bool {
407+
_, exists := isolatedRegions[region]
408+
return exists
409+
}

test/e2e/service/nlb_instance_target_test.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -160,20 +160,23 @@ var _ = Describe("test k8s service reconciled by the aws load balancer controlle
160160
})
161161
Expect(err).NotTo(HaveOccurred())
162162
})
163-
By("modifying listener attributes", func() {
164-
err := stack.UpdateServiceAnnotations(ctx, tf, map[string]string{
165-
"service.beta.kubernetes.io/aws-load-balancer-listener-attributes.TCP-80": "tcp.idle_timeout.seconds=400",
166-
})
167-
Expect(err).NotTo(HaveOccurred())
163+
// remove this once listener attributes are available in ADC region
164+
if tf.Options.AWSRegion != "us-iso-east-1" && tf.Options.AWSRegion != "us-iso-west-1" && tf.Options.AWSRegion != "us-isob-east-1" {
165+
By("modifying listener attributes", func() {
166+
err := stack.UpdateServiceAnnotations(ctx, tf, map[string]string{
167+
"service.beta.kubernetes.io/aws-load-balancer-listener-attributes.TCP-80": "tcp.idle_timeout.seconds=400",
168+
})
169+
Expect(err).NotTo(HaveOccurred())
168170

169-
lsARN := getLoadBalancerListenerARN(ctx, tf, lbARN, "80")
171+
lsARN := getLoadBalancerListenerARN(ctx, tf, lbARN, "80")
170172

171-
Eventually(func() bool {
172-
return verifyListenerAttributes(ctx, tf, lsARN, map[string]string{
173-
"tcp.idle_timeout.seconds": "400",
174-
}) == nil
175-
}, utils.PollTimeoutShort, utils.PollIntervalMedium).Should(BeTrue())
176-
})
173+
Eventually(func() bool {
174+
return verifyListenerAttributes(ctx, tf, lsARN, map[string]string{
175+
"tcp.idle_timeout.seconds": "400",
176+
}) == nil
177+
}, utils.PollTimeoutShort, utils.PollIntervalMedium).Should(BeTrue())
178+
})
179+
}
177180
})
178181
It("should provision internal load-balancer resources", func() {
179182
By("deploying stack", func() {

0 commit comments

Comments
 (0)