容器网络模型与常见排错:从 veth、bridge 到 iptables
梳理 Linux 容器网络的数据面构成,覆盖 veth、网桥、iptables 与常见故障,帮助快速定位容器间不通、跨节点访问失败等问题。
容器网络一直是「看起来简单、出问题就玄学」的领域。想排障,得先把数据面拆开看:容器内的流量其实沿着 veth pair → 网桥(或 overlay)→ iptables → 物理网卡 这条链路走。本文给一张实用排障地图。
第一步:看容器内接口。 进容器 ip a,你会发现 eth0 其实是一个 veth 的一端,另一端在宿主机,名字叫 vethXXXX。用 ip link 在宿主机上能看到对应关系。如果 eth0 是 DOWN,多半是 docker network 或 CNI 初始化失败。
第二步:看网桥与路由。 默认 docker bridge 是 docker0,所有容器挂在它上。自定义 network 则是 bridge 驱动生成的 br-xxxx。ip route 确认默认网关,容器要访问外网必须经过网桥的 NAT。
第三步:看 iptables。 这是重灾区。iptables -L -n 里 FORWARD 链默认对 overlay 网络常有 DROP 规则。跨节点不通,常见原因是节点间没有放行 CNI 的 overlay 协议(比如 Calico 走 179、Flannel 走 4789)。用 tcpdump 在网桥和物理网卡上各抓一次,对比丢包点,能定位到是防火墙拦了还是路由没配。
常见故障清单:
- 容器内 ping 通网关、ping 不通外网:检查 NAT 是否生效、
ip_forward是否为 1。 - 跨节点访问失败:确认 overlay 协议在节点间放行,CNI 的节点 IP 路由可达。
- 服务间 DNS 解析失败:通常是 CoreDNS 副本不足或 Pod 内没有注入
--dns,先在 Pod 里cat /etc/resolv.conf。
排障的黄金法则是「分段抓包」:从容器内、到网桥、到节点网卡,逐级对比丢在哪一段。把这套顺序记下来,绝大多数容器网络问题都能在 10 分钟内定位到边界。
- 点赞
- 收藏
- 关注作者
评论(0)