现象

线上突然报出系统页面无法访问

初步排查

  1. 查看集群是否正常
kubectl get nodes
# 结果集群正常
  1. 查看服务是否正常
kubectl get pod -n xxx|grep 'your pod'

进入容器看服务是否可以curl通

kubectl exec -it -n xxx xxx -- /bin/bash
curl -v localhost:xxx
#可以正常访问

定位为网络问题,继续排查

首先,物理节点可以正常互相ping通。
查看物理节点防火墙等配置:

systemctl status firewalld
# 已关闭

故问题可以确认在容器网络。

找运维同学排查

网络组件我们这使用的flannel,但是重启相关组件仍无法解决问题。
使用route等命令查看默认路由,没有改动。
检查容器间跨宿主机是否正常访问:

kubectl get pods -n xxx -owide
# 得到两个不同节点上的pod,其中一个容器需要有curl命令
# 进入那个pod,使用curl -v ip:port,测试是否能正常访问另一个物理节点上的pod

结论:不行,但是同一个宿主机下的pod是可以正常访问的。
至此基本了解到是容器间跨宿主机无法正常访问,但是由于我们会定时清理容器日志,现场都丢失了,故未能找到具体问题。经运维同学搜索解决方案,发现pod重启后即可恢复,故最后通过重启所有pod解决。

后记

最后还是未能找到具体问题,运维同学说这种情况一种可能是宿主机默认路由配置有误,但是route命令未发现明显问题。最后是硬通过重启所有pod恢复的。本人水平有限,对于容器网络这块不是很懂,这里也希望有大神可以在评论中指点下,多谢~

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐