Skip to content

Commit 61842d1

Browse files
authored
Merge pull request #16299 from justinsb/split_out_loadbalancerlistener
Refactor: Split out NLB Listener into its own task
2 parents a024d38 + c9b9a47 commit 61842d1

File tree

7 files changed

+399
-227
lines changed

7 files changed

+399
-227
lines changed

cloudmock/aws/mockelbv2/listeners.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -21,39 +21,41 @@ import (
2121
"strings"
2222

2323
"github.com/aws/aws-sdk-go/aws"
24+
"github.com/aws/aws-sdk-go/aws/request"
2425
"github.com/aws/aws-sdk-go/service/elbv2"
2526
"k8s.io/klog/v2"
2627
)
2728

28-
func (m *MockELBV2) DescribeListeners(request *elbv2.DescribeListenersInput) (*elbv2.DescribeListenersOutput, error) {
29+
func (m *MockELBV2) DescribeListenersPagesWithContext(ctx aws.Context, request *elbv2.DescribeListenersInput, callback func(*elbv2.DescribeListenersOutput, bool) bool, options ...request.Option) error {
2930
m.mutex.Lock()
3031
defer m.mutex.Unlock()
3132

32-
klog.Infof("DescribeListeners v2 %v", request)
33+
klog.Infof("DescribeListenersPagesWithContext v2 %v", request)
3334

34-
resp := &elbv2.DescribeListenersOutput{
35+
page := &elbv2.DescribeListenersOutput{
3536
Listeners: make([]*elbv2.Listener, 0),
3637
}
3738
for _, l := range m.Listeners {
3839
listener := l.description
3940
if aws.StringValue(request.LoadBalancerArn) == aws.StringValue(listener.LoadBalancerArn) {
40-
resp.Listeners = append(resp.Listeners, &listener)
41+
page.Listeners = append(page.Listeners, &listener)
4142
} else {
4243
for _, reqARN := range request.ListenerArns {
4344
if aws.StringValue(reqARN) == aws.StringValue(listener.ListenerArn) {
44-
resp.Listeners = append(resp.Listeners, &listener)
45+
page.Listeners = append(page.Listeners, &listener)
4546
}
4647
}
4748
}
4849
}
49-
return resp, nil
50+
callback(page, true)
51+
return nil
5052
}
5153

52-
func (m *MockELBV2) CreateListener(request *elbv2.CreateListenerInput) (*elbv2.CreateListenerOutput, error) {
54+
func (m *MockELBV2) CreateListenerWithContext(ctx aws.Context, request *elbv2.CreateListenerInput, opts ...request.Option) (*elbv2.CreateListenerOutput, error) {
5355
m.mutex.Lock()
5456
defer m.mutex.Unlock()
5557

56-
klog.Infof("CreateListener v2 %v", request)
58+
klog.Infof("CreateListenerWithContext v2 %v", request)
5759

5860
l := elbv2.Listener{
5961
DefaultActions: request.DefaultActions,
@@ -96,11 +98,11 @@ func (m *MockELBV2) CreateListener(request *elbv2.CreateListenerInput) (*elbv2.C
9698
return &elbv2.CreateListenerOutput{Listeners: []*elbv2.Listener{&l}}, nil
9799
}
98100

99-
func (m *MockELBV2) DeleteListener(request *elbv2.DeleteListenerInput) (*elbv2.DeleteListenerOutput, error) {
101+
func (m *MockELBV2) DeleteListenerWithContext(ctx aws.Context, request *elbv2.DeleteListenerInput, opts ...request.Option) (*elbv2.DeleteListenerOutput, error) {
100102
m.mutex.Lock()
101103
defer m.mutex.Unlock()
102104

103-
klog.Infof("DeleteListener v2 %v", request)
105+
klog.Infof("DeleteListenerWithContext v2 %v", request)
104106

105107
lARN := aws.StringValue(request.ListenerArn)
106108
if _, ok := m.Listeners[lARN]; !ok {

pkg/model/awsmodel/api_loadbalancer.go

+42-22
Original file line numberDiff line numberDiff line change
@@ -134,31 +134,49 @@ func (b *APILoadBalancerBuilder) Build(c *fi.CloudupModelBuilderContext) error {
134134
listeners := map[string]*awstasks.ClassicLoadBalancerListener{
135135
"443": {InstancePort: 443},
136136
}
137+
var nlbListeners []*awstasks.NetworkLoadBalancerListener
138+
139+
if lbSpec.SSLCertificate == "" {
140+
listener443 := &awstasks.NetworkLoadBalancerListener{
141+
Name: fi.PtrTo(b.NLBListenerName("api", 443)),
142+
Lifecycle: b.Lifecycle,
143+
NetworkLoadBalancer: b.LinkToNLB("api"),
144+
Port: 443,
145+
TargetGroup: b.LinkToTargetGroup("tcp"),
146+
}
147+
nlbListeners = append(nlbListeners, listener443)
148+
} else {
149+
listener8443 := &awstasks.NetworkLoadBalancerListener{
150+
Name: fi.PtrTo(b.NLBListenerName("api", 8443)),
151+
Lifecycle: b.Lifecycle,
152+
NetworkLoadBalancer: b.LinkToNLB("api"),
153+
Port: 8443,
154+
TargetGroup: b.LinkToTargetGroup("tcp"),
155+
}
156+
nlbListeners = append(nlbListeners, listener8443)
137157

138-
nlbListeners := []*awstasks.NetworkLoadBalancerListener{
139-
{
140-
Port: 443,
141-
TargetGroupName: b.NLBTargetGroupName("tcp"),
142-
},
143-
}
144-
if b.Cluster.UsesNoneDNS() {
145-
nlbListeners = append(nlbListeners, &awstasks.NetworkLoadBalancerListener{
146-
Port: wellknownports.KopsControllerPort,
147-
TargetGroupName: b.NLBTargetGroupName("kops-controller"),
148-
})
149-
}
150-
151-
if lbSpec.SSLCertificate != "" {
152158
listeners["443"].SSLCertificateID = lbSpec.SSLCertificate
153-
nlbListeners[0].Port = 8443
154-
155-
nlbListener := &awstasks.NetworkLoadBalancerListener{
156-
Port: 443,
157-
TargetGroupName: b.NLBTargetGroupName("tls"),
158-
SSLCertificateID: lbSpec.SSLCertificate,
159+
listener443 := &awstasks.NetworkLoadBalancerListener{
160+
Name: fi.PtrTo(b.NLBListenerName("api", 443)),
161+
Lifecycle: b.Lifecycle,
162+
NetworkLoadBalancer: b.LinkToNLB("api"),
163+
Port: 443,
164+
TargetGroup: b.LinkToTargetGroup("tls"),
165+
SSLCertificateID: lbSpec.SSLCertificate,
159166
}
160167
if lbSpec.SSLPolicy != nil {
161-
nlbListener.SSLPolicy = *lbSpec.SSLPolicy
168+
listener443.SSLPolicy = *lbSpec.SSLPolicy
169+
}
170+
nlbListeners = append(nlbListeners, listener443)
171+
}
172+
173+
if b.Cluster.UsesNoneDNS() {
174+
nlbListener := &awstasks.NetworkLoadBalancerListener{
175+
Name: fi.PtrTo(b.NLBListenerName("api", wellknownports.KopsControllerPort)),
176+
Lifecycle: b.Lifecycle,
177+
NetworkLoadBalancer: b.LinkToNLB("api"),
178+
Port: wellknownports.KopsControllerPort,
179+
TargetGroup: b.LinkToTargetGroup("kops-controller"),
162180
}
163181
nlbListeners = append(nlbListeners, nlbListener)
164182
}
@@ -184,7 +202,6 @@ func (b *APILoadBalancerBuilder) Build(c *fi.CloudupModelBuilderContext) error {
184202
b.LinkToELBSecurityGroup("api"),
185203
},
186204
SubnetMappings: nlbSubnetMappings,
187-
Listeners: nlbListeners,
188205
TargetGroups: make([]*awstasks.TargetGroup, 0),
189206

190207
Tags: tags,
@@ -359,6 +376,9 @@ func (b *APILoadBalancerBuilder) Build(c *fi.CloudupModelBuilderContext) error {
359376
nlb.TargetGroups = append(nlb.TargetGroups, secondaryTG)
360377
}
361378
sort.Stable(awstasks.OrderTargetGroupsByName(nlb.TargetGroups))
379+
for _, nlbListener := range nlbListeners {
380+
c.AddTask(nlbListener)
381+
}
362382
c.AddTask(nlb)
363383
}
364384

pkg/model/awsmodel/bastion.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,15 @@ func (b *BastionModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
328328
// Override the returned name to be the expected ELB name
329329
tags["Name"] = "bastion." + b.ClusterName()
330330

331-
nlbListeners := []*awstasks.NetworkLoadBalancerListener{
332-
{
333-
Port: 22,
334-
TargetGroupName: b.NLBTargetGroupName("bastion"),
335-
},
331+
nlbListener := &awstasks.NetworkLoadBalancerListener{
332+
Name: fi.PtrTo(b.NLBListenerName("bastion", 22)),
333+
Lifecycle: b.Lifecycle,
334+
NetworkLoadBalancer: b.LinkToNLB("bastion"),
335+
Port: 22,
336+
TargetGroup: b.LinkToTargetGroup("bastion"),
336337
}
338+
c.AddTask(nlbListener)
339+
337340
nlb = &awstasks.NetworkLoadBalancer{
338341
Name: fi.PtrTo(b.NLBName("bastion")),
339342
Lifecycle: b.Lifecycle,
@@ -344,7 +347,6 @@ func (b *BastionModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
344347
SecurityGroups: []*awstasks.SecurityGroup{
345348
b.LinkToELBSecurityGroup("bastion"),
346349
},
347-
Listeners: nlbListeners,
348350
TargetGroups: make([]*awstasks.TargetGroup, 0),
349351

350352
Tags: tags,

pkg/model/names.go

+6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package model
1919
import (
2020
"fmt"
2121
"regexp"
22+
"strconv"
2223
"strings"
2324

2425
"k8s.io/klog/v2"
@@ -115,6 +116,11 @@ func (b *KopsModelContext) LinkToNLB(prefix string) *awstasks.NetworkLoadBalance
115116
return &awstasks.NetworkLoadBalancer{Name: &name}
116117
}
117118

119+
func (b *KopsModelContext) NLBListenerName(loadBalancerPrefix string, port int) string {
120+
name := b.NLBName(loadBalancerPrefix)
121+
return name + "-" + strconv.Itoa(port)
122+
}
123+
118124
func (b *KopsModelContext) LinkToTargetGroup(prefix string) *awstasks.TargetGroup {
119125
name := b.NLBTargetGroupName(prefix)
120126
return &awstasks.TargetGroup{Name: &name}

0 commit comments

Comments
 (0)