Skip to content

Commit c0e51aa

Browse files
authored
Merge pull request #5566 from nanikjava/f-fix-4963
Use configured DNS domain in bootstrapper kubeadm templates
2 parents db4ef8c + ccd8a10 commit c0e51aa

File tree

9 files changed

+330
-2
lines changed

9 files changed

+330
-2
lines changed

pkg/minikube/bootstrapper/kubeadm/kubeadm.go

+2
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,7 @@ func generateConfig(k8s config.KubernetesConfig, r cruntime.Manager) ([]byte, er
698698
KubernetesVersion string
699699
EtcdDataDir string
700700
NodeName string
701+
DNSDomain string
701702
CRISocket string
702703
ImageRepository string
703704
ExtraArgs []ComponentExtraArgs
@@ -717,6 +718,7 @@ func generateConfig(k8s config.KubernetesConfig, r cruntime.Manager) ([]byte, er
717718
ExtraArgs: extraComponentConfig,
718719
FeatureArgs: kubeadmFeatureArgs,
719720
NoTaintMaster: false, // That does not work with k8s 1.12+
721+
DNSDomain: k8s.DNSDomain,
720722
}
721723

722724
if k8s.ServiceCIDR != "" {

pkg/minikube/bootstrapper/kubeadm/kubeadm_test.go

+61
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,67 @@ func recentReleases() ([]string, error) {
235235
return versions, nil
236236
}
237237

238+
/**
239+
Need a separate test function to test the DNS server IP
240+
as v1.11 yaml file is very different compared to v1.12+.
241+
This test case has only 1 thing to test and that is the
242+
nnetworking/dnsDomain value
243+
*/
244+
func TestGenerateConfigDNS(t *testing.T) {
245+
versions := []string{"v1.16", "v1.15", "v1.14", "v1.13", "v1.12"}
246+
tests := []struct {
247+
name string
248+
runtime string
249+
shouldErr bool
250+
cfg config.KubernetesConfig
251+
}{
252+
{"dns", "docker", false, config.KubernetesConfig{DNSDomain: "1.1.1.1"}},
253+
}
254+
for _, version := range versions {
255+
for _, tc := range tests {
256+
runtime, err := cruntime.New(cruntime.Config{Type: tc.runtime})
257+
if err != nil {
258+
t.Fatalf("runtime: %v", err)
259+
}
260+
tname := tc.name + "_" + version
261+
t.Run(tname, func(t *testing.T) {
262+
cfg := tc.cfg
263+
cfg.NodeIP = "1.1.1.1"
264+
cfg.NodeName = "mk"
265+
cfg.KubernetesVersion = version + ".0"
266+
267+
got, err := generateConfig(cfg, runtime)
268+
if err != nil && !tc.shouldErr {
269+
t.Fatalf("got unexpected error generating config: %v", err)
270+
}
271+
if err == nil && tc.shouldErr {
272+
t.Fatalf("expected error but got none, config: %s", got)
273+
}
274+
if tc.shouldErr {
275+
return
276+
}
277+
expected, err := ioutil.ReadFile(fmt.Sprintf("testdata/%s/%s.yaml", version, tc.name))
278+
if err != nil {
279+
t.Fatalf("unable to read testdata: %v", err)
280+
}
281+
diff, err := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{
282+
A: difflib.SplitLines(string(expected)),
283+
B: difflib.SplitLines(string(got)),
284+
FromFile: "Expected",
285+
ToFile: "Got",
286+
Context: 1,
287+
})
288+
if err != nil {
289+
t.Fatalf("diff error: %v", err)
290+
}
291+
if diff != "" {
292+
t.Errorf("unexpected diff:\n%s\n===== [RAW OUTPUT] =====\n%s", diff, got)
293+
}
294+
})
295+
}
296+
}
297+
}
298+
238299
func TestGenerateConfig(t *testing.T) {
239300
extraOpts := getExtraOpts()
240301
extraOptsPodCidr := getExtraOptsPodCidr()

pkg/minikube/bootstrapper/kubeadm/templates.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ etcd:
8484
dataDir: {{.EtcdDataDir}}
8585
kubernetesVersion: {{.KubernetesVersion}}
8686
networking:
87-
dnsDomain: cluster.local
87+
dnsDomain: {{if .DNSDomain}}{{.DNSDomain}}{{else}}cluster.local{{end}}
8888
podSubnet: {{if .PodSubnet}}{{.PodSubnet}}{{else}}""{{end}}
8989
serviceSubnet: {{.ServiceCIDR}}
9090
---
@@ -138,7 +138,7 @@ etcd:
138138
dataDir: {{.EtcdDataDir}}
139139
kubernetesVersion: {{.KubernetesVersion}}
140140
networking:
141-
dnsDomain: cluster.local
141+
dnsDomain: {{if .DNSDomain}}{{.DNSDomain}}{{else}}cluster.local{{end}}
142142
podSubnet: ""
143143
serviceSubnet: {{.ServiceCIDR}}
144144
---
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
apiVersion: kubeadm.k8s.io/v1alpha3
2+
kind: InitConfiguration
3+
apiEndpoint:
4+
advertiseAddress: 1.1.1.1
5+
bindPort: 8443
6+
bootstrapTokens:
7+
- groups:
8+
- system:bootstrappers:kubeadm:default-node-token
9+
ttl: 24h0m0s
10+
usages:
11+
- signing
12+
- authentication
13+
nodeRegistration:
14+
criSocket: /var/run/dockershim.sock
15+
name: mk
16+
taints: []
17+
---
18+
apiVersion: kubeadm.k8s.io/v1alpha3
19+
kind: ClusterConfiguration
20+
apiServerExtraArgs:
21+
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
22+
certificatesDir: /var/lib/minikube/certs
23+
clusterName: kubernetes
24+
controlPlaneEndpoint: localhost:8443
25+
etcd:
26+
local:
27+
dataDir: /var/lib/minikube/etcd
28+
kubernetesVersion: v1.12.0
29+
networking:
30+
dnsDomain: 1.1.1.1
31+
podSubnet: ""
32+
serviceSubnet: 10.96.0.0/12
33+
---
34+
apiVersion: kubelet.config.k8s.io/v1beta1
35+
kind: KubeletConfiguration
36+
evictionHard:
37+
nodefs.available: "0%"
38+
nodefs.inodesFree: "0%"
39+
imagefs.available: "0%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
apiVersion: kubeadm.k8s.io/v1alpha3
2+
kind: InitConfiguration
3+
apiEndpoint:
4+
advertiseAddress: 1.1.1.1
5+
bindPort: 8443
6+
bootstrapTokens:
7+
- groups:
8+
- system:bootstrappers:kubeadm:default-node-token
9+
ttl: 24h0m0s
10+
usages:
11+
- signing
12+
- authentication
13+
nodeRegistration:
14+
criSocket: /var/run/dockershim.sock
15+
name: mk
16+
taints: []
17+
---
18+
apiVersion: kubeadm.k8s.io/v1alpha3
19+
kind: ClusterConfiguration
20+
apiServerExtraArgs:
21+
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
22+
certificatesDir: /var/lib/minikube/certs
23+
clusterName: kubernetes
24+
controlPlaneEndpoint: localhost:8443
25+
etcd:
26+
local:
27+
dataDir: /var/lib/minikube/etcd
28+
kubernetesVersion: v1.13.0
29+
networking:
30+
dnsDomain: 1.1.1.1
31+
podSubnet: ""
32+
serviceSubnet: 10.96.0.0/12
33+
---
34+
apiVersion: kubelet.config.k8s.io/v1beta1
35+
kind: KubeletConfiguration
36+
evictionHard:
37+
nodefs.available: "0%"
38+
nodefs.inodesFree: "0%"
39+
imagefs.available: "0%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
apiVersion: kubeadm.k8s.io/v1beta1
2+
kind: InitConfiguration
3+
localAPIEndpoint:
4+
advertiseAddress: 1.1.1.1
5+
bindPort: 8443
6+
bootstrapTokens:
7+
- groups:
8+
- system:bootstrappers:kubeadm:default-node-token
9+
ttl: 24h0m0s
10+
usages:
11+
- signing
12+
- authentication
13+
nodeRegistration:
14+
criSocket: /var/run/dockershim.sock
15+
name: mk
16+
taints: []
17+
---
18+
apiVersion: kubeadm.k8s.io/v1beta1
19+
kind: ClusterConfiguration
20+
apiServer:
21+
extraArgs:
22+
enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
23+
certificatesDir: /var/lib/minikube/certs
24+
clusterName: kubernetes
25+
controlPlaneEndpoint: localhost:8443
26+
dns:
27+
type: CoreDNS
28+
etcd:
29+
local:
30+
dataDir: /var/lib/minikube/etcd
31+
kubernetesVersion: v1.14.0
32+
networking:
33+
dnsDomain: 1.1.1.1
34+
podSubnet: ""
35+
serviceSubnet: 10.96.0.0/12
36+
---
37+
apiVersion: kubelet.config.k8s.io/v1beta1
38+
kind: KubeletConfiguration
39+
imageGCHighThresholdPercent: 100
40+
evictionHard:
41+
nodefs.available: "0%"
42+
nodefs.inodesFree: "0%"
43+
imagefs.available: "0%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
apiVersion: kubeadm.k8s.io/v1beta1
2+
kind: InitConfiguration
3+
localAPIEndpoint:
4+
advertiseAddress: 1.1.1.1
5+
bindPort: 8443
6+
bootstrapTokens:
7+
- groups:
8+
- system:bootstrappers:kubeadm:default-node-token
9+
ttl: 24h0m0s
10+
usages:
11+
- signing
12+
- authentication
13+
nodeRegistration:
14+
criSocket: /var/run/dockershim.sock
15+
name: mk
16+
taints: []
17+
---
18+
apiVersion: kubeadm.k8s.io/v1beta1
19+
kind: ClusterConfiguration
20+
apiServer:
21+
extraArgs:
22+
enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
23+
certificatesDir: /var/lib/minikube/certs
24+
clusterName: kubernetes
25+
controlPlaneEndpoint: localhost:8443
26+
dns:
27+
type: CoreDNS
28+
etcd:
29+
local:
30+
dataDir: /var/lib/minikube/etcd
31+
kubernetesVersion: v1.15.0
32+
networking:
33+
dnsDomain: 1.1.1.1
34+
podSubnet: ""
35+
serviceSubnet: 10.96.0.0/12
36+
---
37+
apiVersion: kubelet.config.k8s.io/v1beta1
38+
kind: KubeletConfiguration
39+
imageGCHighThresholdPercent: 100
40+
evictionHard:
41+
nodefs.available: "0%"
42+
nodefs.inodesFree: "0%"
43+
imagefs.available: "0%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
apiVersion: kubeadm.k8s.io/v1beta1
2+
kind: InitConfiguration
3+
localAPIEndpoint:
4+
advertiseAddress: 1.1.1.1
5+
bindPort: 8443
6+
bootstrapTokens:
7+
- groups:
8+
- system:bootstrappers:kubeadm:default-node-token
9+
ttl: 24h0m0s
10+
usages:
11+
- signing
12+
- authentication
13+
nodeRegistration:
14+
criSocket: /var/run/dockershim.sock
15+
name: mk
16+
taints: []
17+
---
18+
apiVersion: kubeadm.k8s.io/v1beta1
19+
kind: ClusterConfiguration
20+
apiServer:
21+
extraArgs:
22+
enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
23+
certificatesDir: /var/lib/minikube/certs
24+
clusterName: kubernetes
25+
controlPlaneEndpoint: localhost:8443
26+
dns:
27+
type: CoreDNS
28+
etcd:
29+
local:
30+
dataDir: /var/lib/minikube/etcd
31+
kubernetesVersion: v1.16.0
32+
networking:
33+
dnsDomain: 1.1.1.1
34+
podSubnet: ""
35+
serviceSubnet: 10.96.0.0/12
36+
---
37+
apiVersion: kubelet.config.k8s.io/v1beta1
38+
kind: KubeletConfiguration
39+
imageGCHighThresholdPercent: 100
40+
evictionHard:
41+
nodefs.available: "0%"
42+
nodefs.inodesFree: "0%"
43+
imagefs.available: "0%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: "DNS Domain"
3+
linkTitle: "DNS Domain"
4+
weight: 6
5+
date: 2019-10-09
6+
description: >
7+
Use configured DNS domain in bootstrapper kubeadm
8+
---
9+
10+
minikube by default uses **cluster.local** if none is specified via the start flag --dns-domain. The configuration file used by kubeadm are found inside **/var/tmp/minikube/kubeadm.yaml** directory inside minikube.
11+
12+
Default DNS configuration will look like below
13+
14+
```
15+
apiVersion: kubeadm.k8s.io/v1beta1
16+
kind: InitConfiguration
17+
localAPIEndpoint:
18+
......
19+
......
20+
---
21+
apiVersion: kubeadm.k8s.io/v1beta1
22+
kind: ClusterConfiguration
23+
.....
24+
.....
25+
kubernetesVersion: v1.16.0
26+
networking:
27+
dnsDomain: cluster.local
28+
podSubnet: ""
29+
serviceSubnet: 10.96.0.0/12
30+
---
31+
```
32+
33+
To change the dns pass the value when starting minikube
34+
35+
```
36+
minikube start --dns-domain bla.blah.blah
37+
```
38+
39+
the dns now changed to bla.blah.blah
40+
41+
```
42+
apiVersion: kubeadm.k8s.io/v1beta1
43+
kind: InitConfiguration
44+
localAPIEndpoint:
45+
......
46+
......
47+
---
48+
apiVersion: kubeadm.k8s.io/v1beta1
49+
kind: ClusterConfiguration
50+
.....
51+
.....
52+
kubernetesVersion: v1.16.0
53+
networking:
54+
dnsDomain: bla.blah.blah
55+
podSubnet: ""
56+
serviceSubnet: 10.96.0.0/12
57+
---
58+
```

0 commit comments

Comments
 (0)