连接外部集群 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

连接外部集群

您可以在以下过程中使用多种方法将外部 Kubernetes 集群连接到 Amazon EKS。此过程包括两个步骤:向 Amazon EKS 注册集群,在集群中安装 eks-connector 代理。

重要

您必须在完成第一步后 3 天内(注册到期之前)完成第二步。

Connector 方法

在用过注册集群的每种方法之后,并不是所有安装代理的方法都可以使用。下表列出了每种注册方法以及可以使用的安装代理的方法。

步骤 方法
注册集群 Amazon Web Services Management Console Amazon Command Line Interface eksctl
安装 代理 Helm,YAML 清单 Helm,YAML 清单 YAML 清单

先决条件

  • 确保已创建 Amazon EKS Connector 代理角色。按照 创建 Amazon EKS Connector 代理角色 中的步骤操作。

  • 您必须拥有以下权限才能注册集群:

    • eks:RegisterCluster

    • ssm:CreateActivation

    • ssm:DeleteActivation

    • iam:PassRole

步骤 1:注册集群

Amazon CLI
先决条件
要使用 Amazon CLI 注册集群
  • 对于 Connector 配置,请指定您的 Amazon EKS Connector 代理 IAM 角色。有关更多信息,请参阅Amazon EKS Connector 所需的 IAM 角色

    aws eks register-cluster \ --name my-first-registered-cluster \ --connector-config roleArn=arn:aws:iam::111122223333:role/AmazonEKSConnectorAgentRole,provider="OTHER" \ --region aws-region

    示例输出如下。

    { "cluster": { "name": "my-first-registered-cluster", "arn": "arn:aws:eks:region:111122223333:cluster/my-first-registered-cluster", "createdAt": 1627669203.531, "ConnectorConfig": { "activationId": "xxxxxxxxACTIVATION_IDxxxxxxxx", "activationCode": "xxxxxxxxACTIVATION_CODExxxxxxxx", "activationExpiry": 1627672543.0, "provider": "OTHER", "roleArn": "arn:aws:iam::111122223333:role/AmazonEKSConnectorAgentRole" }, "status": "CREATING" } }

    在下一步中使用 aws-regionactivationIdactivationCode 值。

Amazon Web Services Management Console
要向控制台注册 Kubernetes 集群。
  1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

  2. 选择 Add cluster(添加集群),然后选择 Register(注册)以打开配置页面。

  3. Configure cluster (配置集群) 部分,填写以下字段:

    • Name(名称)– 集群的唯一名称。

    • Provider(提供程序)– 选择以显示 Kubernetes 集群提供程序的下拉列表。如果您不了解具体的提供程序,请选择其他

    • EKS Connector 角色:选择用于连接集群的角色。

  4. 选择 Register cluster(注册集群)。

  5. 此时将显示集群概览页面。如果您想使用 Helm 图表,请复制 helm install 命令并继续下一步。如果要使用 YAML 清单,请选择下载 YAML 文件,将清单文件下载到本地驱动程序。

    重要
    • 这是您复制 helm install 命令或下载此文件的唯一机会。不要离开此页面,否则将无法访问此链接,届时您必须注销集群并从头开始此步骤。

    • 对于注册的集群,命令或清单文件只能使用一次。如果从 Kubernetes 集群中删除资源,则必须重新注册集群并获取新的清单文件。

    继续执行下一步,以将清单文件应用于 Kubernetes 集群。

eksctl
先决条件
要使用 eksctl 注册集群
  1. 提供名称、提供程序和区域来注册集群。

    eksctl register cluster --name my-cluster --provider my-provider --region region-code

    输出示例:

    2021-08-19 13:47:26 [ℹ]  creating IAM role "eksctl-20210819194112186040"
    2021-08-19 13:47:26 [ℹ]  registered cluster "<name>" successfully
    2021-08-19 13:47:26 [ℹ]  wrote file eks-connector.yaml to <current directory>
    2021-08-19 13:47:26 [ℹ]  wrote file eks-connector-clusterrole.yaml to <current directory>
    2021-08-19 13:47:26 [ℹ]  wrote file eks-connector-console-dashboard-full-access-group.yaml to <current directory>
    2021-08-19 13:47:26 [!]  note: "eks-connector-clusterrole.yaml" and "eks-connector-console-dashboard-full-access-group.yaml" give full EKS Console access to IAM identity "<aws-arn>", edit if required; read https://eksctl.io/usage/eks-connector for more info
    2021-08-19 13:47:26 [ℹ]  run `kubectl apply -f eks-connector.yaml,eks-connector-clusterrole.yaml,eks-connector-console-dashboard-full-access-group.yaml` before expiry> to connect the cluster
                                

    这将在本地计算机上创建文件。必须在 3 天内将这些文件应用到外部集群,否则注册将会过期。

  2. 在可以访问集群的终端中,应用 eks-connector-binding.yaml 文件:

    kubectl apply -f eks-connector-binding.yaml

步骤 2:安装 eks-connector 代理

Helm chart
  1. 如果在上一步中使用了 Amazon CLI,请将以下命令中的 ACTIVATION_CODEACTIVATION_ID 分别替换为 activationId、和 activationCode 值。将 aws-region 替换为在上一步中使用的 Amazon Web Services 区域。然后运行命令在注册集群上安装 eks-connector 代理:

    $ helm install eks-connector \ --namespace eks-connector \ oci://public.ecr.aws/eks-connector/eks-connector-chart \ --set eks.activationCode=ACTIVATION_CODE \ --set eks.activationId=ACTIVATION_ID \ --set eks.agentRegion=aws-region

    如果在上一步中使用了 Amazon Web Services Management Console,请使用从上一步复制的已填充这些值的命令。

  2. 检查已安装 eks-connector 部署的运行状况,并等待 Amazon EKS 中已注册集群的状态变为 ACTIVE

YAML manifest

通过将 Amazon EKS Connector 清单文件应用于 Kubernetes 集群来完成连接。为此,必须使用前面描述的方法。如果没有在 3 天内应用清单,Amazon EKS Connector 注册将过期。如果集群连接过期,则必须在再次连接集群之前注销集群。

  1. 下载 Amazon EKS Connector YAML 文件。

    curl -O https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector/latest/eks-connector.yaml
  2. 编辑 Amazon EKS Connector YAML 文件,将 %AWS_REGION%%EKS_ACTIVATION_ID%%EKS_ACTIVATION_CODE% 的所有引用替换为上一步输出的 aws-regionactivationIdactivationCode

    以下示例命令可以替换这些值。

    sed -i "s~%AWS_REGION%~$aws-region~g; s~%EKS_ACTIVATION_ID%~$EKS_ACTIVATION_ID~g; s~%EKS_ACTIVATION_CODE%~$(echo -n $EKS_ACTIVATION_CODE | base64)~g" eks-connector.yaml
    重要

    确保激活码采用 base64 格式。

  3. 在可以访问集群的终端中,可以运行以下命令应用更新的清单文件:

    kubectl apply -f eks-connector.yaml
  4. 将绑定 Amazon EKS Connector 清单和角色的 YAML 文件应用于 Kubernetes 集群后,确认该集群现在已连接。

    aws eks describe-cluster \ --name "my-first-registered-cluster" \ --region AWS_REGION

    该输出应包含 status=ACTIVE

  5. (可选)向集群添加标签。有关更多信息,请参阅为您的 Amazon EKS 资源添加标签

后续步骤

如果您对这些步骤有任何疑问,请参阅 排查 Amazon EKS Connector 中的问题

要向其他 IAM 主体授予对 Amazon EKS 控制台的访问权限以查看已连接的集群中的 Kubernetes 资源,请参阅向 IAM 主体授予查看集群上的 Kubernetes 资源的访问权限