在 RKE v0.2.5 及更新版本中,使用 Kubernetes 1.14 及以上版本时,CoreDNS 是默认 DNS 提供商。如果使 RKE 版本低于 v0.2.5,则 kube-dns 是默认 DNS 提供商。
启用 NodeLocal DNS 选项需要满足以下条件:
- RKE 版本为 v1.1.0 或更新版本
- Kubernetes 版本为 v1.15.11+、v1.16.8+或 v1.17.4+。
NodeLocal DNS 是一个额外的组件,可以部署在每个节点上,提高 DNS 性能。由于它不能替代参数,所以仍然需要为每个节点配置一个可用的 DNS 提供商。有关 NodeLocal DNS 工作原理的更多信息,请参见在 Kubernetes 集群中使用 NodeLocal DNS Cache。
配置 NodeLocal DNS
使用ip_address
参数配置每台主机监听的链路本地 IP 地址,请确保这个 IP 地址在主机上没有被占用。
删除ip_address
值就会将从集群中删除 NodeLocal DNS。
说明: 删除 NodeLocal DNS 时, 可能会对 DNS 造成干扰。更新后的
/etc/resolv.conf
配置仅对删除 NodeLocal DNS 后启动的 pod 生效。在一般情况下,使用默认dnsPolicy: ClusterFirst
将需要重新部署。
v0.2.5 及更新版本可用
CoreDNS 只能在 Kubernetes v1.14.0 及以上版本上使用。
RKE 将 CoreDNS 部署为一个默认副本为 1 的 Deployment,该 pod 由coredns
一个容器组成。RKE 也会将 coredns-autoscaler 部署为 Deployment,使用核心数量和节点的数量来扩展 coredns Deployment。详情请参考Linear Mode。
CoreDNS 使用的镜像在中。对于每个 Kubernetes 版本,都有与 CoreDNS 相关联的默认镜像,但这些镜像可以通过更改system_images
中的镜像标签来覆盖。
调度 CoreDNS
如果只想在特定的节点上部署 CoreDNS pod ,可以在dns
部分设置一个node_selector
。node_selector
中的标签需要与要部署 CoreDNS pod 的节点上的标签相匹配。
nodes:
- address: 1.1.1.1
role: [controlplane, worker, etcd]
user: root
labels:
app: dns
dns:
provider: coredns
app: dns
上游名称服务器
默认情况下,CoreDNS 使用主机配置的命名服务器(通常保存在/etc/resolv.conf
路径下)来解析外部查询。如果想配置特定的上游名称服务器,可以使用upstreamnameservers
指令。
设置 upstreamnameservers
时,还需要同步修改provider
配置。
kube-dns 使用的镜像在system_images
下。对于每个 Kubernetes 版本,都有与 kube-dns 相关联的默认镜像,但这些图片可以通过更改system_images
中的镜像标签来覆盖。
调度 kube-dns
v0.2.0 及更新版本可用
如果只想在特定的节点上部署 kube-dns pod,可以在dns
部分设置一个node_selector
。node_selector
中的标签需要与要部署 CoreDNS pod 的节点上的标签相匹配。
nodes:
role: [controlplane, worker, etcd]
user: root
labels:
app: dns
dns:
provider: kube-dns
node_selector:
app: dns
上游名称服务器
v0.2.0 及更新版本可用
默认情况下,kube-dns 使用主机配置的命名服务器(通常保存在/etc/resolv.conf
路径下)来解析外部查询。如果想配置特定的上游名称服务器,可以使用upstreamnameservers
指令。
设置 upstreamnameservers
时,还需要同步修改provider
配置。
v0.2.0 及更新版本可用
dns: