k8s dns演进

kube-dns

k8s 1.4前的 dns,有4个container组成, kube2sky, skyDNS, healthz, etcd。

  • kube2sky通过k8s API监视k8s service资源的变化,并根据service的信息生成 DNS 记录写入到etcd中。
  • skydns为集群中的 pod 提供 DNS 查询服务,DNS记录从etcd中读取。
  • exec healthz提供健康检查功能。

图

在 k8s 1.4版本后,dns进行重新梳理

图

kubedns

  • 监视k8s Service资源并更新DNS记录
  • 替换etcd,使用TreeCache数据结构保存DNS记录并实现SkyDNS的Backend接口
  • 接入SkyDNS,对dnsmasq提供DNS查询服务

dnsmasq

  • 对集群提供DNS查询服务
  • 设置kubedns为upstream
  • 提供DNS缓存,降低kubedns负载,提高性能

dnsmasq能够缓存外部DNS记录,同时提供本地DNS解析或者作为外部DNS的代理,即dnsmasq会首先查找/etc/hosts等本地解析文件,然后再查找/etc/resolv.conf等外部nameserver配置文件中定义的外部DNS。所以说dnsmasq是一个很不错的DNS中继。DNS配置同样写入dnsmasq.conf配置文件里。

exechealthz

  • 定期检查kubedns和dnsmasq的健康状态
  • 为k8s活性检测提供HTTP API

kube-dns 代码结构图

仓库源码
kubedns

CoreDNS

CoreDNS 是 CNCF 项目, 功能支持大多通过插件机制实现,包括基于 k8s 的服务发现,各种不同的插件通过链式来实现,在 k8s 1.11 版本版本中 GA,kubeadm 安装时候作为默认选项,目标是成为云原生的 DNS 服务器和服务发现机制。介绍文档参见:CoreDNS GA for Kubernetes Cluster DNS

kube-dns 与 coredns github仓库情况对比:https://www.do1618.com/repo?repos=coredns/coredns,kubernetes/dns

发表评论

电子邮件地址不会被公开。 必填项已用*标注