使用 Kubernetes kube-proxy 附加组件 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Kubernetes kube-proxy 附加组件

重要

建议您向集群添加 Amazon EKS 类型的附加组件,而不是自行管理类型的附加组件。如果不熟悉这些类型之间的区别,请参阅 Amazon EKS 附加组件。有关向集群中添加 Amazon EKS 附加组件的更多信息,请参阅 创建附加组件。如果您无法使用 Amazon EKS 附加组件,我们鼓励您向容器路线图 GitHub 存储库提交有关您为什么无法使用的问题。

kube-proxy 附加组件部署在 Amazon EKS 集群中的每个 Amazon EC2 节点上。该附加组件会在节点上维护网络规则,并实现与 Pods 的网络通信。该附加组件不会部署到集群中的 Fargate 节点。有关更多信息,请参阅 Kubernetes文档中的 kube-proxy

下表列出了每个 Kubernetes 版本的 Amazon EKS 附加组件类型的最新版本。

Kubernetes 版本 1.29 1.28 1.27 1.26 1.25 1.24 1.23
v1.29.1-eksbuild.2 v1.28.6-eksbuild.2 v1.27.10-eksbuild.2 v1.26.13-eksbuild.2 v1.25.16-eksbuild.3 v1.24.17-eksbuild.8 v1.23.17-eksbuild.9
重要

该文档的早期版本不正确。kube-proxy 版本 v1.28.5v1.27.9v1.26.12 不可用。

如果您自行管理此附加组件,则表中的版本可能与可用的自行管理版本不同。

每个 Amazon EKS 集群版本都有两种类型的 kube-proxy 容器映像可用:

  • 默认:此映像类型以 Kubernetes 上游社区维护的基于 Debian 的 Docker 映像为基础。

  • 最低:此映像类型基于 Amazon EKS Distro 维护的最低要求基本映像,其中包含最低要求的程序包并且没有 Shell。有关更多信息,请参阅 Amazon EKS Distro

每个 Amazon EKS 集群版本的最新可用的自行管理 kube-proxy 容器映像版本
映像类型 1.29 1.28 1.27 1.26 1.25 1.24 1.23
kube-proxy(默认类型) 只有最小类型可用 只有最小类型可用 只有最小类型可用 只有最小类型可用 只有最小类型可用 v1.24.10-eksbuild.2 v1.23.16-eksbuild.2
kube-proxy(最低要求类型) v1.29.1-minimal-eksbuild.2 v1.28.6-minimal-eksbuild.2 v1.27.10-minimal-eksbuild.2 v1.26.13-minimal-eksbuild.2 v1.25.16-minimal-eksbuild.3 v1.24.17-minimal-eksbuild.4 v1.23.17-minimal-eksbuild.5
重要
  • 默认镜像类型不适用于 Kubernetes 版本 1.25 及更高版本。您必须使用最小的镜像类型。

  • 更新 Amazon EKS 附加组件类型时,可以指定有效的 Amazon EKS 附加组件版本,该版本可能不是此表中列出的版本。这是因为 Amazon EKS 附加组件版本并不总是与更新此附加组件的自行管理类型时指定的容器映像版本相匹配。更新此附加组件的自行管理类型时,可指定此表中列出的有效容器映像版本。

先决条件

注意事项
  • Amazon EKS 集群上的 Kube-proxy 具有与 Kubernetes 相同的兼容性和偏斜策略

  • Kube-proxy 必须与您的Amazon EC2 节点上的 kubelet 具有相同的次要版本。

  • Kube-proxy 不能高于集群控制面板的次要版本。

  • Amazon EC2 节点上的 kube-proxy 版本不能比控制面板的版本低两个以上的次要版本。例如,如果您的控制面板正在运行 Kubernetes 1.29,则 kube-proxy 次要版本不能低于 1.27。

  • 如果您最近将集群更新到新的 Kubernetes 次要版本,请将 Amazon EC2 节点更新到相同的次要版本,然后再将 kube-proxy 更新到与节点相同的次要版本。

更新 kube-proxy 自行管理的附加组件
  1. 确认已在集群上安装自行管理类型的附加组件。将 my-cluster 替换为您集群的名称。

    aws eks describe-addon --cluster-name my-cluster --addon-name kube-proxy --query addon.addonVersion --output text

    如果返回错误消息,则表明集群上安装有自行管理类型的附加组件。本主题中的其余步骤用于更新自行管理类型的附加组件。如果返回版本号,则表明集群上安装有 Amazon EKS 类型的附加组件。要对其进行更新,请使用 更新附加组件 中的步骤,而不是本主题中的步骤。如果不熟悉这些附加组件类型之间的区别,请参阅 Amazon EKS 附加组件

  2. 查看集群上当前安装的容器映像版本。

    kubectl describe daemonset kube-proxy -n kube-system | grep Image

    示例输出如下。

    Image:    918309763551.dkr.ecr.region-code.amazonaws.com.cn/eks/kube-proxy:v1.25.6-minimal-eksbuild.2

    在示例输出中,集群上安装的版本是 v1.25.6-minimal-eksbuild.2

  3. 918309763551region-code 替换为上一步中输出的值来更新 kube-proxy 附加组件。将 v1.26.2-minimal-eksbuild.2 替换为每个 Amazon EKS 集群版本的最新可用的自行管理 kube-proxy 容器映像版本表中列出的 kube-proxy 版本。您可以指定默认最低要求映像类型的版本号。

    kubectl set image daemonset.apps/kube-proxy -n kube-system kube-proxy=918309763551.dkr.ecr.region-code.amazonaws.com.cn/eks/kube-proxy:v1.26.2-minimal-eksbuild.2

    示例输出如下。

    daemonset.apps/kube-proxy image updated
  4. 确认新版本现已安装在集群上。

    kubectl describe daemonset kube-proxy -n kube-system | grep Image | cut -d ":" -f 3

    示例输出如下。

    v1.26.2-minimal-eksbuild.2
  5. 如果您在同一集群中使用 x86Arm 节点,而且您的集群是在 2020 年 8 月 17 日之前部署的。那么请使用以下命令编辑您的 kube-proxy 清单以将多个硬件架构的节点选择器纳入其中。您只需执行此操作一次。将选择器添加到清单中之后,您无需在每次更新附加组件时都进行添加。如果您的集群是在 2020 年 8 月 17 日或之后部署的,则 kube-proxy 已经具有多架构功能。

    kubectl edit -n kube-system daemonset/kube-proxy

    将以下节点选择器添加到编辑器中的文件中,然后保存文件。有关在编辑器的何处纳入此文本的示例,请参阅 GitHub 上的 CNI 清单文件。这使 Kubernetes 能够根据节点的硬件架构提取正确的硬件镜像。

    - key: "kubernetes.io/arch" operator: In values: - amd64 - arm64
  6. 如果您的集群最初是使用 Kubernetes 版本 1.14 或更高版本创建的,则可以跳过此步骤,因为 kube-proxy 已经包含此 Affinity Rule。如果您的 Amazon EKS 集群最初是使用 Kubernetes 版本 1.13 或更低版本创建的,并打算在您的集群中使用 Fargate 节点,请编辑 kube-proxy 清单以将 NodeAffinity 规则纳入其中,以防从 Fargate 节点上调度 kube-proxy Pods。您只需执行此编辑一次。将 Affinity Rule 添加到清单中之后,您无需在每次更新附加组件时都进行添加。编辑您的 kube-proxy DaemonSet

    kubectl edit -n kube-system daemonset/kube-proxy

    将以下 Affinity Rule 添加到编辑器中文件中的 DaemonSet spec 部分,然后保存文件。有关在编辑器的何处纳入此文本的示例,请参阅 GitHub 上的 CNI 清单文件。

    - key: eks.amazonaws.com/compute-type operator: NotIn values: - fargate