k8s集群节点ping不通其他主机的ip
测试环境服务出现问题,服务一直报错认证超时,检查pod,发现如下情况:
- 异常节点的pod可以ping通本地宿主机的ip,但是ping本地宿主机的网关没有回显(通过tcpdump发现的)
- 异常节点的pod可以ping通正常节点的pod
- 异常节点的pod去ping正常节点的宿主机ip,正常节点使用tcpdump抓包,发现返回是正常,但是pod内部还是没有ping通的回显
- 异常节点的宿主机ip是可以正常ping通其他节点的ip的
排查过程
本地宿主机网络检查
ping 122.18.125.33
终端正常,有回显,证明宿主机的网络是没有问题
route
ping 122.18.125.254
宿主机ping本机的网关(
通过route命令可以查看网关ip
),也有回显,也是正常的
pod网络检查
kubectl get pod -n xxx -o wide
公司服务原因,所以对于名称做了和谐
通过
-o wide
参数,查看pod所在节点的ip,以及pod内部的ip
kubectl exec -it -n xxx <pod-name> -- ping 122.18.125.234
--
是为了不进入pod操作,为了不频繁exit这个时候,pod是可以ping通本地宿主机的ip的
kubectl exec -it -n xxx <pod-name> -- ping 122.18.125.254
这个时候,pod去ping网关,发现没有任何回显,在没有抓包之前,认为是网络不通
tcpdump检查网络
检查flannel网卡
- 在pod网络正常的节点操作
tcpdump -i flannel.1 -nvvv icmp
通过tcpdump命令,抓取flannel.1网卡,抓icmp协议(
ping命令使用的是icmp协议
)
- 在pod网络异常的节点操作
kubectl exec -it -n xxx <pod-name> -- ping 10.244.5.5
此时是ping网络正常节点的pod的ip,验证flannel网卡是否异常
最终的结果是,两个节点之间的pod是可以正常通信的,说明flannel网卡没有问题
如果flannel检查有问题,则先重启flannel,再重启docker后再尝试一下
systemctl restart flanneld && systemctl restart docker
检查宿主机网卡
- 在pod网络正常的节点操作
tcpdump -i eth0 -nvvv icmp
通过tcpdump命令,抓取eth0网卡,抓icmp协议
- 在pod网络异常的节点操作
kubectl exec -it -n xxx <pod-name> -- ping 122.18.125.33
此时ping的是pod网络正常的节点宿主机ip,发现pod内没有回显,但是tcpdump获取的信息如下
13:00:07.647480 IP (tos 0x0, ttl 60, id 42390, offset 0, flags [DF], protr ICMP (1), length 84)
122.18.125.234 > 122.18.125.33 ICMP echo request, id 12141, seq 1, length 84
iptables检查
iptabels -t nat -nL | grep "10.244.29.2"
过滤出pod的ip,发现是有DNAT转发的,iptables的规则也是没有问题的
解决方法
实在查找不出异常,于是选择了重启network服务,结果就正常了。。。
systemctl restart network
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!