为带前缀的 Amazon EKS 节点分配更多 IP 地址
适用于:带有 Amazon EC2 实例的 Linux 和 Windows 节点
适用于:公有子网和私有子网
每个 Amazon EC2 实例支持最大数量的弹性网络接口以及可分配给每个网络接口的最大数量的 IP 地址。每个节点的每个网络接口都需要一个 IP 地址。可以将所有其他可用 IP 地址分配给 Pods
。每个都 Pod
需要自己的 IP 地址。因此,您的节点可能有可用的计算和内存资源,但无法容纳其它 Pods
,因为该节点已用完分配给 Pods
的 IP 地址。
您可以通过分配 IP 前缀而不是为节点分配单个辅助 IP 地址来显著增加节点可以分配给 Pods
的 IP 地址数量。每个前缀都包含多个 IP 地址。如果您没有为集群配置 IP 前缀分配,则您的集群必须进行更多 Amazon EC2 应用程序编程接口(API)调用才能配置 Pod 连接所需的网络接口和 IP 地址。随着集群规模的扩大,这些 API 调用的频率可能会导致 Pod 和实例启动时间延长。这会导致扩展延迟以满足大型和尖峰工作负载的需求,并增加成本和管理开销,因为您需要配置额外的集群和 VPC 来满足扩展需求。有关更多信息,请参阅 GitHub 上的Kubernetes 可扩展性阈值
与 Amazon VPC CNI plugin for Kubernetes 功能的兼容性
可以将 IP 前缀用于以下功能:
-
IPv4 源网络地址转换 - 有关更多信息,请参阅 为 pods 启用出站互联网接入。
-
集群、容器组(pod)和服务的 IPv6 地址 - 有关更多信息,请参阅 了解如何将 IPv6 地址分配给集群、pods 和服务。
-
使用 Kubernetes 网络策略限制流量 - 有关更多信息,请参阅 通过 Kubernetes 网络策略限制 pod 流量。
以下列表提供了适用的 Amazon VPC CNI 插件设置的相关信息。有关各项设置的更多信息,请参阅 GitHub 上的 amazon-vpc-cni-k8s
-
WARM_IP_TARGET
-
MINIMUM_IP_TARGET
-
WARM_PREFIX_TARGET
注意事项
在使用此功能时,请考虑以下几点:
-
每种 Amazon EC2 实例类型支持最大数量的 Pods。如果您的托管节点组由多种实例类型组成,则集群中某个实例的最大 Pods 数量的最小值将应用于集群中的所有节点。
-
默认情况下,可以在节点上运行的最大
Pods
数量为 110,但您可以更改该数字。如果您更改该数量并且有现有的托管节点组,则节点组的下一次 AMI 或启动模板更新会导致新节点出现时使用更改后的值。 -
从分配 IP 地址过渡到分配 IP 前缀时,建议您创建新的节点组以增加可用 IP 地址的数量,而不是滚动替换现有节点。在同时分配 IP 地址和前缀的节点上运行 Pods 可能会导致通告的 IP 地址容量不一致,从而影响节点上未来的工作负载。有关执行过渡的推荐方式,请参阅 Amazon EKS 最佳实践指南中的在从辅助 IP 模式迁移到前缀委派模式期间替换所有节点(反之亦然)
。 -
安全组范围在节点级别 - 有关更多信息,请参阅安全组。
-
分配给网络接口的 IP 前缀为每个节点支持高 Pod 密度,并且具有最短的启动时间。
-
IP 前缀和 IP 地址与标准 Amazon EC2 弹性网络接口相关联。需要特定安全组的容器组被分配给分支网络接口的主 IP 地址。您可以将获取 IP 地址或从 IP 前缀获取 IP 地址的 Pods 与在同一节点上获取分支网络接口的 Pods 混合使用。
-
仅适用于具有 Linux 节点的集群。
-
将附加组件配置为向网络接口分配前缀后,您将无法在不删除集群所有节点组中的所有节点的情况下将 Amazon VPC CNI plugin for Kubernetes 附加组件降级到
1.9.0
(或1.10.1
)以下版本。 -
如果您的 Pods 在与 VPC 外部的端点通信的同时使用了 Pods 的安全组(
POD_SECURITY_GROUP_ENFORCING_MODE
=standard
和AWS_VPC_K8S_CNI_EXTERNALSNAT
=false
),则使用节点的安全组,而不是您分配给 Pods 的任何安全组。如果您的
Pods
在与 VPC 外部的端点通信的同时使用了容器组(pod)的安全组(POD_SECURITY_GROUP_ENFORCING_MODE
=strict
),则使用Pod’s
安全组。
-