Skip to content

Commit 2b446e2

Browse files
Merge pull request openshift#8126 from jhixson74/master_capi_ignite_control_plane
CORS-3269: Azure ignite control plane machines
2 parents a1f57d0 + 5733fb9 commit 2b446e2

File tree

8 files changed

+129
-19
lines changed

8 files changed

+129
-19
lines changed

data/data/azurestack/vnet/nsg.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ resource "azurestack_subnet_network_security_group_association" "worker" {
3030

3131
subnet_id = azurestack_subnet.worker_subnet[0].id
3232
network_security_group_id = azurestack_network_security_group.cluster.id
33-
}
33+
}

pkg/asset/machines/azure/azuremachines.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,18 @@ func GenerateMachines(platform *azure.Platform, pool *types.MachinePool, userDat
179179
},
180180
},
181181
Spec: capz.AzureMachineSpec{
182-
VMSize: mpool.InstanceType,
183-
Image: image,
184-
FailureDomain: ptr.To(mpool.Zones[0]),
185-
OSDisk: osDisk,
186-
AdditionalTags: tags,
187-
AllocatePublicIP: true,
182+
VMSize: mpool.InstanceType,
183+
Image: image,
184+
FailureDomain: ptr.To(mpool.Zones[0]),
185+
OSDisk: osDisk,
186+
AdditionalTags: tags,
187+
// Do not allocate a public IP since it isn't
188+
// accessible as we are using an outbound LB for the
189+
// control plane. This is temporary until we have a
190+
// workaround for accessing SSH (Most likely port
191+
// forwarding SSH off the LB until the bootstrap node
192+
// is destroyed).
193+
AllocatePublicIP: false,
188194
AdditionalCapabilities: additionalCapabilities,
189195
SecurityProfile: securityProfile,
190196
},

pkg/asset/machines/azure/machines.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,15 +298,16 @@ func ConfigMasters(machines []machineapi.Machine, controlPlane *machinev1.Contro
298298
}
299299

300300
func getNetworkInfo(platform *azure.Platform, clusterID, role string) (string, string, string, error) {
301+
networkResourceGroupName := platform.NetworkResourceGroupName
301302
if platform.VirtualNetwork == "" {
302-
return platform.ClusterResourceGroupName(clusterID), fmt.Sprintf("%s-vnet", clusterID), fmt.Sprintf("%s-%s-subnet", clusterID, role), nil
303+
networkResourceGroupName = platform.ClusterResourceGroupName(clusterID)
303304
}
304305

305306
switch role {
306307
case "worker":
307-
return platform.NetworkResourceGroupName, platform.VirtualNetwork, platform.ComputeSubnet, nil
308+
return networkResourceGroupName, platform.VirtualNetworkName(clusterID), platform.ComputeSubnetName(clusterID), nil
308309
case "master":
309-
return platform.NetworkResourceGroupName, platform.VirtualNetwork, platform.ControlPlaneSubnet, nil
310+
return networkResourceGroupName, platform.VirtualNetworkName(clusterID), platform.ControlPlaneSubnetName(clusterID), nil
310311
default:
311312
return "", "", "", fmt.Errorf("unrecognized machine role %s", role)
312313
}

pkg/asset/manifests/azure/cluster.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ package azure
33
import (
44
"fmt"
55

6+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
67
"github.com/pkg/errors"
78
corev1 "k8s.io/api/core/v1"
89
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/utils/ptr"
911
capz "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
1012

1113
"github.com/openshift/installer/pkg/asset"
@@ -38,6 +40,29 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
3840
})
3941

4042
resourceGroup := installConfig.Config.Platform.Azure.ClusterResourceGroupName(clusterID.InfraID)
43+
controlPlaneSubnet := installConfig.Config.Platform.Azure.ControlPlaneSubnetName(clusterID.InfraID)
44+
networkSecurityGroup := installConfig.Config.Platform.Azure.NetworkSecurityGroupName(clusterID.InfraID)
45+
computeSubnet := installConfig.Config.Platform.Azure.ComputeSubnetName(clusterID.InfraID)
46+
47+
securityGroup := capz.SecurityGroup{
48+
Name: networkSecurityGroup,
49+
SecurityGroupClass: capz.SecurityGroupClass{
50+
SecurityRules: []capz.SecurityRule{
51+
{
52+
Name: "apiserver_in",
53+
Protocol: capz.SecurityGroupProtocolTCP,
54+
Direction: capz.SecurityRuleDirectionInbound,
55+
Priority: 101,
56+
SourcePorts: ptr.To("*"),
57+
DestinationPorts: ptr.To("6443"),
58+
Source: ptr.To("*"),
59+
Destination: ptr.To("*"),
60+
Action: capz.SecurityRuleActionAllow,
61+
},
62+
},
63+
},
64+
}
65+
4166
azureCluster := &capz.AzureCluster{
4267
ObjectMeta: metav1.ObjectMeta{
4368
Name: clusterID.InfraID,
@@ -77,24 +102,29 @@ func GenerateClusterAssets(installConfig *installconfig.InstallConfig, clusterID
77102
Type: capz.Internal,
78103
},
79104
},
105+
ControlPlaneOutboundLB: &capz.LoadBalancerSpec{
106+
FrontendIPsCount: to.Ptr(int32(1)),
107+
},
80108
Subnets: capz.Subnets{
81109
{
82110
SubnetClassSpec: capz.SubnetClassSpec{
83-
Name: "control-plane-subnet",
111+
Name: controlPlaneSubnet,
84112
Role: capz.SubnetControlPlane,
85113
CIDRBlocks: []string{
86114
subnets[0].String(),
87115
},
88116
},
117+
SecurityGroup: securityGroup,
89118
},
90119
{
91120
SubnetClassSpec: capz.SubnetClassSpec{
92-
Name: "worker-subnet",
121+
Name: computeSubnet,
93122
Role: capz.SubnetNode,
94123
CIDRBlocks: []string{
95124
subnets[1].String(),
96125
},
97126
},
127+
SecurityGroup: securityGroup,
98128
},
99129
},
100130
},

pkg/asset/manifests/cloudproviderconfig.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (cpc *CloudProviderConfig) Generate(dependencies asset.Parents) error {
124124
return errors.Wrap(err, "could not get azure session")
125125
}
126126

127-
nsg := fmt.Sprintf("%s-nsg", clusterID.InfraID)
127+
nsg := installConfig.Config.Azure.NetworkSecurityGroupName(clusterID.InfraID)
128128
nrg := installConfig.Config.Azure.ClusterResourceGroupName(clusterID.InfraID)
129129
if installConfig.Config.Azure.NetworkResourceGroupName != "" {
130130
nrg = installConfig.Config.Azure.NetworkResourceGroupName

pkg/infrastructure/azure/azure.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,15 @@ func (p *Provider) InfraReady(ctx context.Context, in clusterapi.InfraReadyInput
168168

169169
// Create user assigned identity
170170
userAssignedIdentityName := fmt.Sprintf("%s-identity", in.InfraID)
171-
armmsiClientFactory, err := armmsi.NewClientFactory(subscriptionID, tokenCredential, nil)
171+
armmsiClientFactory, err := armmsi.NewClientFactory(
172+
subscriptionID,
173+
tokenCredential,
174+
&arm.ClientOptions{
175+
ClientOptions: policy.ClientOptions{
176+
Cloud: cloudConfiguration,
177+
},
178+
},
179+
)
172180
if err != nil {
173181
return fmt.Errorf("failed to create armmsi client: %w", err)
174182
}
@@ -328,7 +336,13 @@ func (p *Provider) InfraReady(ctx context.Context, in clusterapi.InfraReadyInput
328336
return err
329337
}
330338

331-
networkClientFactory, err := armnetwork.NewClientFactory(subscriptionID, session.TokenCreds, nil)
339+
networkClientFactory, err := armnetwork.NewClientFactory(subscriptionID, session.TokenCreds,
340+
&arm.ClientOptions{
341+
ClientOptions: policy.ClientOptions{
342+
Cloud: cloudConfiguration,
343+
},
344+
},
345+
)
332346
if err != nil {
333347
return fmt.Errorf("error creating network client factory: %w", err)
334348
}
@@ -393,13 +407,26 @@ func (p *Provider) PostProvision(ctx context.Context, in clusterapi.PostProvisio
393407
return fmt.Errorf("error retrieving Azure session: %w", err)
394408
}
395409
subscriptionID := ssn.Credentials.SubscriptionID
410+
cloudConfiguration := ssn.CloudConfig
396411

397412
if in.InstallConfig.Config.Publish == types.ExternalPublishingStrategy {
398-
vmClient, err := armcompute.NewVirtualMachinesClient(subscriptionID, ssn.TokenCreds, nil)
413+
vmClient, err := armcompute.NewVirtualMachinesClient(subscriptionID, ssn.TokenCreds,
414+
&arm.ClientOptions{
415+
ClientOptions: policy.ClientOptions{
416+
Cloud: cloudConfiguration,
417+
},
418+
},
419+
)
399420
if err != nil {
400421
return fmt.Errorf("error creating vm client: %w", err)
401422
}
402-
nicClient, err := armnetwork.NewInterfacesClient(ssn.Credentials.SubscriptionID, ssn.TokenCreds, nil)
423+
nicClient, err := armnetwork.NewInterfacesClient(ssn.Credentials.SubscriptionID, ssn.TokenCreds,
424+
&arm.ClientOptions{
425+
ClientOptions: policy.ClientOptions{
426+
Cloud: cloudConfiguration,
427+
},
428+
},
429+
)
403430
if err != nil {
404431
return fmt.Errorf("error creating nic client: %w", err)
405432
}

pkg/infrastructure/azure/dns.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66

7+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
8+
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
79
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
810
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns"
911
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns"
@@ -85,15 +87,29 @@ func createDNSEntries(ctx context.Context, in clusterapi.InfraReadyInput, extLBF
8587
return fmt.Errorf("failed to create session: %w", err)
8688
}
8789
subscriptionID := session.Credentials.SubscriptionID
90+
cloudConfiguration := session.CloudConfig
91+
8892
tokenCreds, err := azidentity.NewClientSecretCredential(session.Credentials.TenantID, session.Credentials.ClientID, session.Credentials.ClientSecret, nil)
8993
if err != nil {
9094
return fmt.Errorf("failed to create identity: %w", err)
9195
}
92-
recordSetClient, err := armdns.NewRecordSetsClient(subscriptionID, tokenCreds, nil)
96+
recordSetClient, err := armdns.NewRecordSetsClient(subscriptionID, tokenCreds,
97+
&arm.ClientOptions{
98+
ClientOptions: policy.ClientOptions{
99+
Cloud: cloudConfiguration,
100+
},
101+
},
102+
)
93103
if err != nil {
94104
return fmt.Errorf("failed to create public record client: %w", err)
95105
}
96-
privateRecordSetClient, err := armprivatedns.NewRecordSetsClient(subscriptionID, tokenCreds, nil)
106+
privateRecordSetClient, err := armprivatedns.NewRecordSetsClient(subscriptionID, tokenCreds,
107+
&arm.ClientOptions{
108+
ClientOptions: policy.ClientOptions{
109+
Cloud: cloudConfiguration,
110+
},
111+
},
112+
)
97113
if err != nil {
98114
return fmt.Errorf("failed to create private record client: %w", err)
99115
}

pkg/types/azure/platform.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,36 @@ func (p *Platform) ClusterResourceGroupName(infraID string) string {
163163
return fmt.Sprintf("%s-rg", infraID)
164164
}
165165

166+
// VirtualNetworkName returns the name of the virtual network for the cluster.
167+
func (p *Platform) VirtualNetworkName(infraID string) string {
168+
if len(p.VirtualNetwork) > 0 {
169+
return p.VirtualNetwork
170+
}
171+
return fmt.Sprintf("%s-vnet", infraID)
172+
}
173+
174+
// ControlPlaneSubnetName returns the name of the control plane subnet for the
175+
// cluster.
176+
func (p *Platform) ControlPlaneSubnetName(infraID string) string {
177+
if len(p.ControlPlaneSubnet) > 0 {
178+
return p.ControlPlaneSubnet
179+
}
180+
return fmt.Sprintf("%s-master-subnet", infraID)
181+
}
182+
183+
// ComputeSubnetName returns the name of the compute subnet for the cluster.
184+
func (p *Platform) ComputeSubnetName(infraID string) string {
185+
if len(p.ComputeSubnet) > 0 {
186+
return p.ComputeSubnet
187+
}
188+
return fmt.Sprintf("%s-worker-subnet", infraID)
189+
}
190+
191+
// NetworkSecurityGroupName returns the name of the network security group.
192+
func (p *Platform) NetworkSecurityGroupName(infraID string) string {
193+
return fmt.Sprintf("%s-nsg", infraID)
194+
}
195+
166196
// IsARO returns true if ARO-only modifications are enabled
167197
func (p *Platform) IsARO() bool {
168198
return aro

0 commit comments

Comments
 (0)