【译】比较Kubernetes容器网络接口(CNI)供应商

一、前言

Kubernetes作为一个高度模块化的开源项目,在网络实施方面提供了很大的灵活性。在Kubernetes生态系统中出现了许多项目,使容器之间的通信变得简单、一致和安全。

CNI是容器网络接口的缩写,是这些项目中的一个,它支持基于插件的功能,以简化Kubernetes的网络。CNI背后的主要目的是为管理员提供足够的控制,以监控通信,同时减少手动生成网络配置的开销。

通过CNI,通信是通过一个集成的插件发生的,该插件旨在通过允许Kubernetes供应商实现自定义的网络模型,为你的所有pod提供一个一致和可靠的网络。

CNI插件分配了命名空间隔离、流量和IP过滤等功能,在默认情况下,Kubernetes Kube-Net插件不提供这些功能。假设一个开发者想要实现这些高级网络功能。在这种情况下,他们必须使用带有容器网络接口(CNI)的CNI插件,使网络的创建和管理更容易。

市场上有各种CNI插件。但是对于这个博客,我们将讨论最流行的开源的,如Flannel、Calico、WeaveNet、Cilium和Canal。在我们开始讨论不同的CNI插件列表之前,让我们先快速了解一下CNI。

二、什么是容器网络接口(CNI)?

CNI是一个网络框架,它允许通过一组去编写的规范和库来动态配置网络资源。插件提到的规范概述了一个接口,它将配置网络,提供IP地址,并保持多主机连接。

在Kubernetes背景下,CNI与kubelet无缝集成,允许使用 underlay 或 overlay 网络在pod之间自动配置网络。底层网络被定义在由路由器和交换机组成的网络层的物理层面。相比之下,overlay 网络使用VxLAN等虚拟接口来封装网络流量。

一旦指定了网络配置类型,运行时就会定义一个供容器加入的网络,并调用CNI插件将接口添加到容器命名空间,并通过调用IPAM(IP地址管理)插件来分配链接的子网络和路由。

除了Kubernetes网络,CNI还支持基于Kubernetes的平台,如OpenShift,通过软件定义的网络(SDN)方法提供整个集群的统一容器通信。

2.1. Flannel

由CoreOS开发的Flannel是目前Kubernetes最成熟的开源CNI项目之一。Flannel提供了一个易于使用的网络模型,可以部署覆盖基本的Kubernetes网络配置和管理用例。

Flannel通过配置一个overlay网络运行,为每个Kubernetes集群节点分配子网,用于内部IP地址分配。子网的租赁和管理是通过一个名为flanneld的守护神代理完成的,它被打包成一个二进制文件,以便在Kubernetes集群和发行版上轻松安装和配置。

在分配IP地址后,Flannel利用Kubernetes、etcd集群或API来存储主机映射和其他与网络有关的配置,并通过封装的数据包维持主机/节点之间的通信。

默认情况下,Flannel使用VXLAN配置进行封装和通信,但也有几种不同类型的后端可用,如host-gw、UDP。使用Flannel,还可以启用VxLAN-GBP进行路由,当几个主机在同一个网络上时,就需要这样做。

对于封装流量的加密,Flannel默认没有实现任何机制。不过,它还是提供了对IPsec加密的支持,它可以在Kubernetes集群的工作节点之间建立加密的隧道。

对于那些想从集群管理员角度开始Kubernetes CNI之旅的初学者来说,Flannel是一个很好的CNI插件。它简单的网络模型在用于控制主机之间的流量运输之前并没有缺点。

优点

  • 支持IPsec加密
  • 单一的二进制安装和配置

缺点

  • 不支持网络策略
  • 不能通过一个守护程序运行多个主机、多个网络,而为每个主机运行多个守护程序是可能的。

2.2. Calico

Calico是另一个流行的开源CNI插件,可用于Kubernetes生态系统。Calico由Tigera维护,定位于对网络性能、灵活性和功率等因素至关重要的环境。与Flannel不同,Calico提供先进的网络管理安全功能,同时提供主机和pod之间连接的整体概述。

在一个标准的Kubernetes集群上,Calico可以作为一个DaemonSet轻松地部署在每个节点上。集群中的每个节点都会安装三个Calico组件: Felix、BIRD和confd用于管理几个网络任务。Felix作为Calico代理处理节点路由,BIRD和confd管理路由配置的变化。

对于节点之间的路由数据包,Calico利用BGP路由协议而不是overlay网络。通过IP-IN-IP或VXLAN可以使用overlay网络模式,它可以像overlay网络一样封装跨子网发送的数据包。

Calico BGP协议使用未封装的IP网络结构,不需要用封装层包裹数据包,从而提高了Kubernetes工作负载的网络性能。簇内的pod流量使用Wireguard进行加密,Wireguard在节点之间创建和管理隧道,以提供安全的通信。

有了Calico,跟踪和调试比其他工具容易得多,因为没有操作数据包的包装器。开发人员和管理员可以很容易地理解数据包行为,并使用策略管理和访问控制列表等高级网络功能。

Calico中的网络策略实现了deny/match规则,可以通过清单应用,将入口策略分配给pod。用户可以定义全局范围的策略,并与Istio服务网整合,以控制pods流量,提高安全性并治理Kubernetes工作负载。

总的来说,对于希望控制其网络组件的用户来说,Calico是一个很好的选择。Calico可以很容易地与不同的Kubernetes平台(如kops、Kubespray)一起使用,并通过Calico企业提供商业支持。

优点

  • 支持网络策略
  • 网络性能高
  • 支持SCTP

缺点

  • 不支持组播

2.3. Cilium

Cilium是一个由Linux内核开发人员开发的开源、高度可扩展的Kubernetes CNI解决方案。Cilium通过增加利用eBPF过滤技术的高级应用规则,确保Kubernetes服务之间的网络连接安全。Cilium作为一个守护进程`cilium-agent’部署在Kubernetes集群的每个节点上,以管理操作并将网络定义转化为eBPF程序。

Pods之间的通信是通过 overlay 网络或利用路由协议进行的。IPv4和IPv6地址都支持。overlay 网络的实现利用VXLAN隧道进行数据包封装,而本地路由则通过未封装的BGP协议发生。

Cilium可以与多个Kubernetes集群一起使用,并可以提供多CNI功能,高水平的检查,跨所有集群的pod-to-pod连接。

它的网络和应用层意识管理着数据包检查,以及应用协议数据包的使用。

Cilium还通过HTTP请求过滤器支持Kubernetes网络策略。政策配置可以写入YAML或JSON文件,并提供入口和出口执行。管理员可以根据请求方法或路径头接受或拒绝请求,同时将策略与Istio等服务网整合。

优点

  • 支持多个集群
  • 可与其他CNI一起使用

缺点

  • 可能需要与其他CNI配对使用BGP
  • 为多个集群进行设置很复杂

2.4. WeaveNet

Weave Net由Weavescope开发,是一个具有CNI能力的网络解决方案,可以在Kubernetes集群中灵活联网。WeaveNet最初是为容器开发的,但后来演变成了Kubernetes网络插件。Weavenet可以很容易地在Kubernetes集群上安装和配置,作为一个daemonset在每个节点上安装必要的网络组件。

WeaveNet的工作原理是创建一个网状overlay网络,负责连接集群中的所有节点。在网络内部, Weave Net利用一个内核系统在节点之间进行数据包传输。内核所利用的协议被称为快速数据路径,它可以将数据包直接传输到目标 pod,而无需多次进出用户空间。

如果快速数据路径不起作用,或者数据包必须传送到另一台主机。Weavenet利用慢速套接协议进行传输。主机名解析、负载平衡和容错等功能是通过Weavenet的DNS服务器WeaveDns提供的。

对于数据包的封装和加密,WeaveNet为Kubernetes使用VxLAN,并为快速数据通路和套接字流量使用NaCl和IPsec加密。

Weavenet不使用etcd来存储网络配置。设置被持久化在一个数据库文件中,由DaemonSet创建的每个pod共享。

在网络策略支持方面,WeaveNet使用weave-npc容器来管理Kubernetes网络策略。该容器是默认安装和配置的,只需要网络规则来保证主机之间的通信。

优点

  • 内核级通信
  • 网络策略和加密支持
  • 提供付费支持以排除故障

缺点

  • 由于基于内核的路由,只支持Linux
  • 由于默认的加密标准,网络速度有所下降

2.5. Canal

Canal是一个CNI供应商,它结合了Flannel和Calico的网络功能,为Kubernetes集群提供一个统一的网络解决方案。Canal将Flannel overlay 网络层和VXLAN封装与Calico的网络组件(如Felix、主机代理和网络策略)整合在一起。总的来说,对于想要利用overlay网络模型和网络策略规则来实现更严格的安全的组织来说,Canal是一个很好的选择。

优点

  • 使用Flannel叠加网络的网络策略支持
  • 为部署Flannel和Calico提供了一个统一的方式。

缺点

  • 两个项目之间没有那么多的深度整合

2.6. 对比总结

Flannel Calico Cilium Weavenet Canal
部署方式 DaemonSet DaemonSet DaemonSet DaemonSet DaemonSet
封装和路由 VxLAN IPinIP,BGP,eBPF VxLAN,eBPF VxLAN VxLAN
是否支持网络策略
数据存储 Etcd Etcd Etcd Etcd
加密
支持Ingress
企业支持

三、选择一个CNI供应商

没有一个CNI供应商能满足所有的项目需求。对于简单的设置和配置,Flannel和Weavenet提供了很好的功能。Calico的性能更好,因为它通过BGP使用底层网络。Cilium通过BPF利用完全不同的应用层过滤模型,更倾向于企业安全。

此外,没有必要倾向于单一的供应商,因为运营需求可能因项目而大不相同。使用和测试多种解决方案将满足复杂的网络需求,同时提供更可靠的网络体验。

猜你喜欢

转载自blog.csdn.net/xieshaohu/article/details/129985941