Pod 联网 (CNI) - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Pod 联网 (CNI)

Amazon EKS 支持使用适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件进行本机 VPC 联网。此插件将您的 VPC 中的 IP 地址分配给每个容器。该插件是在 GitHub 上进行维护的开源项目。有关更多信息,请参阅 。亚马逊 VPC cni-k8提议:适用于 Amazon VPC 上的 Kubernetes 网络的 CNI 插件(位于 GitHub 上)。完全支持将 Amazon VPC CNI 插件用于亚马逊 EKS 和Amazon。

注意

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

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

针对 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件与守护程序集中的每个 Amazon EC2 节点一起部署,其名称为aws-node。该插件包含两个主要组件:

  • L-IPAM 守护进程— 负责创建网络接口和将网络接口附加到 Amazon EC2 实例、为网络接口分配辅助 IP 地址以及在每个节点上维护 IP 地址的热池,以便在计划时分配给 Kubernetes Pod。当节点上运行的容器数量超过可分配给单个网络接口的地址数时,插件将开始分配一个新的网络接口,只要实例的最大网络接口数目尚未连接。有一些配置变量允许您在插件创建新网络接口时更改默认值。有关更多信息,请参阅 。WARM_ENI_TARGETWARM_IP_TARGETMINIMUM_IP_TARGET(位于 GitHub 上)。

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

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

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

    默认情况下,部署到节点的所有容器都被分配到相同的安全组,并从分配给实例的网络接口所连接的子网的 CIDR 块中分配私有 IP 地址。您可以从与主网络接口连接到的子网不同的 CIDR 块分配 IP 地址,方法是配置CNI 自定义网络。您还可以使用 CNI 自定义网络为节点上的所有窗格分配相同的安全组。分配给所有 Pod 的安全组可能与分配给主网络接口的安全组不同。您可以使用针对容器的安全组为部署到许多 Amazon EC2 实例类型的容器分配唯一的安全组。有关更多信息,请参阅 窗格的安全组

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

重要

如果您使用的是版本 1.7.0 或更高版本的 CNI 插件,并将自定义容器安全策略分配给aws-node库贝内特服务帐户用于aws-node由守护者集部署的容器,则策略必须具有NET_ADMIN在其allowedCapabilities部分以及hostNetwork: trueprivileged: true在策略的spec。有关更多信息,请参阅 Pod 安全策略