一、進入pod可以訪問IP,不能訪問域名
bash-5.0# ping www.baidu.com ping: bad address 'www.baidu.com
二、進入目標pod容器,查看/etc/resolv.conf
bash-5.0# cat /etc/resolv.conf nameserver 10.96.0.10 search hl95-notary.svc.master69.kubernetes.blockchain.hl95.com svc.master69.kubernetes.blockchain.hl95.com master69.kubernetes.blockchain.hl95.com hlqxt options ndots:5
可以看到dns服務器IP為0.96.0.10,我們查看下系統的coredns pod容器信息
[root@redis-03 kubernetes]# kubectl get pods -n kube-system -o wide |grep coredns coredns-66bff467f8-6w5j5 1/1 Running 0 3d20h 10.244.3.9 redis-03.hlqxt <none> <none> coredns-66bff467f8-h2zgp 1/1 Running 0 3d20h 10.244.4.9 redis-02.hlqxt <none> <none>
可以看到兩個coredns pod位於兩個node節點上,並且狀態是running,正常
我們再進一步查看dns service信息
[root@redis-03 kubernetes]# kubectl get svc -n kube-system -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 5d2h k8s-app=kube-dns
kube-dns服務的IP正是10.96.0.10,這樣我們知道了pod是通過kube-dns 服務來解析域名的,現在的問題是POD無法與kube-dns通信呢?還是coredns本身域名解析有問題呢,我們需要進一步來確認kube-dns 服務后端正確綁定了coredns容器,我們查看endpoint來確認
[root@redis-03 kubernetes]# kubectl get endpoints -n kube-system -o wide|grep kube-dns kube-dns 10.244.3.9:53,10.244.4.9:53,10.244.3.9:9153 + 3 more... 5d2h [root@redis-03 kubernetes]#
可以看到kube-dns后端正確的綁定了兩個coredns pod的IP。
我們再將目標pod中的nameserver 的ip地址改為coredns pod的IP地址,繞過kube-dns服務,直接與coredns pod通信
bash-5.0# cat /etc/resolv.conf nameserver 10.244.3.9 #nameserver 10.96.0.10 search hl95-notary.svc.master69.kubernetes.blockchain.hl95.com svc.master69.kubernetes.blockchain.hl95.com master69.kubernetes.blockchain.hl95.com hlqxt options ndots:5
10.244.3.9:為coredns pod其中一個的IP
再執行ping
bash-5.0# ping www.baidu.com PING www.baidu.com (110.242.68.3): 56 data bytes 64 bytes from 110.242.68.3: seq=0 ttl=50 time=9.281 ms 64 bytes from 110.242.68.3: seq=1 ttl=50 time=9.296 ms 64 bytes from 110.242.68.3: seq=2 ttl=50 time=9.203 ms 64 bytes from 110.242.68.3: seq=3 ttl=50 time=9.233 ms 64 bytes from 110.242.68.3: seq=4 ttl=50 time=9.241 ms 64 bytes from 110.242.68.3: seq=5 ttl=50 time=9.259 ms 64 bytes from 110.242.68.3: seq=6 ttl=50 time=9.270 ms 64 bytes from 110.242.68.3: seq=7 ttl=50 time=9.342 ms
可以看到域名解析成功
說明coredns pod工作是正常的,應用目標pod也是工作正常的問題出在kube-dns服務與coredns節點通信上,服務與pod之間通信是通過kube-proxy實現