写点什么

38 K8S 之 CNI 插件与选型

  • 2021 年 12 月 08 日
  • 本文字数:1745 字

    阅读完需:约 6 分钟

38 K8S之CNI插件与选型

CNI 插件把 main 和 ipam 分开,为用户提供了自由组合它们的机制,甚至一个 CNI 插件也可以直接调用另外一个插件。CNI 项目中有两个代码仓库:一个是提供用于开发 CNI 网络插件的库文件 libcni,以及命令行工具 cnitool 的 containernetworking/cni;另一个是 CNI 内置插件程序 containernetworking/plugins


CNI 还支持使用 plugins 字段组合多个 CNI 网络插件依次进行网络配置,以实现将核心网络管理插件和 meta 插件等相组合,以堆叠出一个完整的解决方案。各插件以列表形式依次定义,前一个插件的配置结果将传递给后一个插件,直到列表中的所有插件都成功配置完成


CNI 规范负责连接容器管理系统网络插件两类组件,它们之间通过 JSON 格式的文件进行通信,以完成容器网络管理。具体的管理操作均由插件来实现,包括创建容器 netns(网络名称空间)、关联网络接口到对应的 netns,以及给网络接口分配 IP 等。


Flannel:由 CoreOS 提供的 CNI 网络插件,也是最简单、最受欢迎的网络插件;它使用 VXLAN 或 UDP 协议封装 IP 报文来创建 Overlay 网络,并借助 etcd 维护网络的分配信息,同一节点上的 Pod 间通信可基于本地虚拟网桥(cni0)进行,而跨节点的 Pod 间通信则要由 flanneld 守护进程封装隧道协议报文后,通过查询 etcd 路由到目的地;Flannel 也支持 host-gw 路由模型。


Calico:同 Flannel 一样广为流行的 CNI 网络插件,以灵活、良好的性能和网络策略所著称。Calico 是路由型 CNI 网络插件,它在每台机器上运行一个 vRouter,并基于 BGP 路由协议在节点之间路由数据包。Calico 支持网络策略,它借助 iptables 实现访问控制功能。另外,Calico 也支持 IPIP 型的 Overlay 网络。


Canal:由 Flannel 和 Calico 联合发布的一款统一网络插件,它试图将二者的功能集成在一起,由前者提供 CNI 网络插件,由后者提供网络策略。


WeaveNet:由 Weaveworks 提供的 CNI 网络插件,支持网络策略。WeaveNet 需要在每个节点上部署 vRouter 路由组件以构建起一个网格化的 TCP 连接,并通过 Gossip 协议来同步控制信息。在数据平面上,WeaveNet 通过 UDP 封装实现 L2 隧道报文,报文封装支持两种模式:一种是运行在用户空间的 sleeve(套筒)模式,另一种是运行在内核空间的 fastpath(快速路径)模式,当网络拓扑不适合 fastpath 模式时,Weave 将自动切换至 sleeve 模式。


Multus CNI:多 CNI 插件,实现了 CNI 规范的所有参考类插件(例如 Flannel、MAC VLAN、IPVLAN 和 DHCP 等)和第三方插件(例如 Calico、Weave 和 Contiv 等),也支持 Kubernetes 中的 SR-IOV、DPDK、OVS-DPDK 和 VPP 工作负载,以及 Kubernetes 中的云原生应用程序和基于 NFV 的应用程序,是需要为 Pod 创建多网络接口时的常用选择。


Antrea:一款致力于成为 Kubernetes 原生网络解决方案的 CNI 网络插件,它使用 OpenvSwitch 构建数据平面,基于 Overlay 网络模型完成 Pod 间的报文交换,支持网络策略,支持使用 IPSec ESP 加密 GRE 隧道流量。


DAMM:由诺基亚发布的电信级的 CNI 网络插件,支持具有高级功能的 IP VLAN 模式,内置 IPAM 模块,可管理多个集群范围内的不连续三层网络;支持通过 CNImeta 插件将网络管理功能委派给任何其他网络插件。


kube-router:kube-router 是 Kubernetes 网络的一体化解决方案,它可取代 kube-proxy 实现基于 ipvs 的 Service,能为 Pod 提供网络,支持网络策略以及拥有完美兼容 BGP 协议的高级特性。


选择网络插件时应该基于底层系统环境限制、容器网络的功能需求和性能需求 3 个重要的评估标准来衡量插件的适用性。

  • 底层系统环境限制:公有云环境多有自己专有的实现,例如 Google GCE、AzureCNI、AWS VPC CNI 和 Aliyun Terway 等,它们通常是相应环境上较佳的选择。若虚拟化环境限制较多,除 Overlay 网络模型别无选择,则可用的方案有 FlannelVXLAN、Calico IPIP、Weave 和 Antrea 等。物理机环境几乎支持任何类型的网络插件,此时一般应该选择性能较好的 Calico BGP、Flannel host-gw 或 DAMM IPVLAN 等。

  • 容器网络功能需求:支持 NetworkPolicy 的解决方案以 Calico、WeaveNet 和 Antrea 为代表,而且后两个支持节点到节点间的通信加密。而大量 Pod 需要与集群外部资源互联互通时,应该选择 Underlay 网络模型一类的解决方案。

  • 容器网络性能需求:Overlay 网络中的协议报文有隧道开销,性能略差,而 Underlay 网络则几乎不存这方面的问题,但 Overlay 或 Underlay 路由模型的网络插件支持较快的 Pod 创建速度,而 Underlay 模型中的 IP VLAN 或 MAC VLAN 模式则较慢。


发布于: 2 小时前阅读数: 8
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
38 K8S之CNI插件与选型