Pod 联网 (CNI) - Amazon EKS

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

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.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html 中的Amazon EC2 用户指南(适用于 Linux 实例)弹性网络接口。有关每个网络接口支持的网络接口和私有 IP 地址数量的更多信息,请参阅 中的每个实例类型的每个网络接口的 IP 地址Amazon EC2 用户指南(适用于 Linux 实例)数。例如, 实例m5.large类型支持三个网络接口,并且每个网络接口支持十个私有 IP 地址。

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

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

    您部署的每个 Pod 都会从附加到实例的其中一个网络接口中分配一个辅助私有 IP 地址。以前,会提到一个m5.large实例对每个网络接口支持三个网络接口和十个私有 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 上的 https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt eni-max-pods.txt。系统 Pod 计入最大 Pod。例如,CNI 插件和 kube-proxy Pod 在集群中的每个节点上运行,因此您只能将另外 27 个 Pod 部署到一个m5.large实例,而不是 29 个。此外CoreDNS 在集群中的某些节点上运行,这会将其运行节点的最大 Pod 减少另一个。

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

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

重要

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