管理 kube-proxy 附加组件 - Amazon EKS

管理 kube-proxy 附加组件

kube-proxy 在每个 Amazon EC2 节点上维护网络规则。它能够实现与您的 pods 进行网络通信。kube-proxy 未部署到 Fargate 节点。有关更多信息,请参阅 Kubernetes文档中的 kube-proxykube-proxy 镜像的两个版本均可用于每个 Kubernetes 版本。

  • 默认值:预设情况下使用新集群部署的版本。这是您可与 Amazon EKS 附加组件配合使用的唯一版本。

  • 最低:与默认版本不同,此图片版本基于 Amazon EKS Distro 维护的最小基本图片,其中包含最少的软件包且没有外壳。有关更多信息,请参阅 Amazon EKS Distro。此版本可作为自行管理的附加组件提供,但不能作为 Amazon EKS 附加组件提供。如果选择安装此版本,请完成 更新 kube-proxy 自行管理的附加组件 的步骤 2 中的步骤,指定此版本。

每个 Amazon EKS 支持的集群版本的 kube-proxy 镜像版本
Kubernetes 版本 1.22 1.21 1.20 1.19 1.18
kube-proxy(默认版本) 1.22.6-eksbuild.1 1.21.2-eksbuild.2 1.20.4-eksbuild.2 1.19.6-eksbuild.2 1.18.8-eksbuild.1
kube-proxy(最低) 1.22.6-minimal-eksbuild.2 1.21.9-minimal-eksbuild.2 1.20.15-minimal-eksbuild.2 1.19.16-minimal-eksbuild.2 1.18.20-minimal-eksbuild.1

如果您的 1.18 版或更高版本的集群尚未添加 kube-proxy Amazon EKS 附加组件,则可以按照 添加 kube-proxy Amazon EKS 附加组件 中的程序来添加该附加组件。在 2021 年 5 月 3 日之后,如果您是使用 AWS Management Console 创建的 1.18 版或更高版本的集群,那么 kube-proxy Amazon EKS 附加组件已在您的集群上。如果您的 1.18 版或更高版本的集群是使用任何其他工具创建的,并希望使用 kube-proxy Amazon EKS 附加组件,则您必须自行将其添加到您的集群。

如果您已将 kube-proxy Amazon EKS 附加组件添加到 1.18 版或更高版本的集群,则您可以按照 更新 kube-proxy Amazon EKS 附加组件删除 kube-proxy Amazon EKS 附加组件 部分中的程序来管理该附加组件。有关 Amazon EKS 附加组件的更多信息,请参阅 Amazon EKS 附加组件

如果您尚未添加 kube-proxy Amazon EKS 附加组件,则 kube-proxy 自行管理的附加组件仍在您的集群上运行。您可以按照 更新 kube-proxy 自行管理的附加组件 中的程序手动更新 kube-proxy 自行管理附加组件。

先决条件

  • 现有 Amazon EKS 集群。要部署一个角色,请参阅 开始使用 Amazon EKS

  • 如果您的集群为 1.21 版本或更高版本,确保您的 Amazon VPC 和 CoreDNS 附加组件为服务账户令牌中列出的最低版本。

添加 kube-proxy Amazon EKS 附加组件

选择带有您想要用于将 kube-proxy Amazon EKS 附加组件添加到集群的工具名称的选项卡。

重要

在添加 kube-proxy Amazon EKS 附加组件之前,请确认您不会自行管理 Amazon EKS 将开始管理的任何设置。要确定 Amazon EKS 管理的设置,请参阅 Amazon EKS 附加组件配置

eksctl

使用 eksctl 添加 kube-proxyAmazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。

eksctl create addon --name kube-proxy; --cluster my-cluster --force

如果您删除 --force 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

AWS Management Console

使用 AWS Management Console 添加 kube-proxy Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要为其配置 kube-proxy Amazon EKS 附加组件的集群的名称。

  3. 选择 Add-ons(附加组件)选项卡。

  4. 选择 Add new(新增)

    1. 对于 Name(名称),请选择 kube-proxy

    2. 选择您想使用的 Version(版本)

    3. 如果您选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),那么 Amazon EKS 附加组件的设置可以覆盖现有附加组件的任何设置。如果您未启用此选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么添加 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

    4. 选择 Add(添加)

AWS CLI

使用 AWS CLI 添加 kube-proxy Amazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。

aws eks create-addon \ --cluster-name my-cluster \ --addon-name kube-proxy \ --resolve-conflicts OVERWRITE

如果您删除 --resolve-conflicts OVERWRITE 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么创建附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

更新 kube-proxy Amazon EKS 附加组件

本程序用于更新 kube-proxy Amazon EKS 附加组件。如果您尚未添加 kube-proxy Amazon EKS 附加组件,请改为按照 更新 kube-proxy 自行管理的附加组件 中的程序操作。当新版本发布之后或您将集群更新到一个新的 Kubernetes 次要版本后,Amazon EKS 不会自动更新集群上的 kube-proxy。要更新现有集群上的 kube-proxy,您必须启动更新,然后 Amazon EKS 会为您更新该附加组件。

重要

在将 kube-proxy 更新为与已更新的集群次要版本相同的次要版本前,请将集群和节点更新到新的 Kubernetes 次要版本。

eksctl

使用 eksctl 更新 kube-proxy Amazon EKS 附加组件

  1. 检查 kube-proxy Amazon EKS 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

    eksctl get addon --name kube-proxy --cluster my-cluster

    输出示例如下。

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE kube-proxy v1.19.6-eksbuild.2 ACTIVE 0 v1.20.4-eksbuild.2
  2. 将附加组件更新为上一个步骤的输出中的 UPDATE AVAILABLE 下返回的版本。

    eksctl update addon \ --name kube-proxy \ --version v1.20.4-eksbuild.2 \ --cluster my-cluster \ --force

    如果您删除 --force 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

AWS Management Console

使用 AWS Management Console 更新 kube-proxy Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要为其更新 kube-proxy Amazon EKS 附加组件的集群的名称。

  3. 选择 Add-ons(附加组件)选项卡。

  4. 选择 kube-proxy 框右上角中的框,然后选择 Edit(编辑)

    1. 选择您要使用的 Amazon EKS 附加组件的 Version(版本)

    2. 如果您选择 Override existing configuration for this add-on on the cluster(覆盖集群上此附加组件的现有配置),那么 Amazon EKS 附加组件的设置可以覆盖现有附加组件的任何设置。如果您未启用此选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新 Amazon EKS 附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在选择此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

    3. 选择 Update(更新)

AWS CLI

使用 AWS CLI 更新 kube-proxy Amazon EKS 附加组件

  1. 检查 kube-proxy Amazon EKS 附加组件的当前版本。将 my-cluster 替换为您的集群名称。

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

    输出示例如下。

    v1.19.6-eksbuild.2
  2. 确定哪些版本的 kube-proxy 附加组件可用于您的集群版本。

    aws eks describe-addon-versions \ --addon-name kube-proxy \ --kubernetes-version 1.20 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \ --output text

    输出示例如下。

    v1.20.4-eksbuild.2 True v1.19.6-eksbuild.2 False v1.18.8-eksbuild.1 False

    下面带有 True 的版本是使用您指定的版本的新集群部署的默认版本。

  3. 将附加组件更新为上一个步骤的输出中返回的带有 True 的版本。您也可以更新到更高版本(如果输出中返回了)。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name kube-proxy \ --addon-version v1.20.4-eksbuild.2 \ --resolve-conflicts OVERWRITE

    如果您删除 --resolve-conflicts OVERWRITE 选项,并且任何 Amazon EKS 附加组件设置与您的现有设置冲突,那么更新附加组件将会失败,而且您会收到一条帮助您解决冲突的错误消息。在指定此选项之前,请确保 Amazon EKS 附加组件不会管理您需要管理的设置,因为这些设置会被此选项覆盖。有关 Amazon EKS 附加组件配置管理的更多信息,请参阅 Amazon EKS 附加组件配置

删除 kube-proxy Amazon EKS 附加组件

移除 Amazon EKS 附加组件时,您有两种选择:

  • 在集群上保留附加组件的软件:此选项删除了 Amazon EKS 对任何设置和功能的管理,使 Amazon EKS 能够在您启动更新后向您发出更新通知并自动更新 Amazon EKS 附加组件,但会将附加组件的软件保留在您的集群上。此选项使附加组件成为自我管理的附加组件,而不是 Amazon EKS 附加组件。附加组件没有停机时间。

  • 从集群中完全删除附加组件:只有在集群中没有资源依赖于附加组件提供的功能时,才应从集群中移除 Amazon EKS 附加组件。删除 Amazon EKS 附加组件后,如有需要,您可以再次添加它。

如果附加组件有与其关联的 IAM 账户,则不会移除该 IAM 账户。

选择带有要用于将 kube-proxy Amazon EKS 附加组件从 1.18 或更高版本的集群中移除的工具名称的选项卡。

eksctl

使用 eksctl 删除 kube-proxy Amazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。移除 --preserve 会从您的集群中移除附加组件软件。

eksctl delete addon --cluster my-cluster --name kube-proxy --preserve
AWS Management Console

使用 AWS Management Console 删除 kube-proxy Amazon EKS 附加组件

  1. 访问 https://console.aws.amazon.com/eks/home#/clusters 打开 Amazon EKS 控制台。

  2. 在左侧导航窗格中,选择 Clusters(集群),然后选择要删除其 kube-proxy Amazon EKS 附加组件的集群的名称。

  3. 选择 Add-ons(附加组件)选项卡。

  4. 选择 kube-proxy 框的右上角的复选框,然后选择 Remove(删除)。键入 kube-proxy,然后选择 Remove(删除)

AWS CLI

使用 AWS CLI 删除 kube-proxy Amazon EKS 附加组件

my-cluster 替换为集群名称,然后运行以下命令。移除 --preserve 会从您的集群中移除附加组件软件。

aws eks delete-addon --cluster-name my-cluster --addon-name kube-proxy --preserve

更新 kube-proxy 自行管理的附加组件

如果您有一个集群,但尚未向其添加 kube-proxy Amazon EKS 附加组件,请完成以下步骤来更新自行管理式附加组件。如果您已添加了 kube-proxy Amazon EKS 附加组件,请改为按照 更新 kube-proxy Amazon EKS 附加组件 中的程序操作。

重要

在将 kube-proxy 更新为与已更新的集群次要版本相同的次要版本前,请将集群和节点更新到新的 Kubernetes 次要版本。

要使用 kubectl 更新 kube-proxy 自行管理的附加组件

  1. 检查 kube-proxy 部署的当前版本。

    kubectl get daemonset kube-proxy \ --namespace kube-system \ -o=jsonpath='{$.spec.template.spec.containers[:1].image}'

    输出示例如下。

    602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.21.2-eksbuild.2
  2. 通过将 602401143452region-code 替换为输出的值,更新 kube-proxy 附加组件。为您的集群版本将 1.22.6-eksbuild.1 替换为每个 Amazon EKS 支持集群版本表部署的 kube-proxy 版本中列出的 kube-proxy 版本。

    kubectl set image daemonset.apps/kube-proxy \ -n kube-system \ kube-proxy=602401143452.dkr.ecr.region-code.amazonaws.com/eks/kube-proxy:v1.22.6-eksbuild.1
  3. (可选)如果您在同一集群中使用 x86 和 Arm 节点,而且您的集群是在 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
  4. (可选)如果您的集群最初是使用 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