附011.Kubernetes-DNS及搭建
目录
一 Kubernetes DNS介绍
1.1 Kubernetes DNS发展
作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,因此需要一个集群范围内的DNS服务来完成从服务名到ClusterIP的解析。
DNS服务在Kubernetes的发展过程中经历了3个阶段,SkyDNS ----> KubeDNS ----> CoreDNS。
1.2 SkyDNS
在Kubernetes 1.2版本时,DNS服务是由SkyDNS提供的,它由4个容器组成:kube2sky、skydns、etcd和healthz。
kube2sky容器监控Kubernetes中Service资源的变化,根据Service的名称和IP地址信息生DNS记录,并将其保存到etcd中。
skydns容器从etcd中读取DNS记录,并为客户端容器应用提供DNS查询服务。
healthz容器提供对skydns服务的健康检查功能。
SkyDNS的总体架构如下:
1.3 KubeDNS
从Kubernetes 1.4版本开始,SkyDNS组件便被KubeDNS替换,主要考虑是SkyDNS组件之间通信较多,整体性能不高。
KubeDNS由3个容器组成:kubedns、dnsmasq和sidecar,去掉了SkyDNS中的etcd存储,将DNS记录直接保存在内存中,以提高查询性能。
kubedns容器监控Kubernetes中Service资源的变化,根据Service的名称和IP地址生成DNS记录,并将DNS记录保存在内存中。
dnsmasq容器从kubedns中获取DNS记录,提供DNS缓存,为客户端容器应用提供DNS查询服务。
sidecar提供对kubedns和dnsmasq服务的健康检查功能。
KubeDNS的总体架构如下:
1.4 CoreDNS
从Kubernetes 1.11版本开始,Kubernetes集群的DNS服务由CoreDNS提供。CoreDNS是CNCF基金会的一个项目,是用Go语言实现的高性能、插件式、易扩展的DNS服务端。
CoreDNS解决了KubeDNS的一些问题,例如dnsmasq的安全漏洞、externalName不能使用stubDomains设置,等等。
CoreDNS支持自定义DNS记录及配置upstream DNS Server,可以统一管理Kubernetes基于服务的内部DNS和数据中心的物理DNS。
CoreDNS没有使用多个容器的架构,只用一个容器便实现了KubeDNS内3个容器的全部功能。
CoreDNS的总体架构如下:
1 # vi /etc/systemd/system/kubelet.service 2 …… 3 --config=/etc/kubernetes/kubelet-config.yaml \