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。