学习calico vpp包括:
1. vpp dapaplane架构。
2. 搭建k8s vpp dataplane环境,实践一下。
vpp
VPP(Vector Packet Processor)是一个高性能、开源的用户空间网络数据平面,用C语言编写,在fd.io旗下开发。它支持许多标准网络功能(L2、L3路由、NAT、封装),并且可以使用插件轻松扩展。VPP数据平面使用插件来有效地实现Kube.NETes服务负载平衡和Calico策略。
简单来说,它就是个跑在用户空间的TCP/IP协议栈。
calico vpp dataplane
使用场景
对网络性能要求高的场景,比如直播、游戏、AI训练...
特性
calico vpp数据平面与其它数据面方案相比具有以下特性:
1. 扩展到更高的吞吐量,尤其是在启用WireGuard加密的情况下。
2. 使用IPsec进一步提高加密性能。
3. 无需kube-proxy即可原生支持Kubernetes服务,其中:
- 减少数据包到service的延迟。
- 访问pod时保留外部源IP。
架构
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实现。
驱动支持
支持上面几种,其中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-node pod,负责vpp的配置。
4. 创建2个pod,如下。
创建pod时,最终由vpp agent响应cni请求。它在pod所在net namespace中创建eth0(tun),在vpp内创建另一端tun,所有从pod出来的流量将转发给vpp。
5. 查看一下vpp创建的各个接口。
查看pod网卡,是一个tun设备,(ip tuntap list可以查看tap、tun设备)。
查看主机网卡,变成了tap设备(原来的eth0变成了vpp内的host-eth0,也就是说主机通信也会受到影响?)。
查看vpp内网卡,包含了主机网卡、pod tun的对端设备(这里的tun1、tun2对于上面2个pod的对端tun设备),如果配置了ipip、vxlan他们的设备应该也会出现在这里面。
6. 抓pod的报文,由于是tun设备,raw ip,所以没有mac地址。
7. 抓vpp的报文(无法用tcpdump,需要用calivppctl抓包,结合wireshark分析),略。
8. 可以看到是vpp内的tap0回的。
vpp packet flow可以看calico官网。(
https://projectcalico.docs.tigera.io/reference/vpp/host-network)
总结
简单总结一下,calico vpp dataplane的主要特点。
1. 单节点上通过不同程度的bypass内核,加速报文转发。配合不同native driver可以实现不同程度的bypass内核、直通,例如af_xdp、dpdk等,一般需要高内核或者硬件驱动支持。
2. 跨节点通信仍采用BGP或overlay方案,区别是bgp、ipip、vxlan等等这些网络栈能力要由用户态的vpp来提供。
LStack产品简介
面向行业应用开发商(ISV/SI)提供混合云/边缘云场景下云原生应用开发测试、交付、运维一站式服务,帮助企业采用云原生敏捷开发交付方法论,从而提高软件开发人员效率、减少运维成本,加快数字化转型,并最终实现业务创新。