一、k8s集群中DNS服务介绍
作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,这就需要一个集群范围的DNS服务来完成服务名到ClusterIP的解析。
DNS在k8s集群中发展的三个阶段
1. k8s版本 < 1.4 ,DNS由SkyDNS提供
SkyDNS有4个容器组成
kube2sky: 监控k8s集群中Service资源的变化
skydns: 从etcd中读取DNS记录,并为客户端容器应用提供DNS查询服务
healthz: 提供对skydns服务的健康检查功能
etcd: 用于保存DNS记录
skydns架构图如下:
2. k8s版本 1.4~1.11
从k8s1.4版本以后SkyDNS组件便被KubeDNS替换,KubeDNS去掉了etcd直接保存在内存中,以提高查询性能。
KubeDNS由3个容器组成
kubedns: 监控k8s集群中Service资源的变化,根据Service的名称和IP地址生成DNS记录
dnsmasq:从kubedns中获取DNS记录,提供DNS缓存,为客户端容器应用提供DNS查询服务
sidecar: 提供对kubedns和dnsmasq服务的健康检查功能。
KubeDNS架构图
3. k8s版本大于1.11以后(至今1.19)
从k8s1.11版本开始,DNS服务由CoreDNS提供。CoreDNS是CNCF基金会的一个项目,是用Go语言实现的高性能、插件式、易扩展的DNS服务器。
CoreDNS只使用了一个容器coredns
架构图如下: