排查Pod网络问题
排查Pod内DNS解析失败原因。
如果遇到Pod内服务报DNSError的错误,例如:
{"error":{"class": "DNSError", "code": 499, "details": "Post \"https://default-kevstone:30357/v3/auth/tokens\": dial tcp: lookup default-kevstone: i/o timeout"}}
这类错误一般意味着Pod之间的网络通信有问题。因为Pod之间通信一般最先要进行对端的DNS解析,由于到达coredns的Pod网络不通,导致DNS解析错误,因此最先暴露出来的是DNSError的错误。
基本原理
Pod内通过集群的coredns进行域名解析。CoreDNS配置了10.96.0.10的service IP。访问coredns时,首先由kubeproxy实现service IP到Pod IP的NAT转换,如果Pod在本节点,则直接访问Pod。否则通过tunl0以IP-in-IP或VXLAN隧道发送到对端Pod所在节点,进而解封装投递到目标Pod。
平台在每个节点采用IPVS作为Service IP到Pod IP的NAT转换。需确保节点的IPVS规则表有对应10.96.0.10的NAT规则。