介绍
在Kubernetes中DNS组件为整个集群提供DNS服务,从而实现服务之间的访问。Kubernetes的DNS服务在Kubernetes中经历了3个阶段:
- 1.3版本之前skydns
- 1.3-1.10版本kubedns
- 1.11版本开始coredns
CoreDNS基于Go语言开发,通过串接一组实现DNS功能的插件的插件链路实现所有功能,并且允许用户自行开发和添加必要的插件。CoreDNS底层使用Caddy作为WebServer,可以支持UDP、TLS、gRPC等方式对外提供DNS服务。
CoreDNS部署
下载CoreDNS deployment文件
下载地址:https://github.com/coredns/deployment/tree/master/kubernetes
![在这里插入图片描述](https://img-blog.csdnimg.cn/50a66abe65ff4e7881661ddbb9adb910.png)
wget https://github.com/coredns/deployment/raw/master/kubernetes/coredns.yaml.sed
mv coredns.yaml.sed coredns.yml
修改deployment文件
修改cluster.local和安装集群时设置的集群域名后缀保持一致
forward 后面设置为 /etc/resolv.conf
![在这里插入图片描述](https://img-blog.csdnimg.cn/a37215b4b8af41488712ae382c5fc648.png)
副本数根据负载情况修改
![在这里插入图片描述](https://img-blog.csdnimg.cn/89234f47d5de44648e9d018c1020f4bd.png)
pod资源限制建议配置大一些,不然在负载大的情况下查询时间会增加
![在这里插入图片描述](https://img-blog.csdnimg.cn/adc311c0f4aa4b129d899dea0a51eb35.png)
service IP和kubelete 配置文件中clusterDNS的值保持一致
![在这里插入图片描述](https://img-blog.csdnimg.cn/d188ad68cfb04f6bbc4e647433c79f57.png)
部署
kubectl apply -f coredns.yml
测试
进入一个Pod进行域名解析测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/1453139f224c408db8d0032813b884f4.png)
coreDNS配置文件
coreDNS的配置配置定义在名为Corefile的文件中,Corefile保存在kube-system名称空间下名为coredns的configmap中,然后以存储卷的形式挂载至coredns Pod中。具体内容如下:
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
如果有些域名要转给特定的dns服务器解析,可以在Corefile中添加类似下面的配置指定dns服务器:
![在这里插入图片描述](https://img-blog.csdnimg.cn/b91b03e4997645a0adda58fe1d0df2d7.png)
修改完成以后等待CoreDNS重新加载配置或者重建CoreDNS Pod即可。
coreDNS解析流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/38fa79e27c9a4027abe07c657f8ce90a.png)
- client Pod根据/etc/resolv.conf将解析请求转发给kube-dns service
- kube-dns service会将请求转发到后端的coreDNS Pod
- coredns Pod 根据Corefile的配置会连接到kubernetes service监视service IP的变动,维护DNS解析记录
- CoreDNS查询到service name对应的IP后返回给客户端
- 如果查询的是外部域名,coreDNS无法解析,就转发给指定的域名服务器,一般是节点上/etc/resolv.conf中的服务器解析
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)