CNI 配置变量 - Amazon EKS

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

CNI 配置变量

适用于 Kubernetes 的 Amazon VPC CNI 插件支持很多部署选项,这些选项是通过环境变量设置的。提供了以下环境变量,并且它们都是可选的。

AWS_VPC_CNI_NODE_PORT_SUPPORT

类型 – 布尔值

默认值true

指定是否 NodePort 服务在节点的主网络接口上启用。这需要额外的 iptables 规则,并要求将主接口上内核的反向路径筛选条件设置为 loose

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

类型 – 布尔值

默认值false

指定您的pod可以在与控制平面资源相同的VPC内使用子网和安全组,这独立于群集的 resourcesVpcConfig。默认情况下,Pod与节点的主接口共享相同的子网和安全组。将此变量设置为 true 导致 ipamD 使用节点的 ENIConfig 用于网络接口分配。您必须创建一个 ENIConfig 群集将驻留的每个子网的自定义资源定义,然后对每个节点进行注释以使用特定的 ENIConfig (多个节点可以用相同的注释 ENIConfig)。节点只能用单个 ENIConfig 和中的子网 ENIConfig 必须属于相同的 可用区 节点驻留在中。有关更多信息,请参阅CNI 自定义网络

ENI_CONFIG_ANNOTATION_DEF

类型 – 字符串

默认值k8s.amazonaws.com/eniConfig

指定节点注释键名。这应该用于当 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true。注释值将用于设置 ENIConfig 名称。注释优先于标签。

ENI_CONFIG_LABEL_DEF

类型 – 字符串

默认值k8s.amazonaws.com/eniConfig

指定节点标签键名。这应该用于当 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true。标签值将用于设置 ENIConfig 名称。注释将优先于标签。要使用标签,请确保已定义具有键 k8s.amazonaws.com/eniConfig 的注释,并且节点上未设置注释键 ENI_CONFIG_ANNOTATION_DEF 的值。要选择 ENIConfig 基于 可用区,将此设置为 failure-domain.beta.kubernetes.io/zone 并创建 ENIConfig 自定义资源 可用区,例如 us-east-1a。有关更多信息,请参阅 CNI 自定义网络.

AWS_VPC_ENI_MTU – v1.6.0 和后续版本

类型 – 整数

默认值9001

用于配置所连接的 ENI 的 MTU 大小。有效范围为 5769001

AWS_VPC_K8S_CNI_EXTERNALSNAT

类型 – 布尔值

默认值false

指定是否应使用外部NAT网关提供辅助网络接口IP地址的SNAT。在设置为 true 的情况下,不应用 SNAT iptables 规则与非 VPC IP 规则,如果已应用这些规则,则会将其删除。

如果您需要允许从外部 VPN、直接连接和外部 VPC 到 Pod 的入站通信,并且您的 Pod 不需要直接通过互联网网关访问 Internet,请禁用 SNAT。您的节点必须在私有子网中运行且已通过 AWS NAT 网关或其他外部 NAT 设备连接到 Internet。

有关更多信息,请参阅外部源网络地址转换 (SNAT)

AWS_VPC_K8S_CNI_RANDOMIZESNAT

类型 – 字符串

默认值hashrandom

有效值hashrandom, prng, none

指定 SNAT iptables 规则是否应随机选择连接的传出端口。这应该用于当 AWS_VPC_K8S_CNI_EXTERNALSNAT=false。启用时(hashrandom) --random 标志将添加到SNAT iptables 规则。要使用伪随机数生成,而不是基于散列 (--random-fully),请为环境变量使用 prng。对于旧版本的 iptables 并不支持 --random-fully,此选项将恢复为 --random。禁用(none)如果依赖拨出连接的顺序端口分配,则此功能。

注意

none 之外的所有选项将导致向出站连接分配一个源端口,该端口不一定属于在操作系统级别 (/proc/sys/net/ipv4/ip_local_port_range) 设置的临时端口范围。如果您的 NACL 根据在 ip_local_port_range 中找到的端口范围限制流量,则这一点非常重要。

AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS – v1.6.0 和后续版本

类型 – 字符串

默认值 – 空

指定要从 SNAT 中排除的 IPv4 CIDR 的逗号分隔列表。对于列表中的每个项目,将应用 iptables 规则和非 VPC IP 规则。如果某个项目不是有效的 IPv4 范围,它将被跳过。这应在 AWS_VPC_K8S_CNI_EXTERNALSNAT=false 时使用。

WARM_ENI_TARGET

类型 – 整数

默认值1

指定 ipamD 守护程序应尝试在节点上保持可用于pod分配。依默认, ipamD 尝试保留一个网络接口及其所有IP地址,以便用于pod分配。

注意

每个网络接口的IP地址数量因实例类型而异。有关更多信息,请参阅 每个实例类型每个网络接口的IP地址Amazon EC2 用户指南(适用于 Linux 实例).

例如,m4.4xlarge 启动时具有 1 个网络接口和 30 个 IP 地址。如果在节点上放置 5 个 Pod,并从 IP 地址热池中删除 5 个空闲 IP 地址,则 ipamD 会尝试分配更多接口,直到有足够的 WARM_ENI_TARGET 空闲接口在节点上可用。

注意

如果已设置 WARM_IP_TARGET,则此环境变量将被忽略,并且将改用 WARM_IP_TARGET 行为。

WARM_IP_TARGET

类型 – 整数

默认值 – 无

指定空闲 IP 地址的数量,ipamD 守护程序应尝试使这些 IP 地址可用于节点上的 Pod 分配。例如,如果将 WARM_IP_TARGET 设置为 10,则 ipamD 会尝试始终使 10 个空闲 IP 地址可用。如果节点上的弹性网络接口无法提供这么多空闲地址,则 ipamD 会尝试分配更多接口,直到有足够的 WARM_IP_TARGET 空闲 IP 地址可用。

注意

此环境变量将覆盖 WARM_ENI_TARGET 行为。

MINIMUM_IP_TARGET – v1.6.0 和后续版本

类型 – 整数

默认值 – 无

指定IP地址总数, ipamD 守护程序应尝试在节点上分配pod分配。MINIMUM_IP_TARGET 行为与 WARM_IP_TARGET,除了它没有设置目标数量的空闲IP地址以始终可用之外,它还为分配了多少个总IP地址的楼层设置了一个目标数字。

MINIMUM_IP_TARGET 用于预扩展,WARM_IP_TARGET 用于动态扩展。例如,假设集群的预期 Pod 密度为每个节点大约 30 个 Pod。如果 WARM_IP_TARGET 设置为 30 以确保 CNI 最初分配了足够的 IP ,则将 30 个 Pod 部署到该节点。CNI 将另外分配 30 个 IP(共计 60 个),这会加快相关子网中的 IP 耗尽。反之,如果 MINIMUM_IP_TARGET 设置为 30 而 WARM_IP_TARGET 设置为 2,则在部署 30 个 Pod 后,CNI 将另外分配 2 个 IP。这仍然提供弹性,但使用的 IP 数量约为单独使用 WARM_IP_TARGET 时的一半(32 个 IP 地址与 60 个 IP 地址)。

这还通过减少分配或取消分配私有 IP 地址所需的调用次数来提高集群的可靠性,这些 IP 地址可能会受到限制,尤其是在扩展相关时间内。

MAX_ENI

类型 – 整数

默认值 – 无

指定将连接到节点的最大网络接口数。何时 MAX_ENI 未设置或小于或等于 0,未使用此设置,且网络接口的最大数量始终等于问题中实例类型的最大数量。即使 MAX_ENI 是正数,它也受实例类型的最大数量限制。

AWS_VPC_K8S_CNI_LOGLEVEL

类型 – 字符串

默认值 – DEBUG

有效值DEBUGINFOWARNERRORFATAL(不区分大小写)

指定 ipamd 的日志级别。

AWS_VPC_K8S_CNI_LOG_FILE

类型 – 字符串

默认值 – 未设置

有效值:stdout 或文件路径

指定记录输出的写入位置 ipamd。你可以指定 stdout 或改写默认文件,例如 /var/log/aws-routed-eni/ipamd.log.

AWS_VPC_K8S_PLUGIN_LOG_FILE

类型 – 字符串

默认值 – 未设置

有效值stdout 或文件路径。

指定将 aws-cni 插件的日志记录输出写入到的位置。您可以指定 stdout 或覆盖默认文件,例如 /var/log/aws-routed-eni/plugin.log

AWS_VPC_K8S_PLUGIN_LOG_LEVEL

类型 – 字符串

默认值 – DEBUG

有效值DEBUGINFOWARNERRORFATAL(不区分大小写)

指定 aws-cni 插件的日志级别。

INTROSPECTION_BIND_ADDRESS

类型 – 字符串

默认值127.0.0.1:61679

指定自检终端节点的绑定地址。Unix 域套接字可以使用套接字路径之前的 unix: 前缀指定。

DISABLE_INTROSPECTION

类型 – 布尔值

默认值 – false

指定是否在节点上禁用介绍端点。此项设置为 true 时,将减少运行 aws-cni-support.sh 脚本时可从节点获取的调试信息。

DISABLE_METRICS

类型 – 布尔值

默认值 – false

指定Prometheus度量标准端点是否针对 ipamd。默认情况下,度量发布于 :61678/metrics.

AWS_VPC_K8S_CNI_VETHPREFIX

类型 – 字符串

默认值eni

指定用于为 CNI 生成主机端 veth 设备名称的 veth 前缀。前缀长度最多为四个字符。

ADDITIONAL_ENI_TAGS – v1.6.0 和后续版本

类型 – 字符串

默认值{}

示例值{"tag_key": "tag_val"}

应用于网络接口的元数据可帮助您对用于计费或其他目的的资源进行分类和组织。每个标签都包含自定义键和可选值。标签键最多可包含 128 个字符。标签值最多可包含 256 个字符。标记将添加到主机上的所有网络接口。

重要

自定义标签不应包含 k8s.amazonaws.com 前缀,因为它是保留的。如果标签包含 k8s.amazonaws.com,则将忽略标签添加。

CLUSTER_NAME

类型 – 字符串

默认值""

指定群集名称以标记分配的网络接口。

与分配相关的网络接口标签

此插件与网络接口上的以下标记进行交互:

  • cluster.k8s.amazonaws.com/name

  • node.k8s.amazonaws.com/instance_id

  • node.k8s.amazonaws.com/no_manage

集群名称标签

标签 cluster.k8s.amazonaws.com/name 将被设置为 aws-node 守护程序,用于创建网络接口。

实例 ID 标签

标签 node.k8s.amazonaws.com/instance_id 将被设置为 aws-node 分配此网络接口的实例。

无管理标签

node.k8s.amazonaws.com/no_manage 标签由 aws-node daemonset用于确定是否不应配置连接到计算机的网络接口或将其用于专用IP地址。此标记并非由CNI插件本身设置,而是可由用户设置,以指示网络接口适用于主机网络Pod,或适用于与Kubernetes无关的其他进程。

注意

使用连接网络接口 no_manage 标签将导致错误的值 kubelet--max-pods 配置选项。如果您使用此标签,另请考虑分别更新此插件以及 kubelet 上的 MAX_ENI--max-pods 配置选项。

备注

L-IPAMD (人aws-node daemonSet)需要访问KubernetesAPI服务器。如果它不能访问 Kubernetes API 服务器,ipamD 将退出,CNI 无法为 Pod 获取任何 IP 地址。确认 L-IPAMD 是否有权访问 Kubernetes API 服务器。

kubectl get svc kubernetes

输出

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP <10.0.0.1> <none> 443/TCP 29d

SSH到节点以检查节点是否可以到达API服务器。

telnet <10.0.0.1> 443

输出

Trying 10.0.0.1... Connected to 10.0.0.1. Escape character is '^]'.

如果您收到最后一行输出,则可以访问 Kubernetes API 服务器。