将外部 Kubernetes 集群连接到 Amazon EKS 管理控制台
您可以在以下过程中使用多种方法将外部 Kubernetes 集群连接到 Amazon EKS。此过程包括两个步骤:向 Amazon EKS 注册集群,在集群中安装 eks-connector
代理。
重要
您必须在完成第一步后 3 天内(注册到期之前)完成第二步。
注意事项
安装代理时,您可以使用 YAML 清单。或者,如果您向 AWS Management Console 或 AWS 命令行界面注册集群,则可以使用 Helm。但是,如果您向 eksctl
注册集群,则无法使用 Helm 安装代理。
先决条件
-
确保已创建 Amazon EKS Connector 代理角色。按照创建 Amazon EKS Connector 代理角色中的步骤操作。
-
您必须拥有以下权限才能注册集群:
-
eks:RegisterCluster
-
ssm:CreateActivation
-
ssm:DeleteActivation
-
iam:PassRole
-
步骤 1:注册集群
要向 Amazon EKS 连接器注册集群,您可以使用以下工具之一:
AWS CLI
-
必须安装 AWS CLI。要进行安装或升级,请参阅安装 AWS 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-region
、activationId
和activationCode
值。
AWS Management Console
-
选择 Add cluster(添加集群),然后选择 Register(注册)以打开配置页面。
-
在 Configure cluster (配置集群) 部分,填写以下字段:
-
Name(名称)– 集群的唯一名称。
-
Provider(提供程序)– 选择以显示 Kubernetes 集群提供程序的下拉列表。如果您不了解具体的提供程序,请选择其它。
-
EKS Connector 角色:选择用于连接集群的角色。
-
-
选择 Register cluster(注册集群)。
-
此时将显示集群概览页面。如果您想使用 Helm 图表,请复制
helm install
命令并继续下一步。如果要使用 YAML 清单,请选择下载 YAML 文件,将清单文件下载到本地驱动程序。重要
这是您复制
helm install
命令或下载此文件的唯一机会。不要离开此页面,否则将无法访问此链接,届时您必须注销集群并从头开始此步骤。对于注册的集群,命令或清单文件只能使用一次。如果从 Kubernetes 集群中删除资源,则必须重新注册集群并获取新的清单文件。
继续执行下一步,以将清单文件应用于 Kubernetes 集群。
eksctl
-
必须安装
eksctl
版本0.68
或更高版本。要安装或对其升级,请参阅 开始使用 Amazon EKS – eksctl。 -
提供名称、提供程序和区域来注册集群。
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 天内将这些文件应用到外部集群,否则注册将会过期。
-
在可以访问集群的终端中,应用
eks-connector-binding.yaml
文件:kubectl apply -f eks-connector-binding.yaml
步骤 2:安装 eks-connector
代理
要安装 eks-connector
代理,请使用以下工具之一:
helm
注意
如果您向 eksctl
注册了集群,则请使用 YAML 清单方法而不是 Helm 图表方法。
-
如果在上一步中使用了 AWS CLI,请将以下命令中的
ACTIVATION_CODE
和ACTIVATION_ID
分别替换为activationId
和activationCode
值。将aws-region
替换为在上一步中使用的 AWS 区域。然后运行命令在注册集群上安装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
如果在上一步中使用了 AWS Management Console,请使用从上一步复制的已填充这些值的命令。
-
检查已安装
eks-connector
部署的运行状况,并等待 Amazon EKS 中已注册集群的状态变为ACTIVE
。
yaml
通过将 Amazon EKS Connector 清单文件应用于 Kubernetes 集群来完成连接。为此,必须使用前面描述的方法。如果没有在 3 天内应用清单,Amazon EKS Connector 注册将过期。如果集群连接过期,则必须在再次连接集群之前注销集群。
-
下载 Amazon EKS Connector YAML 文件。
curl -O https://amazon-eks.s3.us-west-2.amazonaws.com/eks-connector/manifests/eks-connector/latest/eks-connector.yaml
-
编辑 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 格式。
-
在可以访问集群的终端中,可以运行以下命令应用更新的清单文件:
kubectl apply -f eks-connector.yaml
-
将绑定 Amazon EKS Connector 清单和角色的 YAML 文件应用于 Kubernetes 集群后,确认该集群现在已连接。
aws eks describe-cluster \ --name "my-first-registered-cluster" \ --region AWS_REGION
该输出应包含
status=ACTIVE
。 -
(可选)向集群添加标签。有关更多信息,请参阅 使用标签整理 Amazon EKS 资源。
后续步骤
如果您对这些步骤有任何疑问,请参阅 排查 Amazon EK Connector 问题。
要向其他 IAM 主体授予对 Amazon EKS 控制台的访问权限以查看已连接的集群中的 Kubernetes 资源,请参阅授予在 Amazon EKS 控制台上查看 Kubernetes 集群资源的权限。