结合抓包工具(如 tcpdump, Wireshark, bpftrace, hubble)来分析 MetalLB + Cilium + eBPF + VIP:Port 的访问流程

结合抓包工具(如 tcpdump, Wireshark, bpftrace, hubble)来分析 MetalLB + Cilium + eBPF + VIP:Port 的访问流程,可以精准验证每一步数据包的变换过程与路径跳转,有助于排查问题和深入理解网络行为。

以下是一个详细的 抓包分析步骤指南,按流程阶段划分:


🧪 抓包分析总览表

流程阶段抓包位置目的推荐工具关键点
1. ARP 宣告MetalLB Speaker 节点验证 MetalLB 是否成功广播 VIP 所属权tcpdumpARP who-has / is-at
2. 客户端请求到达VIP 所在 Node查看外部请求是否正确到达tcpdump, WiresharkVIP 为目标 IP
3. eBPF 处理前eth0 接收包前验证是否命中 Cilium eBPF hooktcpdump -i eth0, bpftraceVIP+Port
4. eBPF 执行 DNATeBPF Trace查看 VIP 是否被替换为 PodIPbpftrace, hubble observe源/目标 IP 转换
5. 本地转发veth pair 处确认数据包进入 Podtcpdump -i cilium_XXX目标为 Pod IP
6. 跨节点转发Node A & C验证是否封装、隧道协议使用tcpdump udp port 8472(VXLAN)源为 NodeA,目标为 NodeC
7. Pod 响应处理Node C查看 Pod B 的响应包出发tcpdump -i cilium_XXX源 IP 为 PodIP
8. 响应 SNATNode A or C验证响应包 SNAT 是否生效bpftrace, tcpdump源 IP 改为 VIP/Node IP
9. 客户端收到包客户端侧查看是否成功收到并匹配预期tcpdump, WiresharkVIP:Port 回复 Client

🧭 分步骤详细操作

🧩 步骤 1:抓取 ARP 广播(VIP 宣告)

# 在 MetalLB Speaker 所在节点
tcpdump -i eth0 arp and host <VIP>

观察:

ARP, Reply <VIP> is-at <MAC>

表示 Speaker 已正确宣告 VIP。


🧩 步骤 2:客户端请求到达节点

# 在 Node A,VIP 所属节点
tcpdump -i eth0 'tcp and dst host <VIP> and dst port <Port>'

确认:

  • 报文成功到达节点
  • 未被中间网络丢弃

🧩 步骤 3:eBPF 捕获数据包入口

  • bpftrace 观察 eBPF 捕获行为:
bpftrace -e 'tracepoint:net:netif_receive_skb { printf("Packet received: %s\n", comm); }'
  • 用 Hubble 观察:
hubble observe --from-ip <Client IP> --to-ip <VIP>

确认:

  • eBPF 程序已生效
  • 数据包已被重定向

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


🧩 步骤 4:验证 DNAT 后目的地址

  • 抓 Node A 的 cilium_host 接口:
tcpdump -i cilium_host

确认 VIP ➜ PodIP_B 转换是否成功


🧩 步骤 5:本地 Pod 转发确认

# 抓 Pod 的 veth 设备(如 vethXXXX)
tcpdump -i vethXXXX

目标 IP 应为 PodIP_B


🧩 步骤 6:跨节点封装验证

  • 若 Pod B 不在 Node A,则抓 VXLAN:
tcpdump -i eth0 udp port 8472

解包可见:

  • 源 IP 为 Node A
  • 目标 IP 为 Node C
  • 内层 IP 为 PodIP_B

🧩 步骤 7:Pod B 响应包发送分析

# 在 Node C 的 cilium interface 或 veth 处
tcpdump -i cilium_XXX or vethYYY

确认源 IP 为 PodIP_B,目的 IP 为客户端


🧩 步骤 8:响应 SNAT 是否执行

  • 对比不同 externalTrafficPolicy:
Cluster:
# 在 Node A 出口
tcpdump -i eth0 'tcp and src host <VIP>'
Local 且 Pod 本地:
tcpdump -i eth0 'tcp and src host <NodeIP>'

🧩 步骤 9:客户端抓包验证

tcpdump -i eth0 'tcp and port <Port>'

确认回复包:

  • 源 IP 是 VIP/NodeIP
  • 目标 IP 是客户端

🔍 进阶技巧

✅ 使用 Wireshark 分析 PCAP

tcpdump -i eth0 -w trace.pcap

导入 Wireshark,设置过滤条件:

ip.addr == <VIP> or ip.addr == <PodIP>

✅ 使用 Hubble CLI/UI(Cilium 可视化)

hubble observe

可查看:

  • VIP ➜ Pod 的转发路径
  • SNAT/DNAT 行为
  • 各节点间跳转

🧷 补充工具推荐

工具用途
tcpdump抓原始数据包
bpftrace跟踪内核 hook 行为
hubble可视化流量路径
Wireshark分析协议与封装结构
cilium monitor跟踪 eBPF datapath 中的事件

是否需要我提供一套 抓包脚本模板Wireshark 过滤表达式集合?可以进一步加速实战分析效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值