Docker运行CoreDNS¶
除了在Kubernetes部署时通过 kubeadm
自动完成CoreDNS部署,也可以通过 Docker Atlas 来运行独立的CoreDNS。这种场景通常是为了解决一些特定场景的独立部署。
CoreDNS是一个无状态的内存indexer,当和Kubernetes结合使用时,可以在启动时指定Kubernetes apiserver,此时CoreDNS会从apiserver拉取service记录,并构建DNS记录。所以可以将CoreDNS视为一个类似于 DNSmasq 的特定实现(对啊,dnsmasq启动时不是从本机 /etc/hosts
加载记录来构建DNS记录么)。
使用以下命令可以轻易运行一个结合Kubernetes的CoreDNS容器(假设 apiserver 和 coredns 运行在同一个管控服务器):
function run_coredns() {
apiserver_ip=`hostname -i`
# DNS端口映射为553, Metrics端口映射为59153
docker run -d \
--restart=always \
-v /root/coredns/config/:/etc/coredns/ \
-v /root/coredns/serviceaccount/:/var/run/secrets/kubernetes.io/serviceaccount/ \
-v /etc/resolv.conf:/etc/resolv.conf \
-p 553:53 -p 59153:9153 \
-e KUBERNETES_SERVICE_PORT_HTTPS=6443 \
-e KUBERNETES_SERVICE_PORT=6443 \
-e KUBERNETES_SERVICE_HOST=${apiserver_ip} \
docker.io/coredns/coredns:1.6.7 -conf /etc/coredns/Corefile
}
run_coredns
警告
docker run 只映射了 TCP 53
,所以需要配置 node-local-dns 强制使用TCP访问CoreDNS