![](https://www.cncf.io/wp-content/uploads/2022/10/infrastructure-integration.png)
整合 Cilium 以提高网络可扩展性和性能
Challenge
阿里巴巴云(Alibaba Cloud),又称阿里云,是总部位于中国的全球领先科技公司阿里巴巴集团的子公司。阿里云是全球最大的云计算服务和解决方案提供商之一,提供全套的云计算基础设施和服务,包括一项名为 Kubernetes 容器服务(ACK)的托管 Kubernetes 服务。
阿里云最初使用 Flannel、Calico 和基于 ENI 的开源网络插件 Terway 构建了 ACK 的网络。然而,随着业务规模的扩大,他们遇到了服务和网络延迟增加的问题。
为了应对这些挑战,并支持不断增长的客户群,阿里云意识到需要为 ACK 的 Kubernetes 网络栈找到一个更具可扩展性和高性能的解决方案。
Solution
阿里云选择 Cilium,是因为它利用 eBPF 提供低延迟网络和额外的网络策略功能。
Impact
将 Cilium 集成到 ACK 网络基础设施中,不仅帮助阿里云解决了服务和网络延迟问题,还显著提高了网络性能。
一些数据
第
亚太地区第一大云提供商
89
个可用区
30
个地区
网络可扩展性和性能
阿里云目前在全球拥有 30 个数据中心和 89 个可用区,客户遍布全球。他们提供的 Kubernetes 托管服务(ACK)管理着数万个集群,其中最大的集群拥有超过 10,000 个节点。
在 Kubernetes 托管服务建立初期,阿里云使用 Flannel 作为网络组件。但随着平台的发展,他们意识到需要更复杂的解决方案来扩展平台并满足客户需求。
为应对这些挑战,他们开发了自己的 CNI 插件 Terway,以解决扩展难题。然而,使用 Terway 时,pod 网络流量仍需经过主机网络协议栈,随着集群规模扩大,这带来了更多的延迟。为解决延迟问题,他们转向 IPVLAN,使流量从 pod 端口直接进入 VPC,跳过主机网络协议栈。但这种方法并不适合 Kubernetes 服务,因为容器流量不再经过主机,无法被 kube-proxy 的规则转发。他们意识到,需要另一种解决方案来处理服务之间的流量。
“我们最初使用并修改了 Flannel,以通过 VPC 路由而不使用 overlay 网络。然而,这种做法带来了一些缺点:网络仍然不在同一层面,Flannel 还在集群中提供了第二个 CIDR 地址范围,效率较低。
我们决定开发自己的 CNI 插件,从而开发出开源的 Terway 插件。我们发现,pod 的网络流量仍需经过主机网络协议栈,这对客户来说是个巨大问题,特别是对于那些拥有大规模集群和大量服务的客户。由于 IPVS 和 iptables 无法有效率的处理这种流量,因此会导致显著的延迟增加。
为了解决这个问题,我们寻找了一种绕过主机网络栈的流量路由方案。我们建立了一个名为 IPVLAN 的数据通道,允许流量从 pod 端口直接进入 VPC。IPVLAN 是 Linux 的一种网络虚拟化功能,使得容器可以通过 IPVLAN 子接口绕过主机网络协议栈,直接到达 VPC,从而减少主机网络开销。然而,这种方法引发了一个新问题:容器流量不再通过主机,导致服务功能失效。服务是通过主机上的 kube-proxy 提供的,我们需要在 pod 网络命名空间内管理这些服务。- 李博康, 高级工程师, 阿里云
阿里云意识到,传统的基于 veth 的容器网络模式下,数据包在命名空间之间的转换会产生巨大的开销。而默认的基于 iptables 的服务模式中,规则数量的增加也带来了较高的开销。因此,他们开始寻找能够解决这两个问题的方案。
在探索过程中,他们发现由 eBPF 支持的 Cilium 能有效实现 Kubernetes 服务,并最终解决了他们的问题。他们还喜欢 Cilium 提供的开箱即用的网络策略,这些最初是通过 Calico 实现的。
“在调查中,我们发现了 Cilium。我们意识到 eBPF 和 Cilium 能有效处理我们的 Kubernetes 服务功能,并且它们在我们的环境中是一个理想的解决方案。此外,在 kube-proxy 模型中,无论使用 iptables 还是 IPVS,规则都是基于命名空间的,为每个容器配置服务会消耗大量资源。eBPF 允许跨命名空间共享 eBPF map,我们只需为每个容器配置一个 eBPF 程序,就能让不同命名空间的程序共享同一个 eBPF map。
另外,我们之前使用了 Calico 提供的网络策略。由于我们构建了新的数据路径,因此需要新的网络策略,而 Cilium 提供了开箱即用的 3 层到 7 层网络策略。
基于这些发现,我们对 Cilium 进行了调整,并将其集成为我们的第二个 CNI 插件。Cilium 提供了我们所需的一切。“ – 李博康, 高级工程师, 阿里云
阿里云发现 Cilium 后,决定将其通过 CNI chain 模式集成到开源 CNI Terway 中。Terway 处理 IPAM 和网络配置,而 Cilium 负责加载 eBPF 程序,并提供服务、网络策略和 QoS 功能。
“由于 Cilium 已支持服务功能,我们将其与 CNI Terway 结合使用。Terway 处理 IPAM 和网络配置,而 Cilium 负责加载 eBPF 程序,并提供服务、NetworkPolicy 和 QoS 功能。在我们的解决方案中,Cilium 还将 eBPF 程序附加到容器命名空间中的网卡上。” – 李博康, 高级工程师, 阿里云
通过将 Cilium 集成到网络中,阿里云解决了可扩展性问题,并为 ACK 客户提供了更低的网络延迟。
“使用 Cilium 和 eBPF 简化网络后,性能比使用 iptables 时大幅提高了 32%,比 IPVS 时提高了 62%。” – 李博康, 高级工程师, 阿里云
解决客户网络性能问题及未来发展计划
阿里云成功将 Cilium 集成到其托管 Kubernetes 服务 ACK 的网络基础设施中。他们不仅解决了高延迟问题,还提高了网络安全性,并为客户提供了更好的可观测性。
“有了 Cilium,我们的客户现在可能会以不同的标准来比较我们与其他 Kubernetes 托管服务,因为我们的性能显著提高。延迟是客户最关心的问题,而 Cilium 在这方面给了我们很大优势。性能提升是我们从 Cilium 获得的最大优势之一,这对我们的业务极为有利。Cilium 还提供了许多附加功能,如 Hubble,为客户带来了更好的可观测性。“- 李博康, 高级工程师, 阿里云
未来,阿里云团队计划继续优化其解决方案,并重点提升 ACK 的数据平面。
“IPVLAN+eBPF 模式显著提高了性能,但在数据路径处理方面与传统方案有所不同。最近,我们推出了基于此模式的 DatapathV2,利用 eBPF 重定向(在 Cilium 中称为 HostRouting)。这种新方法在性能上与传统方案相当,同时提供了类似的网络路径,增强了兼容性。未来,我们将继续关注数据平面的进一步发展。” – – 李博康, 高级工程师, 阿里云
要了解有关其解决方案的更多详细信息,请查看 Cilium.io 上的这篇博文。