diff --git a/cmd/kubeadm/app/phases/addons/dns/dns.go b/cmd/kubeadm/app/phases/addons/dns/dns.go index 6f417ea803..3db5c9009d 100644 --- a/cmd/kubeadm/app/phases/addons/dns/dns.go +++ b/cmd/kubeadm/app/phases/addons/dns/dns.go @@ -51,26 +51,35 @@ func EnsureDNSAddon(cfg *kubeadmapi.MasterConfiguration, client clientset.Interf return err } - // Get the YAML manifest conditionally based on the k8s version - kubeDNSDeploymentBytes := GetKubeDNSManifest(k8sVersion) - dnsDeploymentBytes, err := kubeadmutil.ParseTemplate(kubeDNSDeploymentBytes, struct{ ImageRepository, Arch, Version, DNSDomain, DNSProbeType, MasterTaintKey string }{ - ImageRepository: cfg.ImageRepository, - Arch: runtime.GOARCH, - // Get the kube-dns version conditionally based on the k8s version - Version: GetKubeDNSVersion(k8sVersion), - DNSDomain: cfg.Networking.DNSDomain, - DNSProbeType: GetKubeDNSProbeType(k8sVersion), - MasterTaintKey: kubeadmconstants.LabelNodeRoleMaster, - }) - if err != nil { - return fmt.Errorf("error when parsing kube-dns deployment template: %v", err) - } - dnsip, err := getDNSIP(client) if err != nil { return err } + var dnsBindAddr string + if dnsip.To16() != nil { + dnsBindAddr = "::1" + } else { + dnsBindAddr = "127.0.0.1" + } + + // Get the YAML manifest conditionally based on the k8s version + kubeDNSDeploymentBytes := GetKubeDNSManifest(k8sVersion) + dnsDeploymentBytes, err := kubeadmutil.ParseTemplate(kubeDNSDeploymentBytes, + struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{ + ImageRepository: cfg.ImageRepository, + Arch: runtime.GOARCH, + // Get the kube-dns version conditionally based on the k8s version + Version: GetKubeDNSVersion(k8sVersion), + DNSBindAddr: dnsBindAddr, + DNSDomain: cfg.Networking.DNSDomain, + DNSProbeType: GetKubeDNSProbeType(k8sVersion), + MasterTaintKey: kubeadmconstants.LabelNodeRoleMaster, + }) + if err != nil { + return fmt.Errorf("error when parsing kube-dns deployment template: %v", err) + } + dnsServiceBytes, err := kubeadmutil.ParseTemplate(KubeDNSService, struct{ DNSIP string }{ DNSIP: dnsip.String(), }) diff --git a/cmd/kubeadm/app/phases/addons/dns/dns_test.go b/cmd/kubeadm/app/phases/addons/dns/dns_test.go index 58783e4efc..d707f8760a 100644 --- a/cmd/kubeadm/app/phases/addons/dns/dns_test.go +++ b/cmd/kubeadm/app/phases/addons/dns/dns_test.go @@ -91,10 +91,11 @@ func TestCompileManifests(t *testing.T) { }{ { manifest: v180AndAboveKubeDNSDeployment, - data: struct{ ImageRepository, Arch, Version, DNSDomain, DNSProbeType, MasterTaintKey string }{ + data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSDomain, DNSProbeType, MasterTaintKey string }{ ImageRepository: "foo", Arch: "foo", Version: "foo", + DNSBindAddr: "foo", DNSDomain: "foo", DNSProbeType: "foo", MasterTaintKey: "foo", diff --git a/cmd/kubeadm/app/phases/addons/dns/manifests.go b/cmd/kubeadm/app/phases/addons/dns/manifests.go index 161fec5485..d291e337ab 100644 --- a/cmd/kubeadm/app/phases/addons/dns/manifests.go +++ b/cmd/kubeadm/app/phases/addons/dns/manifests.go @@ -123,9 +123,9 @@ spec: - --cache-size=1000 - --no-negcache - --log-facility=- - - --server=/{{ .DNSDomain }}/127.0.0.1#10053 - - --server=/in-addr.arpa/127.0.0.1#10053 - - --server=/ip6.arpa/127.0.0.1#10053 + - --server=/{{ .DNSDomain }}/{{ .DNSBindAddr }}#10053 + - --server=/in-addr.arpa/{{ .DNSBindAddr }}#10053 + - --server=/ip6.arpa/{{ .DNSBindAddr }}#10053 ports: - containerPort: 53 name: dns @@ -156,8 +156,8 @@ spec: args: - --v=2 - --logtostderr - - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }} - - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }} + - --probe=kubedns,{{ .DNSBindAddr }}:10053,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }} + - --probe=dnsmasq,{{ .DNSBindAddr }}:53,kubernetes.default.svc.{{ .DNSDomain }},5,{{ .DNSProbeType }} ports: - containerPort: 10054 name: metrics