Skip to content

Commit 7153796

Browse files
authored
Merge pull request #18190 from hakman/azure-https-kops-controller
azure: Move hardcoded task config to model using SDK types
2 parents 0187158 + 41a9777 commit 7153796

15 files changed

+121
-50
lines changed

pkg/model/azuremodel/api_loadbalancer.go

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121

2222
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
23+
network "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"
2324
"k8s.io/kops/pkg/apis/kops"
2425
"k8s.io/kops/pkg/wellknownports"
2526
"k8s.io/kops/pkg/wellknownservices"
@@ -55,21 +56,25 @@ func (b *APILoadBalancerModelBuilder) Build(c *fi.CloudupModelBuilderContext) er
5556
Lifecycle: b.Lifecycle,
5657
ResourceGroup: b.LinkToResourceGroup(),
5758
Tags: map[string]*string{},
59+
SKU: network.LoadBalancerSKUNameStandard,
5860
WellKnownServices: []wellknownservices.WellKnownService{wellknownservices.KubeAPIServer},
5961
}
6062

6163
// API server probe: TCP on 443
6264
lb.Probes = append(lb.Probes, azuretasks.LoadBalancerProbe{
6365
Name: fmt.Sprintf("Health-TCP-%d", wellknownports.KubeAPIServer),
64-
Protocol: "Tcp",
66+
Protocol: network.ProbeProtocolTCP,
6567
Port: wellknownports.KubeAPIServer,
6668
IntervalInSeconds: 15,
6769
NumberOfProbes: 4,
6870
})
6971
lb.Rules = append(lb.Rules, azuretasks.LoadBalancerRule{
70-
Name: fmt.Sprintf("TCP-%d", wellknownports.KubeAPIServer),
71-
Port: wellknownports.KubeAPIServer,
72-
ProbeName: fmt.Sprintf("Health-TCP-%d", wellknownports.KubeAPIServer),
72+
Name: fmt.Sprintf("TCP-%d", wellknownports.KubeAPIServer),
73+
Port: wellknownports.KubeAPIServer,
74+
ProbeName: fmt.Sprintf("Health-TCP-%d", wellknownports.KubeAPIServer),
75+
Protocol: network.TransportProtocolTCP,
76+
IdleTimeoutInMinutes: 4,
77+
LoadDistribution: network.LoadDistributionDefault,
7378
})
7479

7580
switch lbSpec.Type {
@@ -85,10 +90,13 @@ func (b *APILoadBalancerModelBuilder) Build(c *fi.CloudupModelBuilderContext) er
8590

8691
// Create Public IP Address for Public Loadbalacer
8792
p := &azuretasks.PublicIPAddress{
88-
Name: fi.PtrTo(b.NameForLoadBalancer()),
89-
Lifecycle: b.Lifecycle,
90-
ResourceGroup: b.LinkToResourceGroup(),
91-
Tags: map[string]*string{},
93+
Name: fi.PtrTo(b.NameForLoadBalancer()),
94+
Lifecycle: b.Lifecycle,
95+
ResourceGroup: b.LinkToResourceGroup(),
96+
IPVersion: network.IPVersionIPv4,
97+
AllocationMethod: network.IPAllocationMethodStatic,
98+
SKU: network.PublicIPAddressSKUNameStandard,
99+
Tags: map[string]*string{},
92100
}
93101
c.AddTask(p)
94102
lb.PublicIPAddress = p
@@ -102,16 +110,19 @@ func (b *APILoadBalancerModelBuilder) Build(c *fi.CloudupModelBuilderContext) er
102110
// kops-controller probe: HTTPS on 3988 with /healthz
103111
lb.Probes = append(lb.Probes, azuretasks.LoadBalancerProbe{
104112
Name: fmt.Sprintf("Health-HTTPS-%d", wellknownports.KopsControllerPort),
105-
Protocol: "Https",
113+
Protocol: network.ProbeProtocolHTTPS,
106114
Port: wellknownports.KopsControllerPort,
107115
RequestPath: fi.PtrTo("/healthz"),
108116
IntervalInSeconds: 15,
109117
NumberOfProbes: 4,
110118
})
111119
lb.Rules = append(lb.Rules, azuretasks.LoadBalancerRule{
112-
Name: fmt.Sprintf("TCP-%d", wellknownports.KopsControllerPort),
113-
Port: wellknownports.KopsControllerPort,
114-
ProbeName: fmt.Sprintf("Health-HTTPS-%d", wellknownports.KopsControllerPort),
120+
Name: fmt.Sprintf("TCP-%d", wellknownports.KopsControllerPort),
121+
Port: wellknownports.KopsControllerPort,
122+
ProbeName: fmt.Sprintf("Health-HTTPS-%d", wellknownports.KopsControllerPort),
123+
Protocol: network.TransportProtocolTCP,
124+
IdleTimeoutInMinutes: 4,
125+
LoadDistribution: network.LoadDistributionDefault,
115126
})
116127
}
117128

pkg/model/azuremodel/network.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,17 +281,21 @@ func (b *NetworkModelBuilder) Build(c *fi.CloudupModelBuilderContext) error {
281281
c.AddTask(nsgTask)
282282

283283
ngwPipTask := &azuretasks.PublicIPAddress{
284-
Name: fi.PtrTo(b.NameForVirtualNetwork()),
285-
Lifecycle: b.Lifecycle,
286-
ResourceGroup: b.LinkToResourceGroup(),
287-
Tags: map[string]*string{},
284+
Name: fi.PtrTo(b.NameForVirtualNetwork()),
285+
Lifecycle: b.Lifecycle,
286+
ResourceGroup: b.LinkToResourceGroup(),
287+
IPVersion: network.IPVersionIPv4,
288+
AllocationMethod: network.IPAllocationMethodStatic,
289+
SKU: network.PublicIPAddressSKUNameStandard,
290+
Tags: map[string]*string{},
288291
}
289292
c.AddTask(ngwPipTask)
290293
ngwTask := &azuretasks.NatGateway{
291294
Name: fi.PtrTo(b.NameForVirtualNetwork()),
292295
Lifecycle: b.Lifecycle,
293296
PublicIPAddresses: []*azuretasks.PublicIPAddress{ngwPipTask},
294297
ResourceGroup: b.LinkToResourceGroup(),
298+
SKU: network.NatGatewaySKUNameStandard,
295299
Tags: map[string]*string{},
296300
}
297301
c.AddTask(ngwTask)

upup/pkg/fi/cloudup/azuretasks/disk_terraform.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package azuretasks
1919
import (
2020
"fmt"
2121

22+
compute "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
2223
"k8s.io/kops/upup/pkg/fi"
2324
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
2425
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
@@ -40,7 +41,7 @@ func (*Disk) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *Disk)
4041
return fmt.Errorf("expected at most one zone for disk %q, got %d", fi.ValueOf(e.Name), len(e.Zones))
4142
}
4243

43-
createOption := "Empty"
44+
createOption := string(compute.DiskCreateOptionEmpty)
4445
tf := &terraformAzureManagedDisk{
4546
Name: e.Name,
4647
Location: fi.PtrTo(t.Cloud.Region()),

upup/pkg/fi/cloudup/azuretasks/loadbalancer.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ import (
3333
type LoadBalancerProbe struct {
3434
// Name is the probe name, e.g. "Health-HTTPS-3988".
3535
Name string
36-
// Protocol is the probe protocol: "Tcp", "Http", or "Https".
37-
Protocol string
36+
// Protocol is the probe protocol, e.g. network.ProbeProtocolTCP.
37+
Protocol network.ProbeProtocol
3838
// Port is the port to probe.
3939
Port int32
4040
// RequestPath is the path for HTTP/HTTPS probes (nil for TCP).
@@ -59,6 +59,14 @@ type LoadBalancerRule struct {
5959
Port int32
6060
// ProbeName references the probe by name.
6161
ProbeName string
62+
// Protocol is the transport protocol, e.g. network.TransportProtocolTCP.
63+
Protocol network.TransportProtocol
64+
// IdleTimeoutInMinutes is the idle timeout for the rule.
65+
IdleTimeoutInMinutes int32
66+
// EnableFloatingIP enables Direct Server Return.
67+
EnableFloatingIP bool
68+
// LoadDistribution is the load distribution policy.
69+
LoadDistribution network.LoadDistribution
6270
}
6371

6472
var _ fi.CloudupHasDependencies = (*LoadBalancerRule)(nil)
@@ -83,6 +91,9 @@ type LoadBalancer struct {
8391

8492
Tags map[string]*string
8593

94+
// SKU is the load balancer SKU, e.g. network.LoadBalancerSKUNameStandard.
95+
SKU network.LoadBalancerSKUName
96+
8697
// WellKnownServices indicates which services are supported by this resource.
8798
// This field is internal and is not rendered to the cloud.
8899
WellKnownServices []wellknownservices.WellKnownService
@@ -179,6 +190,9 @@ func (lb *LoadBalancer) Find(c *fi.CloudupContext) (*LoadBalancer, error) {
179190
External: to.Ptr(feConfig.Properties.PublicIPAddress != nil),
180191
Tags: found.Tags,
181192
}
193+
if found.SKU != nil {
194+
actual.SKU = fi.ValueOf(found.SKU.Name)
195+
}
182196
if subnet != nil {
183197
actual.Subnet = &Subnet{
184198
Name: subnet.Name,
@@ -196,7 +210,7 @@ func (lb *LoadBalancer) Find(c *fi.CloudupContext) (*LoadBalancer, error) {
196210
}
197211
p := LoadBalancerProbe{
198212
Name: fi.ValueOf(probe.Name),
199-
Protocol: string(fi.ValueOf(probe.Properties.Protocol)),
213+
Protocol: fi.ValueOf(probe.Properties.Protocol),
200214
Port: fi.ValueOf(probe.Properties.Port),
201215
IntervalInSeconds: fi.ValueOf(probe.Properties.IntervalInSeconds),
202216
NumberOfProbes: fi.ValueOf(probe.Properties.NumberOfProbes),
@@ -212,8 +226,12 @@ func (lb *LoadBalancer) Find(c *fi.CloudupContext) (*LoadBalancer, error) {
212226
continue
213227
}
214228
r := LoadBalancerRule{
215-
Name: fi.ValueOf(rule.Name),
216-
Port: fi.ValueOf(rule.Properties.FrontendPort),
229+
Name: fi.ValueOf(rule.Name),
230+
Port: fi.ValueOf(rule.Properties.FrontendPort),
231+
Protocol: fi.ValueOf(rule.Properties.Protocol),
232+
IdleTimeoutInMinutes: fi.ValueOf(rule.Properties.IdleTimeoutInMinutes),
233+
EnableFloatingIP: fi.ValueOf(rule.Properties.EnableFloatingIP),
234+
LoadDistribution: fi.ValueOf(rule.Properties.LoadDistribution),
217235
}
218236
if rule.Properties.Probe != nil && rule.Properties.Probe.ID != nil {
219237
// Extract probe name from the full resource ID
@@ -277,7 +295,7 @@ func (*LoadBalancer) RenderAzure(t *azure.AzureAPITarget, a, e, changes *LoadBal
277295
lb := network.LoadBalancer{
278296
Location: to.Ptr(t.Cloud.Region()),
279297
SKU: &network.LoadBalancerSKU{
280-
Name: to.Ptr(network.LoadBalancerSKUNameStandard),
298+
Name: to.Ptr(e.SKU),
281299
},
282300
Properties: &network.LoadBalancerPropertiesFormat{
283301
FrontendIPConfigurations: []*network.FrontendIPConfiguration{
@@ -299,7 +317,7 @@ func (*LoadBalancer) RenderAzure(t *azure.AzureAPITarget, a, e, changes *LoadBal
299317
p := &network.Probe{
300318
Name: to.Ptr(probe.Name),
301319
Properties: &network.ProbePropertiesFormat{
302-
Protocol: to.Ptr(network.ProbeProtocol(probe.Protocol)),
320+
Protocol: to.Ptr(probe.Protocol),
303321
Port: to.Ptr(probe.Port),
304322
IntervalInSeconds: to.Ptr(probe.IntervalInSeconds),
305323
NumberOfProbes: to.Ptr(probe.NumberOfProbes),
@@ -315,12 +333,12 @@ func (*LoadBalancer) RenderAzure(t *azure.AzureAPITarget, a, e, changes *LoadBal
315333
lb.Properties.LoadBalancingRules = append(lb.Properties.LoadBalancingRules, &network.LoadBalancingRule{
316334
Name: to.Ptr(rule.Name),
317335
Properties: &network.LoadBalancingRulePropertiesFormat{
318-
Protocol: to.Ptr(network.TransportProtocolTCP),
336+
Protocol: to.Ptr(rule.Protocol),
319337
FrontendPort: to.Ptr(rule.Port),
320338
BackendPort: to.Ptr(rule.Port),
321-
IdleTimeoutInMinutes: to.Ptr[int32](4),
322-
EnableFloatingIP: to.Ptr(false),
323-
LoadDistribution: to.Ptr(network.LoadDistributionDefault),
339+
IdleTimeoutInMinutes: to.Ptr(rule.IdleTimeoutInMinutes),
340+
EnableFloatingIP: to.Ptr(rule.EnableFloatingIP),
341+
LoadDistribution: to.Ptr(rule.LoadDistribution),
324342
FrontendIPConfiguration: &network.SubResource{
325343
ID: to.Ptr(fmt.Sprintf("/%s/loadbalancers/%s/frontendIPConfigurations/%s", idPrefix, *e.Name, "LoadBalancerFrontEnd")),
326344
},

upup/pkg/fi/cloudup/azuretasks/loadbalancer_terraform.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package azuretasks
1919
import (
2020
"fmt"
2121

22+
network "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"
2223
"k8s.io/kops/upup/pkg/fi"
2324
"k8s.io/kops/upup/pkg/fi/cloudup/terraform"
2425
"k8s.io/kops/upup/pkg/fi/cloudup/terraformWriter"
@@ -75,7 +76,7 @@ type terraformAzureLoadBalancerRule struct {
7576
}
7677

7778
func (*LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *LoadBalancer) error {
78-
sku := "Standard"
79+
sku := string(e.SKU)
7980
tf := &terraformAzureLoadBalancer{
8081
Name: e.Name,
8182
Location: fi.PtrTo(t.Cloud.Region()),
@@ -90,7 +91,7 @@ func (*LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
9091
if fi.ValueOf(e.External) {
9192
frontend.PublicIPAddressID = e.PublicIPAddress.terraformID()
9293
} else {
93-
allocationMethod := "Dynamic"
94+
allocationMethod := string(network.IPAllocationMethodDynamic)
9495
frontend.PrivateIPAllocationMethod = &allocationMethod
9596
subnetID, err := e.Subnet.terraformID(t)
9697
if err != nil {
@@ -117,7 +118,7 @@ func (*LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
117118
if err := t.RenderResource("azurerm_lb_probe", probeResourceName, &terraformAzureLoadBalancerProbe{
118119
Name: fi.PtrTo(probe.Name),
119120
LoadBalancerID: e.terraformID(),
120-
Protocol: fi.PtrTo(probe.Protocol),
121+
Protocol: fi.PtrTo(string(probe.Protocol)),
121122
Port: fi.PtrTo(probe.Port),
122123
RequestPath: probe.RequestPath,
123124
IntervalInSeconds: fi.PtrTo(probe.IntervalInSeconds),
@@ -130,8 +131,8 @@ func (*LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
130131
for _, rule := range e.Rules {
131132
ruleResourceName := fmt.Sprintf("%s-%s", fi.ValueOf(e.Name), rule.Name)
132133
probeResourceName := fmt.Sprintf("%s-%s", fi.ValueOf(e.Name), rule.ProbeName)
133-
ruleProtocol := "Tcp"
134-
loadDistribution := "Default"
134+
ruleProtocol := string(rule.Protocol)
135+
loadDistribution := string(rule.LoadDistribution)
135136
if err := t.RenderResource("azurerm_lb_rule", ruleResourceName, &terraformAzureLoadBalancerRule{
136137
Name: fi.PtrTo(rule.Name),
137138
LoadBalancerID: e.terraformID(),
@@ -141,8 +142,8 @@ func (*LoadBalancer) RenderTerraform(t *terraform.TerraformTarget, a, e, changes
141142
FrontendIPConfigurationName: fi.PtrTo(terraformAzureLoadBalancerFrontendName),
142143
BackendAddressPoolIDs: []*terraformWriter.Literal{e.terraformBackendAddressPoolID()},
143144
ProbeID: terraformWriter.LiteralProperty("azurerm_lb_probe", probeResourceName, "id"),
144-
IdleTimeoutInMinutes: fi.PtrTo[int32](4),
145-
FloatingIPEnabled: fi.PtrTo(false),
145+
IdleTimeoutInMinutes: fi.PtrTo(rule.IdleTimeoutInMinutes),
146+
FloatingIPEnabled: fi.PtrTo(rule.EnableFloatingIP),
146147
LoadDistribution: &loadDistribution,
147148
}); err != nil {
148149
return err

upup/pkg/fi/cloudup/azuretasks/loadbalancer_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ func TestLoadBalancerFind(t *testing.T) {
113113
// Create a Loadbalancer.
114114
loadBalancerParameters := network.LoadBalancer{
115115
Location: to.Ptr("eastus"),
116+
SKU: &network.LoadBalancerSKU{
117+
Name: to.Ptr(network.LoadBalancerSKUNameStandard),
118+
},
116119
Properties: &network.LoadBalancerPropertiesFormat{
117120
FrontendIPConfigurations: []*network.FrontendIPConfiguration{
118121
{

upup/pkg/fi/cloudup/azuretasks/natgateway.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ type NatGateway struct {
3636
PublicIPAddresses []*PublicIPAddress
3737
ResourceGroup *ResourceGroup
3838

39+
// SKU is the NAT gateway SKU, e.g. network.NatGatewaySKUNameStandard.
40+
SKU network.NatGatewaySKUName
41+
3942
Tags map[string]*string
4043
}
4144

@@ -84,14 +87,18 @@ func (ngw *NatGateway) Find(c *fi.CloudupContext) (*NatGateway, error) {
8487
}
8588
}
8689

87-
return &NatGateway{
90+
actual := &NatGateway{
8891
Name: ngw.Name,
8992
Lifecycle: ngw.Lifecycle,
9093
ResourceGroup: &ResourceGroup{Name: ngw.ResourceGroup.Name},
9194
ID: found.ID,
9295
PublicIPAddresses: pips,
9396
Tags: found.Tags,
94-
}, nil
97+
}
98+
if found.SKU != nil {
99+
actual.SKU = fi.ValueOf(found.SKU.Name)
100+
}
101+
return actual, nil
95102
}
96103

97104
func (ngw *NatGateway) Normalize(c *fi.CloudupContext) error {
@@ -134,7 +141,7 @@ func (*NatGateway) RenderAzure(t *azure.AzureAPITarget, a, e, changes *NatGatewa
134141
Name: to.Ptr(*e.Name),
135142
Properties: &network.NatGatewayPropertiesFormat{},
136143
SKU: &network.NatGatewaySKU{
137-
Name: to.Ptr(network.NatGatewaySKUNameStandard),
144+
Name: to.Ptr(e.SKU),
138145
},
139146
Tags: e.Tags,
140147
}

upup/pkg/fi/cloudup/azuretasks/natgateway_terraform.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type terraformAzureNatGatewayPublicIPAssociation struct {
3838
}
3939

4040
func (*NatGateway) RenderTerraform(t *terraform.TerraformTarget, a, e, changes *NatGateway) error {
41-
skuName := "Standard"
41+
skuName := string(e.SKU)
4242
tf := &terraformAzureNatGateway{
4343
Name: e.Name,
4444
Location: fi.PtrTo(t.Cloud.Region()),

upup/pkg/fi/cloudup/azuretasks/networksecuritygroup.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ func (nsg *NetworkSecurityGroup) Find(c *fi.CloudupContext) (*NetworkSecurityGro
8686
},
8787
ID: found.ID,
8888
Tags: found.Tags,
89+
// ApplicationSecurityGroups is for dependency ordering only and is not rendered to the cloud.
90+
ApplicationSecurityGroups: nsg.ApplicationSecurityGroups,
8991
}
9092
for _, rule := range found.Properties.SecurityRules {
9193
nsr := &NetworkSecurityRule{

0 commit comments

Comments
 (0)