Pod 联网 (CNI) - Amazon EKS

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

Pod 联网 (CNI)

Amazon EKS 支持使用适用于 Kubernetes 的Amazon VPC容器网络接口 (CNI) 插件进行本机 VPC 网络。使用此插件允许 Kubernetes Pod 在 Pod 内具有与其在 VPC 网络上相同的 IP 地址。该插件是一个在 上维护的开源项目GitHub。 有关更多信息,请参阅 上的 amazon-vpc-cni-k8s建议:适用于通过 AWS VPC 进行的 Kubernetes 联网的 CNI 插件GitHub。 Amazon VPC CNI 插件完全支持在 上的 Amazon EKS 和自管理 Kubernetes 集群上使用AWS。

注意

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 数超过可分配给单个网络接口的地址数时,该插件会开始分配新的网络接口,只要实例的最大网络接口数尚未附加即可。当插件创建新的网络接口时,有允许您更改 默认值的配置变量。有关更多信息,请参阅 WARM_ENI_TARGET 上的 WARM_IP_TARGETMINIMUM_IP_TARGET 和 GitHub。

    您部署的每个 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 的最大数量列表,请参阅 上的 https://github.com/awslabs/amazon-eks-ami/blob/master/files/eni-max-pods.txt GitHubeni-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 安全策略