混合节点的联网概念 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。

混合节点的联网概念

本节详细介绍了核心联网概念以及在为 EKS 混合节点设计网络拓扑时必须考虑的限制。

EKS 混合节点的联网概念

高级混合节点网络图

作为网络中心的 VPC

所有穿过云边界的流量都会通过您的 VPC 进行路由。这包括从 EKS 控制面板或 Amazon 中运行的容器组(pod)流向混合节点或这些节点上运行的容器组(pod)的流量。您可以将集群的 VPC 视为混合节点和集群其余部分之间的网络中心。此架构让您可以完全控制流量及其路由,但您因此也有责任为 VPC 正确配置路由、安全组和防火墙。

EKS 控制面板到 VPC

EKS 控制面板将弹性网络接口(ENI)附加到您的 VPC 中。这些 ENI 处理流入和流出 EKS API 服务器的流量。在配置集群时,您可以控制 EKS 控制面板 ENI 的位置,因为 EKS 会将 ENI 附加到您在集群创建期间传递的子网。

EKS 将安全组与 EKS 附加到子网的 ENI 相关联。这些安全组允许通过 ENI 流入和流出 EKS 控制面板的流量。这对 EKS 混合节点很重要,因为您必须允许混合节点及其上运行的容器组(pod)的流量流向 EKS 控制面板 ENI。

远程节点网络

远程节点网络,特别是远程节点 CIDR,是分配给作为混合节点使用的计算机的 IP 范围。您预置混合节点时,它们位于您的本地数据中心或边缘站点,这与 EKS 控制面板和 VPC 属于不同的网络域。每个混合节点都有一个或多个来自远程节点 CIDR 的 IP 地址,该地址与 VPC 中的子网不同。

您可以使用这些远程节点 CIDR 配置 EKS 集群,这样 EKS 就会通过集群 VPC 路由所有发往混合节点 IP 的流量,例如对 kubelet API 的请求。

远程容器组(pod)网络

远程容器组(pod)网络是分配给在混合节点上运行的容器组(pod)的 IP 范围。通常,您可以使用这些范围来配置 CNI,而 CNI 的 IP 地址管理(IPAM)功能负责将这些范围的切片分配给每个混合节点。您创建容器组(pod)时,CNI 会从分配给节点 [容器组(pod)在其中计划] 的切片中为该容器组分配 IP。

您可以使用这些远程容器组(pod)CIDR 配置 EKS 集群,这样 EKS 控制面板就会通过集群的 VPC 来路由所有发往混合节点上运行的容器组(pod)的流量,例如与 Webhook 的通信。

远程容器组(pod)网络

本地到 VPC

用于混合节点的本地网络必须路由到用于 EKS 集群的 VPC。有多种网络到 Amazon VPC 的连接选项可用来将本地网络连接到 VPC。您还可以使用自己的 VPN 解决方案。

务必在 VPC 和本地网络中的 Amazon 云端正确配置路由,这样两个网络便会通过各自的连接路由正确的流量。

在 VPC 中,所有流向远程节点和远程容器组(pod)网络的流量都必须通过连接路由到本地网络(称为“网关”)。如果您的某些子网具有不同的路由表,则必须使用混合节点的路由和在这些节点上运行的容器组(pod)来配置每个路由表。这适用于 ENI 附加到 EKS 控制面板的子网,以及包含必须与混合节点通信的 EC2 节点或容器组(pod)的子网。

在您的本地网络中,您必须将网络配置为允许流入和流出 EKS 集群 VPC 以及混合节点所需的其他 Amazon 服务的流量。EKS 集群的流量会双向穿过网关。

网络限制

完全路由的网络

主要限制在于 EKS 控制面板和所有节点,无论是云节点还是混合节点,都需要形成一个完全路由的网络。这意味着所有节点都必须能够通过 IP 地址在第三层相互访问。

EKS 控制面板和云节点已经可以相互访问,因为它们位于扁平化网络(VPC)中。但是,混合节点位于不同的网络域中。因此,您需要在 VPC 和本地网络中配置其他路由,以便在混合节点和集群的其余部分之间路由流量。如果混合节点可以相互访问并可从 VPC 访问,则您的混合节点可以位于一个扁平化网络中,也可以位于多个分段网络中。

可路由的远程容器组(pod)CIDR

为了让 EKS 控制面板与在混合节点(例如 Webhook 或 Metrics Server)上运行的容器组(pod)通信,或者让在云节点上运行的容器组(pod)与在混合节点上运行的容器组(pod)通信(工作负载东西向通信),远程容器组(pod)CIDR 必须可以从 VPC 路由。这意味着 VPC 必须能够通过网关将流量路由到容器组(pod)CIDR 再到本地网络,并且本地网络必须能够将容器组(pod)的流量路由到正确的节点。

请务必注意 VPC 和本地容器组(pod)路由要求之间的区别。VPC 只需要知道任何流向远程容器组(pod)的流量都应通过网关即可。如果您只有一个远程容器组(pod)CIDR,则只需要一条路由。

此要求适用于本地网络中的所有跃点,包括与混合节点位于同一子网中的本地路由器。这是唯一需要知道分配给每个节点的 pod CIDR 切片的路由器,这能确保特定容器组(pod)的流量传送到计划了容器组(pod)的节点。

您可以选择将本地容器组(pod)CIDR 的这些路由从本地路由器传播到 VPC 路由表,但这不是必需的。如果您的本地容器组(pod)CIDR 频繁更改,并且需要更新 VPC 路由表以反映不断变化的容器组(pod)CIDR,我们建议您将本地容器组(pod)CIDR 传播到 VPC 路由表,但这种情况并不常见。

注意,本地容器组(pod)CIDR 可路由的限制条件是可选的。如果您不需要在混合节点上运行 Webhook,也不需要让云节点上的容器组(pod)与混合节点上的容器组(pod)通信,则无需在本地网络上为容器组(pod)CIDR 配置路由。

为何本地容器组(pod)CIDR 需要可通过混合节点进行路由?

在云节点上使用 EKS 和 VPC CNI 时,VPC CNI 会直接从 VPC 向容器组(pod)分配 IP。这意味着无需任何特殊路由,因为云容器组(pod)和 EKS 控制面板都可以直接访问 Pod IP。

在本地运行(以及使用云中的其他 CNI 运行)时,容器组(pod)通常在隔离的覆盖网络中运行,CNI 负责在容器组之间传送流量。这通常通过封装来完成:CNI 将容器组(pod)到容器组(pod)的流量转换为节点到节点的流量,同时负责两端的封装和解封工作。这样一来,就无需在节点和路由器上进行额外配置。

与混合节点的联网是独一无二的,因为它结合了两种拓扑:EKS 控制面板和云节点(使用 VPC CNI)需要一个包含节点和容器组(pod)的扁平化网络,而在混合节点上运行的容器组(pod)则使用 VXLAN 进行封装(默认情况下在 Cilium 中),以处于叠加网络中。假设本地网络可以路由到 VPC,则在混合节点上运行的容器组(pod)可以访问 EKS 控制面板以及在云节点上运行的容器组(pod)。但是,如果本地网络上的容器组(pod)CIDR 没有路由,若网络不知道如何访问叠加网络并路由到正确的节点,则返回本地容器组(pod)IP 的任何流量最终都将被丢弃。