1.corednsd的介绍
官网:https://coredns.io/
CoreDNS是一个灵活、可扩展的 DNS 服务器,可以充当 Kubernetes 集群 DNS。与 Kubernetes 一样,CoreDNS 项目由 CNCF
coredns在K8S中的用途,主要是用作服务发现,也就是服务(应用)之间相互定位的过程。
2.coredns的解析流程
注意:localdns相当于缓存DNS服务器,local dns也减少了coredns的访问压力
1、kubernetes集群中的pod向外发出DNS查询请求
- pod查询业务域名时,会首先查询pod本身的/etc/resolv.conf文件中配置的DNS服务器IP(就是图中的local-dns pod)
2、pod会先把域名请求转发到local-dns(相当于DNS缓存服务器),如果local-dns有这个业务域名解析记录则直接返回pod的请求,如果local-dns没有这个业务域名的解析请求,则会把pod的请求转发给集群内的coredns服务
3、coredns收到这个请求后与kubernetes Master节点上的API接口通信,以此来获取集群内的服务信息,并建立相应的DNS解析记录,根据记录找到对应的服务IP,并将解析结果返回给localdns
4、local dns收到了coredns的解析结果后,将解析的结果返回给发出请求的Pod
5、Pod根据local dns返回,找到了服务IP,进行实际的网络通信
3.coredns配置文件的解析
Corefile: |
.:53 {
errors #启用错误日志输出
health { #暴露检查接口
lameduck 5s
}
ready #ready插件
kubernetes cluster.local in-addr.arpa ip6.arpa { #kubernetes插件,用于在kubernetes集群中解析服务和pod的DNS请求,in-addr.arpa ip6.arpa反向解析,将IP地址解析成域名
pods insecure #pod名称被解析IP地址时,不进行安全性验证
fallthrough in-addr.arpa ip6.arpa
ttl 30 #DNS记录的缓存时间
}
prometheus :9153 #prometheus插件
forward . /etc/resolv.conf { #forward插件,将无法解析的域名请求转发给上游DNS服务器
max_concurrent 1000
}
cache 30
reload
loadbalance
}
4.coredns实验
kubectl run tomcat-test-2 --image registry.cn-hangzhou.aliyuncs.com/qinge/tomcat-app1:v1
此时访问外部域名是无法被访问的
在corefile文件中把forward修改为DNS地址,则就可以访问外部域名
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
hosts {
fallthrough
}
prometheus :9153
forward . 172.17.1.200 { #修改为dns的地址
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
4.1测试
- 访问集群内部域名
- 访问集群外部域名