前言: 在之前的实验中,有在deployment的部署中遇到了,在pod pod之间无法相互的解析,甚至不能识别对应的域名的问题,那么也是遇到了很多种自己设想的可能性( 在filebeat种的 无法识别 以为是没有安装redis 而后安装了也没有成功) 后来在pod内部的nslookup也无法验证成功,后来使用dig验证的时候也是失败的,就在想这是为什么? 而后查看镜像,在查看名称空间kube-system的时候发现 coredns的状态并没有被Running,想到了可能是没有部署好 coredns ,原因:镜像拉取失败,那么在services之间的相互联系的pod之间是通过域名进行解析的内部的IP,假如没有DNS可能就导致本身的交互并不能被正确的识别这样。
由于coredns导致的dig 不出来的错误示例:
示例1: 在dig的时候出错,并不能成功的解析域名对应的ip
[root@server1 ~]# dig -t A myapp-svc.default.svc.cluster.local. @10.96.0.1
; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t A myapp-svc.default.svc.cluster.local. @10.96.0.1
;; global options: +cmd
;; connection timed out; no servers could be reached
示例2: 在nslookup的时候也不能成功的解析
[root@server1 ~]# kubectl exec -it redis-5b5d6fbbbd-bfs6j -- /bin/sh
/data # nslookup redis.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve
nslookup: can't resolve 'redis.default.svc.cluster.local': Try again
查看kube-system下的控制器以及相关的状态 : 我们发现在查看pod的过程中coredns不论在哪个节点上都没有Running
[root@server1 ~]# kubectl get pods -n kube-system -o wide
NAME