EC2虚拟私有云的高性能网络

用于运行Kubernetes的最受欢迎的平台之一是Amazon Web Services的Elastic Compute Cloud(AWS EC2)。 EC2拥有十多年交付IaaS的经验,并且随着时间的推移不断扩展,以包含具有易于使用的API的丰富服务集,从而在全球范围内赢得了开发人员的关注和忠诚度。

但是,在网络方面,EC2具有一些限制,这些限制会影响性能,并使Kubernetes集群在生产中的部署不必要地复杂。预览版 罗曼娜v2.0,一种针对Cloud Native应用程序的网络和安全自动化解决方案,其中包含的功能可解决在EC2中运行Kubernetes时遇到的一些众所周知的网络问题。

传统的VPC网络性能障碍

Kubernetes Pod网络与Amazon Virtual Private Cloud(VPC)实例网络是分开的;因此,离开实例的Pod流量需要到目标Pod的路由。幸运的是,VPC支持设置这些路由。当使用 酷比网 插件,无论何时添加新节点,AWS云提供商都会自动将VPC路由添加到在该节点上运行的Pod。

使用kubenet设置路由可提供本机VPC网络性能和可见性。但是,由于kubenet不支持更高级的网络功能(例如用于pod流量隔离的网络策略),因此许多用户选择在后端运行容器网络接口(CNI)提供程序。

在Romana v2.0之前,所有CNI网络提供商在跨可用区(AZ)使用时都需要覆盖,从而使想要部署HA群集的CNI用户无法获得本机VPC网络的性能。

即使是不需要高级联网的用户,也受到限制,因为VPC路由表最多支持50个条目,这将群集的大小限制为50个节点(如果出于其他目的需要某些VPC路由,则限制为更少)。在Romana v2.0之前,用户还需要运行覆盖网络才能克服此限制。

无论您是对用于流量隔离的高级网络还是运行大型生产HA集群(或同时运行这两个)感兴趣,您都无法获得本机VPC网络的性能和可见性。

多段网络上的Kubernetes

避免用尽VPC路由的方法是通过使它们转发多个实例的Pod流量,以节制地使用它们。从网络角度来看,这意味着VPC路由需要转发到路由器,然后路由器可以将流量转发到最终目标实例。

罗曼娜 是CNI网络提供商,它在主机上配置路由以转发Pod网络流量而没有覆盖。由于节点间路由安装在主机上,因此根本不需要VPC路由。但是,将VPC划分为子网以跨区域进行HA部署时,VPC路由是必需的。

幸运的是,主机上的节点间路由允许它们充当网络路由器,并转发从另一个区域入站的流量,就像处理来自本地Pod的流量一样。这使Romana配置的任何Kubernetes节点都能够接受来自其他区域的入站Pod通信,并将其转发到子网上的适当目标节点。

由于具有此本地路由功能,可以汇总到子网中其他实例上的Pod的顶级路由,从而使每个子网所需的路由总数减少到只有一个。为了避免使用单个实例转发所有流量,可以使用更多路由将流量分散到多个实例中,直到可用路由的最大数量(即相当于kubenet)。

最终结果是,您现在可以在没有覆盖的情况下跨AZ建立任何大小的群集。 罗曼娜群集还支持网络策略,以通过网络隔离提高安全性。

使一切正常

尽管聚合路由和子网上节点转发的结合消除了重叠并避免了VPC 50路由限制,但它对CNI提供程序提出了某些要求。例如,应该为主机配置仅具有到本地子网上同一区域中其他节点的节点间路由。到所有其他主机的流量必须使用默认的主机离开路由,然后使用(聚合的)VPC路由将流量转发到区域之外。另外:添加新主机时,为了维护聚合的VPC路由,CNI插件需要使用IP地址来存储新主机上可以访问的Pod。

最新版本的Romana还解决了有关如何安装VPC路由的问题。当转发流量的节点发生故障时会发生什么;如何检测转发节点故障;以及如何更新路由和群集恢复。

罗曼娜v2.0包括新的AWS路由配置功能,用于设置VPC路由。这是一组新的网络广告功能的一部分,这些功能可以自动在L3网络中配置路由。 罗曼娜v2.0包括可感知拓扑的IP地址管理(IPAM),使VPC路由聚合能够保持在此处所述的50条路由限制之内,以及新的运行状况检查,可在路由实例发生故障时更新VPC路由。对于较小的群集,Romana会像kubenet一样配置VPC路由,并利用到每个实例的路由来利用每个可用的VPC路由。

本地VPC网络无处不在

现在,使用Romana v2.0时,无论有无网络策略,任何规模的群集均可使用本机VPC网络,以及跨多个区域进行HA生产部署。

罗曼娜v2.0的预览版已发布 这里。我们欢迎您提出意见和反馈,以便使Kubernetes的EC2部署尽可能快速可靠。

- Pani Networks的联合创始人Juergen Brendel和Chris Marino,Romana项目的发起人