节点侧抓包看什么
在 Kubernetes 节点上抓包,能看到该节点上所有 Pod 的流量以及节点之间的 overlay 封装流量,适合排查跨 Pod 通信问题。难点不在采集本身,而在过滤:节点上流量又多又杂,必须先收窄到目标 Pod 地址或端口再开始采集,否则抓包文件会迅速膨胀到无法处理。
基本信息
| 适用平台 | Linux 节点,使用 tcpdump 或 dumpcap |
|---|---|
| 采集接口 | 物理接口与 overlay 隧道接口(如 VXLAN) |
| 过滤要点 | 目标 Pod IP 与端口 |
| 前置信息 | 先从集群接口查到 Pod 对应的 IP |
典型使用场景
- 排查跨 Pod 通信异常
- 确认节点间 overlay 封装是否正常
- 定位服务网格 sidecar 与业务容器之间的流量
- 排查集群内 DNS 解析异常
- 验证网络策略改动是否按预期生效
采集与过滤
采集与过滤
tcpdump -i any -nn 'host 10.244.2.7 and port 8080'
# 先按目标 Pod 地址与端口收窄,避免抓到全节点流量
tcpdump -i any -nn -w pod.pcap 'host 10.244.2.7'
# 落盘后交给分析工具,overlay 场景要同时看外层与内层地址
# 容器内抓包需进入对应网络命名空间;节点抓包覆盖面更广但噪音也更多采集位置对照
| 采集位置 | 能看到 | 注意 |
|---|---|---|
| 节点物理接口 | 所有 Pod 出节点的流量 | overlay 场景看到的是封装形态 |
| 节点 overlay 接口 | 节点间封装流量 | 需展开内层才能看到业务报文 |
| 容器内 | 单个容器的视角 | 需进入对应网络命名空间 |
| Service 访问路径 | 可能经过多跳转发 | 时延里包含额外的转发开销 |
节点抓包量级很大,务必先把过滤器收窄到目标 Pod 再开抓。使用 any 接口可以覆盖多个接口,但要注意同一报文可能在多个接口上各出现一次,统计时要按接口字段区分,避免重复计数。
物理接口与隧道接口并存时,接口选错就看不到 overlay 内层。另外如果只知道 Pod 名而不知道 IP,要先从集群接口把地址查出来再抓,否则过滤条件根本写不出来。
排查顺序
- 先从集群接口查出目标 Pod 的 IP 与所在节点
- 在节点上按目标地址加端口收窄过滤条件
- 确认采集接口选对:物理接口看封装,隧道接口看内层
- 分析时同时核对两端节点,区分单点问题与路径问题
- 结合集群网络策略与服务配置,确认转发规则是否符合预期