calico VPP dataplane

学习calico vpp包括:
 
1. vpp dapaplane架构 。
 
2. 搭建k8s vpp dataplane环境,实践一下 。
 
vpp
 
VPP(Vector Packet Processor)是一个高性能、开源的用户空间网络数据平面,用C语言编写,在fd.io旗下开发 。它支持许多标准网络功能(L2、L3路由、NAT、封装),并且可以使用插件轻松扩展 。VPP数据平面使用插件来有效地实现Kubernetes服务负载平衡和Calico策略 。
 
简单来说,它就是个跑在用户空间的TCP/IP协议栈 。
 
calico vpp dataplane
 
使用场景
 
对网络性能要求高的场景,比如直播、游戏、AI训练...
 
特性
 
calico vpp数据平面与其它数据面方案相比具有以下特性:
 
1. 扩展到更高的吞吐量,尤其是在启用WireGuard加密的情况下 。
 
2. 使用IPsec进一步提高加密性能 。
 
3. 无需kube-proxy即可原生支持Kubernetes服务,其中:
 
- 减少数据包到service的延迟 。
 
- 访问pod时保留外部源IP 。
 
架构
 
vpp dataplane架构如下 。

calico VPP dataplane

文章插图
 

calico VPP dataplane

文章插图
 
如图2,计算节点上会跑一个calico-vpp-node的pod,里面包括2个容器:
 
1. VPP manager:负责处理VPP启动配置和生命周期 。当manger启动时,它会检查并配置自己的上行链路口,一般就是主机的物理网口 。启动后,原本所有的网络设备都将由vpp接管,并且它会创建一个tap0的接口在主机上,代表原来的主机网卡 。
 
2. Calico VPP agent:负责calico的所有VPP运行时配置,主要包含了4个组件:
 
- CNI Server:就是用来对接calico cni接口的 。需要负责容器网卡的创建、删除,这种方案中网卡用的是tap设备 。
 
- BGP Daemon:跨节点通信时仍然默认采用BGP方案,区别是这里它的BGP client是一个Go的BGP守护进程,而普通方案中是用的bird作为BGP client 。使用IPIP、VXLAN时,隧道设备需要在vpp中创建,不能用内核模块中的 。
 
- Service loadbalancing:等于VPP的kube-proxy,通过vpp实现的NAT插件实现k8s里面的service,而不是用基于内核的iptables、ipvs 。
 
- Policies:负责实现Felix的策略 。原来的网络策略一般是基于内核的iptables,这里要通过vpp实现 。
 
驱动支持
calico VPP dataplane

文章插图
 
支持上面几种,其中xdp要求内核5.4以上(calico eBPF也一样),dpdk一般要网卡驱动及复杂配置 。
 
vpp dataplane实践
 
实验目的:了解容器数据包到达主机物理网口的packet flow 。
 
1. 环境:centos8.4、内核4.18.0、kubetnetes1.24 。
 
2. 具体安装步骤略(看官网) 。
 
- 配置CALICOVPP_NATIVE_DRIVER使用af_packet 。
 
3. 安装完查看集群pod 。
calico VPP dataplane

文章插图
 
每个节点上有一个calico-vpp-node pod,负责vpp的配置 。
 
4. 创建2个pod,如下 。
calico VPP dataplane

文章插图
 
创建pod时,最终由vpp agent响应cni请求 。它在pod所在net namespace中创建eth0(tun),在vpp内创建另一端tun,所有从pod出来的流量将转发给vpp 。
 
5. 查看一下vpp创建的各个接口 。
 
查看pod网卡,是一个tun设备,(ip tuntap list可以查看tap、tun设备) 。
calico VPP dataplane

文章插图
 
查看主机网卡,变成了tap设备(原来的eth0变成了vpp内的host-eth0,也就是说主机通信也会受到影响?) 。
calico VPP dataplane

文章插图
 
查看vpp内网卡,包含了主机网卡、pod tun的对端设备(这里的tun1、tun2对于上面2个pod的对端tun设备),如果配置了ipip、vxlan他们的设备应该也会出现在这里面 。
calico VPP dataplane

文章插图
 
6. 抓pod的报文,由于是tun设备,raw ip,所以没有mac地址 。
calico VPP dataplane


推荐阅读