返回首页

容器网络排障 6 层模型 — K8s/Docker/containerd 统一排查体系

📅 创建于 2026-05-21 🔄 更新于 2026-05-21 📝 470 字

容器网络排障 6 层模型

来源:微信公众号「Linux性能技术栈」 | 发布时间:2026-04-29 10:20

绝大多数容器网络不通并不是网络真的坏了,而是链路上某一层状态与预期不一致。本模型将容器网络拆成 6 层,每层只问一个问题,覆盖 K8s/Docker/containerd 三类环境。

六层网络模型

层级 核心问题 关键命令
① 命名空间层 容器是否在正确的 netns?接口是否存在? ip netns, nsenter, crictl inspect
② 链路层 veth pair 是否成对、UP、MTU 一致? ip link, bridge link, ethtool
③ 地址与路由层 IP/CIDR/GW 正确?默认路由存在? ip addr, ip route, ip -br addr
④ 转发与 NAT 层 iptables/nft FORWARD & MASQUERADE 生效? iptables -L -n -v, iptables -t nat -L -n -v
⑤ 主机与内核层 ip_forward、rp_filter、bridge-nf-call-iptables 等阻断? sysctl net.ipv4.ip_forward, sysctl net.ipv4.conf.all.rp_filter
⑥ 集群与策略层(K8s) CNI/kube-proxy/NetworkPolicy/Service/Endpoint 一致? kubectl get pod,svc,ep -A, kubectl get netpol -A

30 秒速查(极速收敛)

  1. K8s Pod 状态kubectl get pod -A -o wide → 看 STATUS / IP / NODE 字段
  2. Service 与 Endpointkubectl get svc,ep -A → 看 CLUSTER-IP / PORT(S) / ENDPOINTS 是否为空
  3. 节点网桥与路由ip -br addr + ip route → cni0/docker0 是否 UP,default via 可达
  4. 转发开关sysctl net.ipv4.ip_forward → 值是否为 1
  5. NAT 命中iptables -t nat -L -n -v → pkts/bytes 增长,MASQUERADE 是否存在

容器网络共性

无论 Docker 还是 containerd,本质都一样:容器在独立 netns 里,与宿主机通过 veth pair 连接,主机侧接网桥(docker0/cni0),再通过路由/NAT 出去。

Docker(bridge)常见断点: docker0 MTU 不一致、DOCKER-USER 链策略过严、daemon 重启后规则丢失 K8s + CNI 常见断点: Pod IP 分配失败、Service → Endpoint 映射不一致、NetworkPolicy 默认拒绝 containerd/crictl: 无 Docker CLI,用 crictl + ctr + nsenter 看真实运行态

K8s 四种常见网络故障

故障类型 快速定位 常见根因
Pod 间不通(同节点通,跨节点不通) 检查路由发布和隧道设备 路由发布异常 / 隧道设备异常 / 内核参数重置
Pod 能出公网但回不来 sysctl rp_filter 检查 rp_filter 严格模式(=1)丢弃回包
Service 不通但 Pod IP 直连可通 kubectl get svc,ep 看 ENDPOINTS Selector/TargetPort 不匹配 / kube-proxy 异常
NetworkPolicy 假性故障 kubectl get netpol -A PodSelector 或规则未放行默认流量

案例复盘:rp_filter 导致 30% 超时

升级后调用下游接口 30% 超时,排查发现超时 Pod 集中在 Node-B,该节点 rp_filter=1 而 Node-A 为 2。回包到宿主机后被 rp_filter 丢弃,未进入容器 veth。修复后恢复,后续做持久化基线治理。

排障 SOP

  1. 先判影响面: 单 Pod / 单节点 / 全局
  2. 再判链路层级: 容器内 → 宿主机 → 集群策略
  3. 命令必须带字段观察点
  4. 每次只改一个变量,改完立即验证
  5. 临时修复后必须做持久化和基线固化

容易被带偏的误区

DNS 问题当网络问题 / 监听地址当连通性问题 / NetworkPolicy 当 CNI 故障 / 单节点内核参数漂移当全局故障 / MTU 不一致当偶发超时

常用命令速查

  • 容器内: ip addr · ip route · ss -lntp
  • 宿主机: ip -br link · bridge fdb show · iptables -L -n -v
  • K8s 控制面: kubectl get pod,svc,ep -A -o wide · kubectl get netpol -A
  • containerd: crictl inspect <cid> · nsenter -t <pid> -n ip route

关联页面

页面 关联点
k8s-service-access-troubleshooting K8s Service/Ingress 网络排障十步工作流(6 层模型第 ⑥ 层深入)
network-troubleshooting-order 服务器网络排障七步法(6 层模型第 ③~⑤ 层补充)
docker-production-pitfalls Docker bridge 网络踩坑(6 层模型第 ②~⑤ 层 Docker 视角)
linux-kernel-tuning-production rp_filter 内核参数调优说明(6 层模型第 ⑤ 层深入)
k8s-top10-troubleshooting-checklist K8s 10 大故障场景快速参考(网络故障层级识别)
k8s-load-balancing-deep-practice K8s 负载均衡深度实践(Service 数据面/kube-proxy 模式/生产级流量治理)