Skip to content

Commit b3b085c

Browse files
committed
Add ability to disable creation of dns zone for unmanaged installs
Similar to managed installs, add ability to optionally create DNS zones for unmanged installs.
1 parent 2acf550 commit b3b085c

File tree

6 files changed

+177
-3
lines changed

6 files changed

+177
-3
lines changed

api/v1beta1/types_class.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,11 @@ type NetworkClassSpec struct {
459459
// +optional
460460
PrivateDNSZoneName string `json:"privateDNSZoneName,omitempty"`
461461

462+
// PrivateDNSZone enables private dns zone creation modes for a private cluster.
463+
// When unspecified, it defaults to PrivateDNSZoneModeSystem which creates a private DNS zone.
464+
// +optional
465+
PrivateDNSZone *string `json:"privateDNSZone,omitempty"`
466+
462467
// PrivateDNSZoneResourceGroup defines the resource group to be used for Azure Private DNS Zone.
463468
// If not specified, the resource group of the cluster will be used to create the Azure Private DNS Zone.
464469
// +optional

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 7 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

azure/scope/cluster.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ func (s *ClusterScope) VNetSpec() azure.ASOResourceSpecGetter[*asonetworkv1api20
559559

560560
// PrivateDNSSpec returns the private dns zone spec.
561561
func (s *ClusterScope) PrivateDNSSpec() (zoneSpec azure.ResourceSpecGetter, linkSpec, recordSpec []azure.ResourceSpecGetter) {
562-
if s.IsAPIServerPrivate() {
562+
if s.IsAPIServerPrivate() && s.PrivateDNSZoneMode() != infrav1.PrivateDNSZoneModeNone {
563563
resourceGroup := s.ResourceGroup()
564564
if s.AzureCluster.Spec.NetworkSpec.PrivateDNSZoneResourceGroup != "" {
565565
resourceGroup = s.AzureCluster.Spec.NetworkSpec.PrivateDNSZoneResourceGroup
@@ -1251,3 +1251,13 @@ func (s *ClusterScope) getLastAppliedSecurityRules(nsgName string) map[string]in
12511251
}
12521252
return lastAppliedSecurityRules
12531253
}
1254+
1255+
// PrivateDNSZoneMode returns the current Private DNS Zone mode.
1256+
// When unconfigured, the method returns the default.
1257+
// Returned value is used to determine if the Private DNS Zone should be created.
1258+
func (s *ClusterScope) PrivateDNSZoneMode() string {
1259+
if s.AzureCluster.Spec.NetworkSpec.PrivateDNSZone == nil {
1260+
return infrav1.PrivateDNSZoneModeSystem
1261+
}
1262+
return *s.AzureCluster.Spec.NetworkSpec.PrivateDNSZone
1263+
}

azure/scope/cluster_test.go

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,58 @@ func TestAPIServerHost(t *testing.T) {
216216
},
217217
want: "apiserver.example.private",
218218
},
219+
{
220+
name: "private apiserver without private dns zone",
221+
azureCluster: infrav1.AzureCluster{
222+
Spec: infrav1.AzureClusterSpec{
223+
AzureClusterClassSpec: infrav1.AzureClusterClassSpec{
224+
SubscriptionID: fakeSubscriptionID,
225+
IdentityRef: &corev1.ObjectReference{
226+
Kind: infrav1.AzureClusterIdentityKind,
227+
},
228+
},
229+
ControlPlaneEnabled: true,
230+
NetworkSpec: infrav1.NetworkSpec{
231+
NetworkClassSpec: infrav1.NetworkClassSpec{
232+
PrivateDNSZoneName: "",
233+
PrivateDNSZone: ptr.To(infrav1.PrivateDNSZoneModeNone),
234+
},
235+
APIServerLB: &infrav1.LoadBalancerSpec{
236+
LoadBalancerClassSpec: infrav1.LoadBalancerClassSpec{
237+
Type: infrav1.Internal,
238+
},
239+
},
240+
},
241+
},
242+
},
243+
want: "apiserver.my-cluster.capz.io",
244+
},
245+
{
246+
name: "private apiserver with private dns zone",
247+
azureCluster: infrav1.AzureCluster{
248+
Spec: infrav1.AzureClusterSpec{
249+
AzureClusterClassSpec: infrav1.AzureClusterClassSpec{
250+
SubscriptionID: fakeSubscriptionID,
251+
IdentityRef: &corev1.ObjectReference{
252+
Kind: infrav1.AzureClusterIdentityKind,
253+
},
254+
},
255+
ControlPlaneEnabled: true,
256+
NetworkSpec: infrav1.NetworkSpec{
257+
NetworkClassSpec: infrav1.NetworkClassSpec{
258+
PrivateDNSZoneName: "",
259+
PrivateDNSZone: ptr.To(infrav1.PrivateDNSZoneModeSystem),
260+
},
261+
APIServerLB: &infrav1.LoadBalancerSpec{
262+
LoadBalancerClassSpec: infrav1.LoadBalancerClassSpec{
263+
Type: infrav1.Internal,
264+
},
265+
},
266+
},
267+
},
268+
},
269+
want: "apiserver.my-cluster.capz.io",
270+
},
219271
}
220272

221273
for _, tc := range tests {
@@ -4137,3 +4189,95 @@ func TestAPIServerLBName(t *testing.T) {
41374189
})
41384190
}
41394191
}
4192+
4193+
func TestPrivateDNSSpec(t *testing.T) {
4194+
tests := []struct {
4195+
name string
4196+
clusterName string
4197+
azureClusterNetworkSpec infrav1.NetworkSpec
4198+
expectPrivateDNSSpec bool
4199+
}{
4200+
{
4201+
name: "Default PrivateDNSZone (PrivateDNSZoneModeSystem)",
4202+
clusterName: "private-default",
4203+
azureClusterNetworkSpec: infrav1.NetworkSpec{
4204+
NetworkClassSpec: infrav1.NetworkClassSpec{
4205+
PrivateDNSZoneName: "fake-privateDNSZoneName",
4206+
},
4207+
APIServerLB: &infrav1.LoadBalancerSpec{
4208+
FrontendIPs: []infrav1.FrontendIP{
4209+
{
4210+
Name: "api-server-lb-internal-ip",
4211+
FrontendIPClass: infrav1.FrontendIPClass{
4212+
PrivateIPAddress: infrav1.DefaultInternalLBIPAddress,
4213+
},
4214+
},
4215+
},
4216+
LoadBalancerClassSpec: infrav1.LoadBalancerClassSpec{
4217+
Type: infrav1.Internal,
4218+
},
4219+
},
4220+
},
4221+
expectPrivateDNSSpec: true,
4222+
},
4223+
{
4224+
name: "PrivateDNSZone set to PrivateDNSZoneModeNone",
4225+
clusterName: "private-none",
4226+
azureClusterNetworkSpec: infrav1.NetworkSpec{
4227+
NetworkClassSpec: infrav1.NetworkClassSpec{
4228+
PrivateDNSZoneName: "fake-privateDNSZoneName",
4229+
PrivateDNSZone: ptr.To(infrav1.PrivateDNSZoneModeNone),
4230+
},
4231+
APIServerLB: &infrav1.LoadBalancerSpec{
4232+
LoadBalancerClassSpec: infrav1.LoadBalancerClassSpec{
4233+
Type: infrav1.Internal,
4234+
},
4235+
},
4236+
},
4237+
expectPrivateDNSSpec: false,
4238+
},
4239+
{
4240+
name: "Public LB",
4241+
clusterName: "public-none",
4242+
azureClusterNetworkSpec: infrav1.NetworkSpec{
4243+
NetworkClassSpec: infrav1.NetworkClassSpec{
4244+
PrivateDNSZoneName: "fake-privateDNSZoneName",
4245+
PrivateDNSZone: ptr.To(infrav1.PrivateDNSZoneModeNone),
4246+
},
4247+
APIServerLB: &infrav1.LoadBalancerSpec{
4248+
LoadBalancerClassSpec: infrav1.LoadBalancerClassSpec{
4249+
Type: infrav1.Public,
4250+
},
4251+
},
4252+
},
4253+
expectPrivateDNSSpec: false,
4254+
},
4255+
}
4256+
for _, tc := range tests {
4257+
t.Run(tc.name, func(t *testing.T) {
4258+
g := NewWithT(t)
4259+
4260+
cluster := &clusterv1.Cluster{
4261+
ObjectMeta: metav1.ObjectMeta{
4262+
Name: tc.clusterName,
4263+
Namespace: "default",
4264+
},
4265+
}
4266+
azureCluster := &infrav1.AzureCluster{
4267+
ObjectMeta: metav1.ObjectMeta{
4268+
Name: tc.clusterName,
4269+
},
4270+
Spec: infrav1.AzureClusterSpec{
4271+
NetworkSpec: tc.azureClusterNetworkSpec,
4272+
},
4273+
}
4274+
4275+
clusterScope := &ClusterScope{
4276+
Cluster: cluster,
4277+
AzureCluster: azureCluster,
4278+
}
4279+
zoneSpec, _, _ := clusterScope.PrivateDNSSpec()
4280+
g.Expect(zoneSpec != nil).Should(Equal(tc.expectPrivateDNSSpec))
4281+
})
4282+
}
4283+
}

config/crd/bases/infrastructure.cluster.x-k8s.io_azureclusters.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,11 @@ spec:
926926
description: LBType defines an Azure load balancer Type.
927927
type: string
928928
type: object
929+
privateDNSZone:
930+
description: |-
931+
PrivateDNSZone enables private dns zone creation modes for a private cluster.
932+
When unspecified, it defaults to PrivateDNSZoneModeSystem which creates a private DNS zone.
933+
type: string
929934
privateDNSZoneName:
930935
description: PrivateDNSZoneName defines the zone name for the
931936
Azure Private DNS.

config/crd/bases/infrastructure.cluster.x-k8s.io_azureclustertemplates.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,11 @@ spec:
593593
Type.
594594
type: string
595595
type: object
596+
privateDNSZone:
597+
description: |-
598+
PrivateDNSZone enables private dns zone creation modes for a private cluster.
599+
When unspecified, it defaults to PrivateDNSZoneModeSystem which creates a private DNS zone.
600+
type: string
596601
privateDNSZoneName:
597602
description: PrivateDNSZoneName defines the zone name
598603
for the Azure Private DNS.

0 commit comments

Comments
 (0)