15张图超硬核讲解 Kubernetes 网络,我不信网工不会看( 二 )

 
硬件交换,为每个Pod分配一个虚拟网卡,这样一来,Pod与Pod之间的连接关系就会变得非常清晰,因为近乎物理机之间的通信基础 。如今大多数网卡都支持SR-IOV功能,该功能将单一的物理网卡虚拟成多个VF接口,每个VF接口都有单独的虚拟PCIe通道,这些虚拟的PCIe通道共用物理网卡的PCIe通道 。

15张图超硬核讲解 Kubernetes 网络,我不信网工不会看

文章插图
 
图:Virtual networking modes: bridging, multiplexing and SR-IOV
在kubernetes中 IPVLAN 这种网络模型下典型的CNI有,multus 与 danm 。
multus
multus 是 intel 开源的CNI方案,是由传统的 cni 与 multus 组成,并且提供了 SR-IOV CNI 插件使 K8s pod 能够连接到 SR-IOV VF。这是使用了 IPVLAN/MACVLAN 的功能 。
当创建新的Pod后,SR-IOV 插件开始工作 。配置 VF 将被移动到新的 CNI 名称空间 。该插件根据 CNI 配置文件中的 “name” 选项设置接口名称 。最后将VF状态设置为UP 。
下图是一个 Multus 和 SR-IOV CNI 插件的网络环境,具有三个接口的 pod 。
 
  • eth0 是 flannel 网络插件,也是作为Pod的默认网络
  • VF 是主机的物理端口 ens2f0 的实例化 。这是英特尔X710-DA4上的一个端口 。在Pod端的 VF 接口名称为 south0。
  • 这个VF使用了 DPDK 驱动程序,此 VF 是从主机的物理端口 ens2f1 实例化出的 。这个是英特尔® X710-DA4上另外一个端口 。Pod 内的 VF 接口名称为 north0 。该接口绑定到 DPDK 驱动程序 vfio-pci 。
 
15张图超硬核讲解 Kubernetes 网络,我不信网工不会看

文章插图
 
图:Mutus networking Architecture overlay and SR-IOV
 
Notes:terminology NIC:network interface card,网卡SR-IOV:single root I/O virtualization,硬件实现的功能,允许各虚拟机间共享PCIe设备 。VF:Virtual Function,基于PF,与PF或者其他VF共享一个物理资源 。PF:PCIe Physical Function,拥有完全控制PCIe资源的能力DPDK:Data Plane Development Kit
 
于此同时,也可以将主机接口直接移动到Pod的网络名称空间,当然这个接口是必须存在,并且不能是与默认网络使用同一个接口 。这种情况下,在普通网卡的环境中,就直接将Pod网络与Node网络处于同一个平面内了 。
15张图超硬核讲解 Kubernetes 网络,我不信网工不会看

文章插图
 
图:Mutus networking Architecture overlay and ipvlan
danm
DANM是诺基亚开源的CNI项目,目的是将电信级网络引入kubernetes中,与multus相同的是,也提供了SR-IOV/DPDK 的硬件技术,并且支持IPVLAN.
Overlay Network Model
什么是Overlay
叠加网络是使用网络虚拟化技术,在 underlay 网络上构建出的虚拟逻辑网络,而无需对物理网络架构进行更改 。本质上来说,overlay network 使用的是一种或多种隧道协议 (tunneling),通过将数据包封装,实现一个网络到另一个网络中的传输,具体来说隧道协议关注的是数据包(帧) 。
15张图超硬核讲解 Kubernetes 网络,我不信网工不会看

文章插图
 
图:overlay network topology
常见的网络隧道技术
 
  • 通用路由封装 ( Generic Routing Encapsulation ) 用于将来自 IPv4/IPv6的数据包封装为另一个协议的数据包中,通常工作与L3网络层中 。
  • VxLAN (Virtual Extensible LAN),是一个简单的隧道协议,本质上是将L2的以太网帧封装为L4中UDP数据包的方法,使用 4789 作为默认端口 。VxLAN 也是 VLAN 的扩展对于 4096( 位 VLAN ID) 扩展为1600万( 位 VNID )个逻辑网络 。
【15张图超硬核讲解 Kubernetes 网络,我不信网工不会看】 
这种工作在 overlay 模型下典型的有 flannel 与 calico 中的的 VxLAN, IPIP 模式 。
IPIP
IP in IP 也是一种隧道协议,与 VxLAN 类似的是,IPIP 的实现也是通过linux内核功能进行的封装 。IPIP 需要内核模块 ipip.ko 使用命令查看内核是否加载IPIP模块lsmod | grep ipip ;使用命令modprobe ipip 加载 。


推荐阅读