

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 将外部 Kubernetes 集群连接到 Amazon EKS 管理控制台
<a name="connecting-cluster"></a>

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

**重要**  
您必须在完成第一步后 3 天内（注册到期之前）完成第二步。

## 注意事项
<a name="connecting-cluster-considerations"></a>

安装代理时，您可以使用 YAML 清单。或者，如果您向 Amazon Web Services 管理控制台 或 Amazon 命令行界面注册集群，则可以使用 Helm。但是，如果您向 `eksctl` 注册集群，则无法使用 Helm 安装代理。

## 先决条件
<a name="connector-prereqs"></a>
+ 确保已创建 Amazon EKS Connector 代理角色。按照[创建 Amazon EKS Connector 代理角色](connector-iam-role.md#create-connector-role)中的步骤操作。
+ 您必须拥有以下权限才能注册集群：
  +  `eks:RegisterCluster` 
  +  `ssm:CreateActivation` 
  +  `ssm:DeleteActivation` 
  +  `iam:PassRole` 

## 步骤 1：注册集群
<a name="connector-connecting"></a>

要向 Amazon EKS 连接器注册集群，您可以使用以下工具之一：
+  [Amazon CLI](#awscli_register_cluster_connect) 
+  [Amazon Web Services 管理控制台](#console_register_cluster_connect) 
+  [`eksctl`](#eksctl_register_cluster_connect) 

### Amazon CLI
<a name="awscli_register_cluster_connect"></a>

1.  必须安装 Amazon CLI。要进行安装或升级，请参阅[安装 Amazon CLI](https://docs.amazonaws.cn/cli/latest/userguide/cli-chap-install.html)。

1. 对于 Connector 配置，请指定您的 Amazon EKS Connector 代理 IAM 角色。有关更多信息，请参阅 [Amazon EKS Connector 所需的 IAM 角色](eks-connector.md#connector-iam-permissions)。

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

   示例输出如下。

   ```
   {
       "cluster": {
           "name": "my-first-registered-cluster",
           "arn": "arn:aws-cn: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-cn:iam::111122223333:role/AmazonEKSConnectorAgentRole"
           },
           "status": "CREATING"
       }
   }
   ```

   在下一步中使用 `aws-region`、`activationId` 和 `activationCode` 值。

### Amazon Web Services 管理控制台
<a name="console_register_cluster_connect"></a>

1. 打开 [Amazon EKS 控制台](https://console.amazonaws.cn/eks/home#/clusters)。

1. 选择 **Add cluster**（添加集群），然后选择 **Register**（注册）以打开配置页面。

1. 在 **Configure cluster (配置集群)** 部分，填写以下字段：
   +  **Name（名称）**– 集群的唯一名称。
   +  **Provider**（提供程序）– 选择以显示 Kubernetes 集群提供程序的下拉列表。如果您不了解具体的提供程序，请选择**其它**。
   +  **EKS Connector 角色**：选择用于连接集群的角色。

1. 选择 **Register cluster**（注册集群）。

1. 此时将显示集群概览页面。如果您想使用 Helm 图表，请复制 `helm install` 命令并继续下一步。如果要使用 YAML 清单，请选择**下载 YAML 文件**，将清单文件下载到本地驱动程序。
**重要**  
这是您复制 `helm install` 命令或下载此文件的唯一机会。不要离开此页面，否则将无法访问此链接，届时您必须注销集群并从头开始此步骤。

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

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

### `eksctl`
<a name="eksctl_register_cluster_connect"></a>

1.  必须安装 `eksctl` 版本 `0.68` 或更高版本。要安装或对其升级，请参阅 [开始使用 Amazon EKS – `eksctl`](getting-started-eksctl.md)。

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 天内将这些文件应用到外部集群，否则注册将会过期。

1. 在可以访问集群的终端中，应用 `eks-connector-binding.yaml` 文件：

   ```
   kubectl apply -f eks-connector-binding.yaml
   ```

## 步骤 2：安装 `eks-connector` 代理
<a name="eks-connector-apply"></a>

要安装 `eks-connector` 代理，请使用以下工具之一：
+  [Helm](#helm_agent_cluster_connect) 
+  [yaml](#yaml_agent_cluster_connect) 

### Helm
<a name="helm_agent_cluster_connect"></a>

**注意**  
如果您向 `eksctl` 注册了集群，则请使用 YAML 清单方法而不是 Helm 图表方法。

1. 如果在上一步中使用了 Amazon CLI，请将以下命令中的 `ACTIVATION_CODE` 和 `ACTIVATION_ID` 分别替换为 `activationId` 和 `activationCode` 值。将 `aws-region` 替换为在上一步中使用的 Amazon 区域。然后运行命令在注册集群上安装 `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 管理控制台，请使用从上一步复制的已填充这些值的命令。

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

### yaml
<a name="yaml_agent_cluster_connect"></a>

通过将 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
   ```

1. 编辑 Amazon EKS Connector YAML 文件，将 `%AWS_REGION%`、`%EKS_ACTIVATION_ID%`、`%EKS_ACTIVATION_CODE%` 的所有引用替换为上一步输出的 `aws-region`、`activationId` 和 `activationCode`。

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

   ```
   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 格式。

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

   ```
   kubectl apply -f eks-connector.yaml
   ```

1. 将绑定 Amazon EKS Connector 清单和角色的 YAML 文件应用于 Kubernetes 集群后，确认该集群现在已连接。

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

   该输出应包含 `status=ACTIVE`。

1. （可选）向集群添加标签。有关更多信息，请参阅 [使用标签整理 Amazon EKS 资源](eks-using-tags.md)。

## 后续步骤
<a name="eks-connector-next"></a>

如果您对这些步骤有任何疑问，请参阅 [排查 Amazon EKS Connector 问题](troubleshooting-connector.md)。

要向其他 [IAM 主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html#iam-term-principal)授予对 Amazon EKS 控制台的访问权限以查看已连接的集群中的 Kubernetes 资源，请参阅[授予在 Amazon EKS 控制台上查看 Kubernetes 集群资源的权限](connector-grant-access.md)。