從 kube-dns 遷移至 CoreDNS

Kubernetes 中從 kube-dns 遷移至 CoreDNS 的指南

CoreDNS 目前是 Kubernetes 中的 Beta 功能,並正朝向 Kubernetes 1.11 的正式發布 (GA)邁進。這表示 CoreDNS 將透過 kubeadm、kube-up、minikube 和 kops 等安裝工具組,成為 Kubernetes 的標準功能。

本文將引導您在使用各種可用的工具啟動 Kubernetes 叢集時,將 DNS 服務從 CoreDNS 遷移至 kube-dns。

透過 Kubeadm 安裝 CoreDNS

這裡有一份關於如何透過 Kubeadm 安裝 CoreDNS 而非 kube-dns 的詳細指南,可在此處找到:這裡。從 Kubernetes v1.10 開始,CoreDNS 支援將 kube-dns ConfigMap 轉換為 CoreDNS ConfigMap。也就是說,如果您之前透過 kube-dns ConfigMap 設定了 stubdomainsupstreamnameserversfederation,當您選擇使用 kubeadm upgrade 安裝 CoreDNS 時,它現在將會自動轉換為等效的 CoreDNS ConfigMap。

kube-dns 中的 Stubdomainupstreamnameserver 會轉換為 CoreDNS 中的 proxy。kube-dns 中的 federation 在 CoreDNS 中有等效的 federation

kube-dns 的 ConfigMap 範例。

apiVersion: v1
data:
  federations: |
    {"foo" : "foo.feddomain.com"}
  stubDomains: |
    {"abc.com" : ["1.2.3.4"], "my.cluster.local" : ["2.3.4.5"]}
  upstreamNameservers: |
    ["8.8.8.8", "8.8.4.4"]
kind: ConfigMap
metadata:
  creationTimestamp: 2018-01-22T20:21:56Z
  name: kube-dns
  namespace: kube-system

轉換後的 CoreDNS Corefile。

   .:53 {
        errors
        health
        kubernetes cluster.local  in-addr.arpa ip6.arpa {
           upstream  8.8.8.8 8.8.4.4
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
        }
        federation cluster.local {
           foo foo.feddomain.com
        }
        prometheus :9153
        proxy .  8.8.8.8 8.8.4.4
        cache 30
    }
    abc.com:53 {
        errors
        cache 30
        proxy . 1.2.3.4
    }
    my.cluster.local:53 {
        errors
        cache 30
        proxy . 2.3.4.5
    }

透過 Minikube 安裝 CoreDNS。

CoreDNS 在 addon manager 中可用,但預設為停用。

$ minikube addons list
- kube-dns: enabled
- registry: disabled
- registry-creds: disabled
- freshpod: disabled
- addon-manager: enabled
- dashboard: enabled
- coredns: disabled
- heapster: disabled
- efk: disabled
- ingress: disabled
- default-storageclass: enabled
- storage-provisioner: enabled

若要啟用 CoreDNS,請執行以下命令

注意:在啟用 CoreDNS 後,請務必停用 kube-dns。否則,如果 CoreDNS 和 kube-dns 都正在執行,查詢可能會隨機命中 CoreDNS 或 kube-dns。

$ minikube addons enable coredns
coredns was successfully enabled

kube-up 中的 CoreDNS

Kube-up 是啟動 Kubernetes 叢集的另一種方式,現在主要用於在 GCE 中部署 Kubernetes 以進行端對端 (e2e) 測試。環境變數 ENABLE_CLUSTER_DNS(預設值為 true)是安裝 DNS 服務所必需的。若要將 CoreDNS 安裝為預設的 DNS 服務,環境變數 CLUSTER_DNS_CORE_DNS 必須設定為 true

Kops 中的 CoreDNS

目前,Kops v1.10 設定為包含 CoreDNS 作為選項,以安裝取代 kube-dns。為了安裝 CoreDNS 取代 kube-dns,我們需要在 Kops 的叢集 yaml 設定中將 provider 指定為 CoreDNS

spec:
  kubeDNS:
    provider: CoreDNS

這將安裝 CoreDNS 取代 kube-dns。

透過其他方法安裝 CoreDNS

對於那些想要安裝 CoreDNS 取代 kube-dns 但未使用 kubeadmminikubekube-upkops 的使用者,CoreDNS 部署儲存庫中有相關說明,可協助您從 kube-dns 遷移至 CoreDNS。使用者應在部署 CoreDNS 後刪除 kube-dns 部署。否則,如果 CoreDNS 和 kube-dns 都正在執行,查詢可能會隨機命中 CoreDNS 或 kube-dns。

Sandeep Rajan
發佈時間:,並標記為 探索DNS文件Kube-DNSKubernetes遷移服務,總共使用了 524 個單字。