随笔 - 331  文章 - 0  评论 - 5  阅读 - 5050

k8s中当pod因网络问题导致服务异常该如何排查

Kubernetes网络排障全攻略:当Pod失联时,如何排查?


一、网络异常就像"城市交通瘫痪"——先定位事故点

当K8s集群的网络出现故障时,就像城市的交通系统突然瘫痪。我们需要分层次排查:

Pod内部
Pod间通信
Node间通信
外部网络

第一步:快速定位故障层级(3分钟定位法)

  1. 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故障
    • ❌ 完全不通 → 底层网络问题
  2. 跨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正常

诊断流程图

ServiceIP不通
Endpoint正常?
检查kube-proxy
检查Pod标签
查看iptables规则
规则存在?
重启kube-proxy

三、网络排障神兵利器

工具包推荐
工具 用途 使用场景示例
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
    

五、网络健康检查清单

定期执行以下检查,防患于未然:

  1. CNI插件检测

    calicoctl node status
    kubectl -n kube-system get pods -l k8s-app=calico-node
    
  2. 网络策略审计

    kubectl get networkpolicy -A
    kubectl describe networkpolicy <policy-name>
    
  3. Service映射验证

    kubectl get endpoints <service-name>
    
  4. DNS性能测试

    kubectl run dns-test --image=busybox --rm -it --restart=Never -- \
      sh -c "time nslookup kubernetes.default.svc.cluster.local"
    

终极心法
网络排障如同破案,要牢记"由近及远、由内到外"的原则。掌握分层检测法+用好诊断工具包,即使最复杂的网络故障也能迎刃而解。记住:每个异常现象背后,都藏着等待发现的线索!

posted on   Leo-Yide  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示