不同于cilium基于Linux内核完成vxlan封装和解封装的逻辑,这里基于eBPF自己完成vxlan封装和解封装,不走Linux内核vxlan模块。
tc_ingress和tc_egress加载到主机veth口和主机网口ens33上。
eBPF封装vxlan:通过bpf_skb_adjust_room函数,增加ip头+udp头+vxlan头+以太网头。
打通跨节点流量
# 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 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 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
标签:封装,eBPF,ip,dev,add,test,handle,tc,vxlan From: https://www.cnblogs.com/WJQ2017/p/18536469