k8s dns演进

k8s 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

代码结构图

仓库源码
kubedns

发表评论

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