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

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

Pod 联网 (CNI)

Amazon EKS 支持使用适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件的本机 VPC 网络。使用此插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。该插件是一个在 GitHub 上维护的开源项目。有关更多信息,请参阅 GitHub 上的 amazon-vpc-cni-k8s建议:适用于通过 AWS 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 地址。有关网络接口的更多信息,请参阅 https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-eni.html 中的弹性网络接口Amazon EC2 用户指南(适用于 Linux 实例)。有关每个网络接口支持的网络接口和私有 IP 地址数量的更多信息,请参阅 https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)。例如,m5.large 实例类型支持三个网络接口,并且每个网络接口有 10 个私有 IP 地址。

适用于 Kubernetes 的 Amazon VPC 容器网络接口 (CNI) 插件是使用守护程序集中每个名为 Amazon EC2 的 aws-node 节点部署的。该插件包含两个主要组件:

  • L-IPAM 守护程序 负责创建网络接口并将网络接口附加到 – 实例,将辅助 IP 地址分配给网络接口,并在每个节点上维护 IP 地址的温池,以便在安排时分配到 Kubernetes Pod。Amazon EC2当节点上运行的 Pod 数超过可分配给单个网络接口的地址数时,插件将开始分配新的网络接口,前提是实例的最大网络接口数尚未附加。有配置变量允许您更改插件创建新网络接口时的默认值。有关更多信息,请参阅 GitHub 上的 WARM_ENI_TARGETWARM_IP_TARGETMINIMUM_IP_TARGET

    您部署的每个 Pod 都分配有一个辅助私有 IP 地址,地址来自连接到实例的其中一个网络接口。以前,提到的是 m5.large 实例支持三个网络接口,并且每个网络接口有 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 递减。

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

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

重要

如果您使用的是 1.7.0 版或更高版本的 CNI 插件,并且您将自定义 Pod 安全策略分配给用于守护程序集部署的 aws-node Pod 的 aws-node Kubernetes 服务账户,则该策略的 NET_ADMIN 部分必须具有 allowedCapabilities 以及 hostNetwork: trueprivileged: truespec有关更多信息,请参阅 Pod 安全策略.