本文发表时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变为不正确。

使用 EC2 虚拟私有云进行高性能网络

运行 Kubernetes 最流行的平台之一是亚马逊网络服务 (AWS) 的弹性计算云 (AWS EC2)。凭借十多年交付 IaaS 的经验,并随着时间的推移扩展到包含一套丰富的易于使用的 API 服务,EC2 赢得了全球开发人员的认可和忠诚度。

然而,在网络方面,EC2 存在一些限制,这些限制会阻碍性能并使将 Kubernetes 集群部署到生产环境变得不必要地复杂。Romana v2.0(云原生应用程序的网络和安全自动化解决方案)的预览版包含一些功能,这些功能解决了在 EC2 中运行 Kubernetes 时一些众所周知的网络问题。

传统 VPC 网络性能障碍

Kubernetes Pod 网络与 Amazon Virtual Private Cloud (VPC) 实例网络是分开的;因此,实例外的 Pod 流量需要一条到达目标 Pod 的路由。幸运的是,VPC 支持设置这些路由。当使用 kubenet 插件构建集群网络时,每当添加新节点时,AWS 云提供商会自动为在该节点上运行的 Pod 添加 VPC 路由。

使用 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 路由需要转发到路由器,然后路由器可以将流量转发到最终的目标实例。

Romana 是一种 CNI 网络提供程序,它在主机上配置路由以转发 Pod 网络流量,而无需叠加网络。由于节点间路由安装在主机上,因此根本不需要 VPC 路由。但是,当 VPC 被拆分为用于跨区域 HA 部署的子网时,VPC 路由是必要的。

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

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

最终的结果是,您现在可以在没有任何叠加网络的情况下跨 AZ 构建任意大小的集群。Romana 集群还支持网络策略,以通过网络隔离来提高安全性。

使其全部正常工作

虽然子网上聚合路由和节点转发的组合消除了叠加网络并避免了 VPC 50 路由限制,但它对 CNI 提供程序施加了某些要求。例如,主机应配置为仅与本地子网上同一区域中的其他节点进行节点间路由。到所有其他主机的流量必须使用默认的主机外路由,然后使用(聚合的)VPC 路由将流量转发到区域外。此外:添加新主机时,为了保持聚合的 VPC 路由,CNI 插件需要使用可以在新主机上访问的 Pod 的 IP 地址。

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

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

随处可用的本地 VPC 网络

当使用 Romana v2.0 时,本地 VPC 网络现在可用于任何大小的集群,无论是否具有网络策略以及跨多个区域拆分的 HA 生产部署。