流量图2
下面给你一张**“生产可用级排查表格(Pod 访问宿主机端口超时)”**,按你要求:分同节点 / 跨节点 + iptables / conntrack / 路由 / CNI + 精确命令 + 判断结论。
🧠 Pod → 宿主机端口超时排查表(生产级)
| 排查层级 | 场景 | 检查命令 | 关键观察点 | 结论判断 |
|---|---|---|---|---|
| 🧪 流量是否到宿主机 | 同/跨节点 | tcpdump -ni any host <pod-ip> and port <port> |
是否看到 SYN | ❌ 没包 = CNI / 路由问题 |
| 🧪 路由路径确认 | 同/跨节点 | ip route get <host-ip> |
dev eth0 / via node | 同节点=LOCAL / 跨节点=overlay |
| 🧱 iptables INPUT | 同节点 | iptables -nvL INPUT --line-numbers |
是否 DROP/REJECT | ❌ 命中DROP = 防火墙问题 |
| 🧱 iptables FORWARD | 同/跨节点 | iptables -nvL FORWARD |
Pod流量是否被拒 | ❌ DROP = NetworkPolicy |
| 🧱 NAT(跨节点关键) | 跨节点 | iptables -t nat -nvL POSTROUTING |
MASQUERADE 是否存在 | ❌ 没SNAT = 回包失败 |
| 🧠 conntrack 是否存在 | 同/跨节点 | conntrack -L | grep <pod-ip> |
是否有记录 | ❌ 无记录 = PREROUTING未进入 |
| 🧠 conntrack 状态 | 同/跨节点 | cat /proc/net/nf_conntrack |
UNREPLIED / INVALID | ❌ UNREPLIED = 回包丢 |
| 🧠 conntrack 是否满 | 同/跨节点 | cat /proc/sys/net/netfilter/nf_conntrack_countnf_conntrack_max |
是否接近 max | ❌ 满 = 随机丢包 |
| 🧱 服务监听状态 | 同/跨节点 | ss -lntp | grep <port> |
是否监听 0.0.0.0 | ❌ 127.0.0.1 = Pod访问失败 |
| 🧱 kube-proxy(Service路径) | 跨节点 | iptables -t nat -nvL KUBE-SERVICES |
DNAT是否存在 | ❌ 没DNAT = Service失败 |
| 🌐 CNI 网络 | 跨节点 | ip linkbridge fdb show |
vxlan/bridge是否正常 | ❌ FDB空 = 跨节点不通 |
| 🌐 VXLAN 隧道 | 跨节点 | tcpdump -ni eth0 udp port 8472 |
是否有封装流量 | ❌ 无流量 = overlay断 |
| 🔁 回包路径 | 跨节点 | tcpdump -ni any port <port> |
SYN-ACK 是否返回 | ❌ 无回包 = SNAT/路由问题 |
🧠 一眼定位规则(最重要)
🔴 1. 宿主机根本没收到包
👉 看:
-
CNI
-
路由
-
VXLAN
🟠 2. 收到 SYN,但没回包
👉 看:
-
iptables INPUT
-
应用是否监听
-
防火墙
🟡 3. conntrack 没记录
👉 看:
-
raw table
-
NOTRACK
-
nf_conntrack 模块
🟢 4. conntrack 有但 UNREPLIED
👉 看:
-
SNAT(跨节点)
-
回程路由
-
防火墙
🔵 5. conntrack 正常但超时
👉 看:
-
应用卡住
-
accept backlog
-
SYN flood / socket limit
🧠 最快定位组合(生产必用)
tcpdump + conntrack + iptables 三连
tcpdump -ni any host <pod-ip>
conntrack -L | grep <pod-ip>
iptables -nvL
🧠 一句话总结
👉 Pod 访问宿主机超时 = 三层拆解
-
没包 → CNI / 路由
-
有包没回 → iptables / 应用
-
conntrack异常 → NAT / 状态机
如果你要,我可以再给你一版:
👉 “一条包在 Linux 内核里从 skb 到 socket 的完整 debug 表(源码级定位)”
那一版就是直接定位 kube-proxy / kubelet / CNI bug 用的。
