Pod 联网 (CNI) - Amazon EKS

Pod 联网 (CNI)

Amazon EKS 支持通过适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件进行本机 VPC 联网。此插件会从您的 VPC 为每个容器分配一个私有 IPv4 或 IPv6 地址。此插件是一个在 GitHub 上进行维护的开源项目。有关更多信息,请参阅 amazon-vpc-cni-k8s 和 GitHub 上的建议:适用于通过 Amazon VPC 的 Kubernetes 联网的 CNI 插件。Amazon VPC CNI 插件完全支持在 Amazon EKS 和AWS上自行管理的 Kubernetes 集群上使用。

注意

Kubernetes 可以使用容器网络接口 (CNI) 进行可配置的联网设置。Amazon VPC CNI 插件可能并不能满足所有使用案例的要求。Amazon EKS 维护一个可提供可选 CNI 解决方案以及商业支持选项的合作伙伴网络。有关更多信息,请参阅 备选的兼容 CNI 插件

创建 Amazon EKS 节点时,该节点具有一个网络接口。所有 Amazon EC2 实例类型都支持多个网络接口。创建实例时附加到实例的网络接口称为主网络接口。附加到该实例的任何其他网络接口称为辅助网络接口。每个网络接口可以分配有多个私有 IP 地址。其中一个私有 IP 地址是主要 IP 地址,而分配给网络接口的所有其他地址都是辅助 IP 地址。有关网络接口的更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的弹性网络接口。有关每个网络接口支持的网络接口和私有 IP 地址数量的详细信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的每种实例类型的每个网络接口的 IP 地址数。例如,m5.large 实例类型支持三个网络接口,每个接口有 10 个私有 IP 地址。

Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件与 Daemonset 中名为 aws-node 的各个 Amazon EC2 节点一起部署。该插件包含两个主要组件:

  • L-IPAM 守护进程 – 负责创建网络接口并将网络接口附加到 Amazon EC2 实例,向网络接口分配辅助 IP 地址以及维护每个节点上 IP 地址的“热池”,以便在调度 Kubernetes Pod 时分配给这些 Pod。当节点上运行的 Pod 数量超过可分配给单个网络接口的地址数时,插件就会开始分配一个新的网络接口,只要附加的网络接口尚未达到实例的最大网络接口数量。有一些配置变量允许您在插件创建新网络接口时更改原定设置值。有关更多信息,请参阅 GitHub 上的 WARM_ENI_TARGETWARM_IP_TARGETMINIMUM_IP_TARGET

    您部署的每个 Pod 都会从附加到实例的网络接口之一中分配一个辅助私有 IP 地址。前面提到一个 m5.large 实例支持 3 个网络接口且每个网络接口有 10 个私有 IP 地址。即使一个 m5.large 实例支持 30 个私有 IP 地址,您也无法将 30 个 Pod 部署到该节点。要确定可以部署到节点的 Pod 数量,请使用以下公式:

    (Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2

    使用此公式计算得出 m5.large 实例类型最多可以支持 29 个 Pod。有关每种实例类型支持的最大 Pod 数量的列表,请参阅 GitHub 上的 eni-max-pods.txt。系统 Pod 计入在最大 Pod 数量内。例如,CNI 插件和 kube-proxy Pod 在集群中的每个节点上运行,因此您只能再部署 27 个 Pod 到 m5.large 实例,而不是 29 个。此外,CoreDNS 在集群中的某些节点上运行,这会使它运行所在的节点的最大 Pod 数再减少一个。

    预设情况下,部署到节点的所有 Pod 都会分配有相同的安全组,并会从分配给与连接到实例的一个网络接口的子网的 CIDR 块中分配私有 IP 地址。您可以通过配置 CNI 自定义网络 从其他 CIDR 块中分配 IP 地址,而不是从主网络接口连接的子网的 CIDR 块中分配。您还可以使用 CNI 自定义网络为节点上的所有 Pod 分配相同的安全组。分配给所有 Pod 的安全组可能与分配给主网络接口的安全组不同。您可以使用针对 Pod 的安全组为部署到许多 Amazon EC2 实例类型的 Pod 分配唯一的安全组。有关更多信息,请参阅 适用于 Pod 的安全组

  • CNI 插件 – 负责连接主机网络(例如,配置网络接口和虚拟以太网对)并将正确的网络接口添加到 Pod 命名空间。

如果对集群使用自定义 Pod 安全策略,请务必查看 Pod(一组容器)安全策略主题以获取重要信息。