Pod 网络故障排查

Kubernetes 的网络是一个多层虚拟网络体系,流量从客户端到后端 Pod 的路径涉及多个组件。排查网络问题时,如果"东戳一下西戳一下"没有章法,可能需要耗费大量时间。如何最快的定位网络问题的根源?记住常见的具体现象和应对办法,遵循从内到外的原则(先确认"自己没问题",再确认"中间没问题",最后确认"外面没问题")或许能够帮你节约大量的时间,。 下面按照从具体访问现象出发的思路,由浅入深展开。 1. 第一层:Pod 自身状态确认 现象:Pod 完全无法访问,任何请求都无响应 这是最基础的一层。在排查任何网络问题之前,先确认 Pod 本身是否健康运行。 1.1 检查 Pod 状态 kubectl get pods -o wide 关注以下状态: 状态 含义 可能原因 Running 正常运行 正常 Pending 等待调度 资源不足、节点亲和性不匹配 CrashLoopBackOff 反复崩溃重启 应用启动失败、配置错误 OOMKilled 内存超限被杀 resources.limits.memory 设置过低 ImagePullBackOff 镜像拉取失败 镜像名错误、仓库认证失败 ContainerCreating 容器创建中 CNI 插件分配 IP 失败、存储卷挂载失败 如果 Pod 不在 Running 状态,网络问题只是表象,根因在 Pod 本身: # 查看 Pod 详细事件 kubectl describe pod <pod-name> -n <namespace> # 查看容器日志(如果容器曾启动过) kubectl logs <pod-name> -n <namespace> # 查看前一个崩溃容器的日志 kubectl logs <pod-name> -n <namespace> --previous 1.2 确认 Pod 有 IP 地址 kubectl get pods -o wide 如果 Pod 状态是 Running 但 IP 为空,说明 CNI 插件没有成功分配 IP。此时需要检查: ...