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 設定了 stubdomains
、upstreamnameservers
和 federation
,當您選擇使用 kubeadm upgrade
安裝 CoreDNS 時,它現在將會自動轉換為等效的 CoreDNS ConfigMap。
kube-dns 中的 Stubdomain
和 upstreamnameserver
會轉換為 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 但未使用 kubeadm
、minikube
、kube-up
或 kops
的使用者,CoreDNS 部署儲存庫中有相關說明,可協助您從 kube-dns 遷移至 CoreDNS。使用者應在部署 CoreDNS 後刪除 kube-dns 部署。否則,如果 CoreDNS 和 kube-dns 都正在執行,查詢可能會隨機命中 CoreDNS 或 kube-dns。