本文发布时间已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已过时。
使用 EC2 Virtual Private Cloud 实现高性能网络
Amazon Web Services 的 Elastic Compute Cloud (AWS EC2) 是运行 Kubernetes 最受欢迎的平台之一。凭借十多年的 IaaS 交付经验,并随着时间推移不断扩展,包含丰富的服务和易于使用的 API,EC2 在全球开发者中赢得了青睐和忠诚。
然而,在网络方面,EC2 存在一些限制,这些限制会阻碍性能,并使将 Kubernetes 集群部署到生产环境变得不必要地复杂。Romana v2.0 的预览版,一个用于云原生应用的自动化网络和安全解决方案,包含了针对在 EC2 上运行 Kubernetes 时一些众所周知的网络问题的特性。
传统的 VPC 网络性能障碍
Kubernetes Pod 网络与 Amazon Virtual Private Cloud (VPC) 实例网络是分离的;因此,离实例的 Pod 流量需要一条到目标 Pod 的路由。幸运的是,VPC 支持设置这些路由。使用 kubenet 插件构建集群网络时,每当添加新节点,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 路由需要转发到一个路由器,然后路由器可以将流量转发到最终目标实例。
Romana 是一个 CNI 网络提供商,它在主机上配置路由,无需覆盖网络即可转发 Pod 网络流量。由于节点间路由安装在主机上,根本不需要 VPC 路由。但是,当 VPC 为跨区域的 HA 部署被分割成子网时,VPC 路由是必需的。
幸运的是,主机上的节点间路由使它们能够充当网络路由器,并将来自另一个区域的入站流量转发,就像处理来自本地 Pod 的流量一样。这使得由 Romana 配置的任何 Kubernetes 节点都能接受来自其他区域的入站 Pod 流量,并将其转发到子网上的正确目标节点。
由于这种本地路由功能,到子网上其他实例上 Pod 的顶层路由可以被聚合,从而将所需路由的总数减少到每个子网最少一个。为了避免使用单个实例转发所有流量,可以使用更多路由将流量分散到多个实例,最多可达可用路由的最大数量(即相当于 kubenet)。
最终结果是,您现在可以在不使用覆盖网络的情况下跨可用区构建任意大小的集群,并且无论是否使用网络策略。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 配置 VPC 路由的方式与 kubenet 相同,即为每个实例配置一条路由,充分利用每个可用的 VPC 路由。
无处不在的原生 VPC 网络
使用 Romana v2.0 时,原生 VPC 网络现已可用于任意大小的集群,无论是否使用网络策略,以及用于跨多个区域的 HA 生产部署。