k8s中当pod因网络问题导致服务异常该如何排查
Kubernetes网络排障全攻略:当Pod失联时,如何排查?
一、网络异常就像"城市交通瘫痪"——先定位事故点
当K8s集群的网络出现故障时,就像城市的交通系统突然瘫痪。我们需要分层次排查:
第一步:快速定位故障层级(3分钟定位法)
-
Pod内自检
# 进入Pod查看基础网络 kubectl exec -it trouble-pod -- sh -c "ping -c 3 114.114.114.114 && curl -I http://www.baidu.com"
- ✅ 能ping通公网IP但无法访问域名 → DNS故障
- ❌ 完全不通 → 底层网络问题
-
跨Pod测试
# 在故障Pod内测试Service连通性 kubectl exec trouble-pod -- curl -v http://target-service:8080
二、六大经典故障场景与实战解法
场景1:DNS解析失败(报错:Could not resolve host)
排查步骤:
# 检查CoreDNS运行状态
kubectl -n kube-system get pods -l k8s-app=kube-dns
# 查看DNS配置
kubectl exec trouble-pod -- cat /etc/resolv.conf
常见原因:
- CoreDNS Pod异常
- resolv.conf中search域配置错误
场景2:跨节点Pod无法互通
排查工具包:
# 检查CNI插件状态
kubectl -n kube-system logs calico-node-xxxxx
# 查看节点路由表
ip route show | grep calico
# 抓包分析(需在Node上执行)
nsenter -t $(pgrep calico-node) -n tcpdump -i eth0 -nn 'host 10.244.1.5'
场景3:Service不通但Endpoint正常
诊断流程图:
三、网络排障神兵利器
工具包推荐
工具 | 用途 | 使用场景示例 |
---|---|---|
netshoot | 全能网络诊断容器 | kubectl run netshoot --image nicolaka/netshoot |
mtr | 路由追踪 | mtr -r -c 10 <目标IP> |
tcptraceroute | TCP层路由追踪 | tcptraceroute -n -p 80 <IP> |
calicoctl | Calico网络诊断 | calicoctl node status |
诊断脚本模板
#!/bin/bash
# 快速网络检测脚本
POD_NAME=$1
NAMESPACE=$2
echo "=== 基础检查 ==="
kubectl -n $NAMESPACE get pod $POD_NAME -o wide
kubectl -n $NAMESPACE describe pod $POD_NAME | grep -A10 Events
echo "=== 网络连通性 ==="
kubectl exec -n $NAMESPACE $POD_NAME -- ping -c 3 114.114.114.114
kubectl exec -n $NAMESPACE $POD_NAME -- nslookup kubernetes.default
echo "=== 服务访问测试 ==="
SVC_IP=$(kubectl get svc target-svc -o=jsonpath='{.spec.clusterIP}')
kubectl exec -n $NAMESPACE $POD_NAME -- curl -I --connect-timeout 3 http://$SVC_IP:8080
四、生产环境血泪教训
案例1:MTU引发的血案
- 现象:Node间大数据包丢失
- 根因:AWS VPC MTU=1500,Calico默认MTU=1480不匹配
- 修复:
# 修改Calico配置 - name: FELIX_IPINIPMTU value: "1440" - name: FELIX_VXLANMTU value: "1410"
案例2:诡异的DNS间歇性故障
- 现象:每小时出现几分钟DNS解析超时
- 根因:CoreDNS Pod未设置反亲和性,被调度到同一节点
- 修复:
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: k8s-app operator: In values: [kube-dns] topologyKey: kubernetes.io/hostname
五、网络健康检查清单
定期执行以下检查,防患于未然:
-
CNI插件检测
calicoctl node status kubectl -n kube-system get pods -l k8s-app=calico-node
-
网络策略审计
kubectl get networkpolicy -A kubectl describe networkpolicy <policy-name>
-
Service映射验证
kubectl get endpoints <service-name>
-
DNS性能测试
kubectl run dns-test --image=busybox --rm -it --restart=Never -- \ sh -c "time nslookup kubernetes.default.svc.cluster.local"
终极心法:
网络排障如同破案,要牢记"由近及远、由内到外"的原则。掌握分层检测法+用好诊断工具包,即使最复杂的网络故障也能迎刃而解。记住:每个异常现象背后,都藏着等待发现的线索!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!