Cilium + ebpf 系列文章- XDP (eXpress data Path)(四)
前言:
现有网络容器的性能消耗与通信简单流程:
1、只要是Pod都有自己的网络命名空间。
2、Pod的网络命名空间由Pod内的容器使用并共享但是由暂停容器(Pause Container)管理。
3、Pod内的容器网络通过veth_pair对与主机网络命名空间打通。
上面是第一层消耗。
4、当Pod要访问其他Pod的时候,必然要经过网桥或者隧道,mca-vlan与host network场景暂时不讨论。
上面是第二层消耗。
5、当你的数据包到达其他节点的kube-proxy时,kube-proxy拦截,iptables查表。
上面是第三层消耗。
6、回包的同时会把上面3层消耗每个再*2.
ebpf技术可以将XDP类型的ebpf程序附加在物理/虚拟网卡侧,即数据包都还没有到达内核的网络数据盏之前进行拆包!通过XDP_PASS XDP_DROP动作来提前过滤数据包。
下面为演示的demo:
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>