这个是我新建的一个集群(二进制部署),我使用官方提供的配置创建了一个coredns(只有一个在node1上)。
我测试pod in pod之间的通信时发现,如果两个pod都放到node1上,那么通信正常,pod也可以解析外部域名。
但是只要有一个pod在node2上就没法通信,也没法解析外部域名。
我开了coredns的日志,发现在node2上的pod请求外部域名时,coredns都没有记录,说明请求没有到达coredns。
我查了 kube-proxy产生的日志,每当我在node2上的pod中请求时,就有一条iptables [-w -S KUBE-PROXY-CANARY -t mangle]产生。
下一步如何排查呢?
1、到node2节点上,测试该物理节点是否可以正常解析(容器是基于该节点进行的递增),默认是在
/etc/resolv.conf
。2、coreDNS没有装成功,一般k8s的dns是安装在命名空间
kube-system
下,可以通过kubectl get pods -n kube-system
查看,确保安装成功,通过kubectl logs
确认。你说的这两个都没问题,我按照官方文档中的debug dns方法都走了一遍,结果都是正确的。 coredns应该是没问题的,因为 在node2上的pod发出的请求都没有到达coredns。
我也检查了kube-proxy的cidr与controller cidr也是一致的。
解决了吗?
你的答案