基于eBPF实现vxlan封装和解封装

不同于cilium基于Linux内核完成vxlan封装和解封装的逻辑,这里基于eBPF自己完成vxlan封装和解封装,不走Linux内核vxlan模块和ct模块。

eBPF功能
1 响应arp请求
2 网口报文跳转
3 vxlan封装和解封装
tc_ingress和tc_egress都加载到主机veth口和主机网口ens33上,在ens33上做vxlan封装和解封装。

eBPF封装vxlan:通过bpf_skb_adjust_room函数,增加ip头+udp头+vxlan头+以太网头,并填充字段值。
eBPF解封装vxlan:通过bpf_skb_adjust_room函数,删除ip头+udp头+vxlan头+以太网头,并更新原外层以太网头源mac和目的mac。

打通跨节点流量

# add_veth.sh
# node1
ip netns add ns
ip link add veth0 type veth peer name veth1
ip link set veth1 netns ns
ip netns exec ns ip addr add 100.1.1.1/24 dev veth1
ip netns exec ns ip link set dev veth1 up
ip netns exec ns ip link set veth1 mtu 1450
ip link set veth0 mtu 1450
ip netns exec ns ip route add default dev veth1
ip link set dev veth0 up
# node2
ip netns add ns
ip link add veth0 type veth peer name veth1
ip link set veth1 netns ns
ip netns exec ns ip addr add 101.1.1.1/24 dev veth1
ip netns exec ns ip link set dev veth1 up
ip netns exec ns ip link set veth1 mtu 1450
ip link set veth0 mtu 1450
ip netns exec ns ip route add default dev veth1
ip link set dev veth0 up

# add_tc.sh
clang -c ./ebpf-test/handle/tc_bond_egress.c -o ./ebpf-test/handle/tc_bond_egress.o -target bpf -O2 -g
clang -c ./ebpf-test/handle/tc_bond_ingress.c -o ./ebpf-test/handle/tc_bond_ingress.o -target bpf -O2 -g
clang -c ./ebpf-test/handle/tc_veth_egress.c -o ./ebpf-test/handle/tc_veth_egress.o -target bpf -O2 -g
clang -c ./ebpf-test/handle/tc_veth_ingress.c -o ./ebpf-test/handle/tc_veth_ingress.o -target bpf -O2 -g

tc qdisc del dev ens33 clsact
tc qdisc add dev ens33 clsact
tc qdisc del dev veth0 clsact
tc qdisc add dev veth0 clsact

tc filter add dev ens33 egress bpf da obj ./ebpf-test/handle/tc_bond_egress.o sec tc
tc filter add dev ens33 ingress bpf da obj ./ebpf-test/handle/tc_bond_ingress.o sec tc
tc filter add dev veth0 ingress bpf da obj ./ebpf-test/handle/tc_veth_egress.o sec tc
tc filter add dev veth0 egress bpf da obj ./ebpf-test/handle/tc_veth_ingress.o sec tc

确认没有走Linux内核ct模块

 

性能测试

2台vmware虚拟机1U1G,网卡带宽是1000Mb/s(非实际值)。
容器跨节点tcp性能接近1Gb/s。

容器跨节点64字节小包,tcp pps性能316k。

容器跨节点udp性能600Mb/s。

主机跨节点tcp性能4Gb/s。

主机跨节点64字节小包,tcp pps性能358k。

主机跨节点udp性能748Mb/s。

posted on 2024-11-09 11:18  王景迁  阅读(167)  评论(0)    收藏  举报

导航