Weave Net的FastDP模式是实现容器网络层高性能数据包镜像的关键路径,它基于内核OVS模块运行,支持在数据包离开网桥前零拷贝镜像,启用需加--fastdp参数并加载openvswitch模块。

直接在容器网络层实现高性能数据包镜像,关键不在于“加装”旁路设备,而在于利用CNI插件自身的能力与内核路径协同工作。Weave Net的FastDP模式、CNI链式插件机制以及eBPF增强方案,是当前生产环境中最可行的三条技术路径。
优先启用Weave Net的FastDP镜像能力
Weave Net并非只做转发,其Fast Data Path在内核OVS模块中运行,天然支持流量复制。启用后,它能在不经过用户态转发的前提下,在数据包离开网桥前完成镜像副本生成。
- 启动时添加--fastdp参数,并确保目标主机已加载openvswitch内核模块(
modprobe openvswitch) - 镜像目标需部署为独立容器,绑定到同一Weave网络但配置为promiscuous mode(混杂模式),例如:
ip link set dev weave0 up; ip link set dev weave0 address 02:00:00:00:00:01 - 通过Weave CLI设置镜像规则:
weave expose --name=mirror-sink --ip=10.32.0.254/32,再用iptables -t mangle -A PREROUTING -d 10.32.0.254 -j TEE --gateway 10.32.0.253将副本导向该地址
基于CNI链式插件注入镜像逻辑
若使用Calico、Cilium等主流CNI,可不改动主插件,而是通过CNI链式调用插入轻量级镜像插件(如cni-mirror或自定义eBPF程序)。该方式兼容Underlay网络,且不影响主网络策略执行。
- 编写mirroring.conf并置于
/etc/cni/net.d/,指定"type": "cni-mirror",并声明源接口(如"hostInterface": "eth0")、目标IP和端口 - 镜像插件在CNIADD阶段注册eBPF TC(Traffic Control)程序到veth host端,用bpf_clone_redirect()复制包并重定向至监听容器
- 目标容器运行gopacket或pcap-ng服务,接收UDP封装的原始包(建议用VXLAN封装以保留原始二层头)
用eBPF替代传统iptables/TEE实现零拷贝镜像
传统TEE或NFLOG在高吞吐下易成瓶颈。eBPF程序可直接挂载到TC ingress/egress点,在SKB结构体层面克隆并发送副本,避免上下文切换与内存拷贝。
- 使用libbpf开发一个tc clsact程序,匹配目标命名空间或pod标签(通过cgroup v2路径识别)
- 在eBPF代码中调用bpf_skb_clone()获取副本,再用bpf_redirect_map()发往预设的per-CPU map中的镜像socket
- 用户态守护进程监听该socket,按需写入pcap文件或转发至Kafka/Fluent Bit,延迟稳定在
不复杂但容易忽略:所有镜像路径都必须绕过conntrack,否则副本包会触发连接状态冲突;建议在eBPF或iptables中对镜像流添加NOTRACK标记。


















