<返回更多

calico VPP dataplane

2022-02-16    LStack朗澈云
加入收藏

学习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架构如下。

「技术干货」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

 

7. 抓vpp的报文(无法用tcpdump,需要用calivppctl抓包,结合wireshark分析),略。

 

8. 可以看到是vpp内的tap0回的。

「技术干货」calico VPP dataplane

 


「技术干货」calico VPP dataplane

 

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)提供混合云/边缘云场景下云原生应用开发测试、交付、运维一站式服务,帮助企业采用云原生敏捷开发交付方法论,从而提高软件开发人员效率、减少运维成本,加快数字化转型,并最终实现业务创新。

 

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>