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 运行在同一个管控服务器):

使用 Docker Atlas 运行一个基于 Kubernetes Atlas 的 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

参考