注册目标集群 - Amazon EKS

帮助改进此页面

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

注册目标集群

注册集群以允许 Argo CD 向其部署应用程序。您可以注册 Argo CD 运行所在的同一集群(本地集群),也可以注册位于不同账户或区域的远程集群。一旦集群被注册,它将一直处于未知连接状态,直到您在该集群内创建应用程序。要在集群注册后创建 Argo CD 应用程序,请参阅 创建应用程序

先决条件

  • 已创建具有 Argo CD 功能的 EKS 集群

  • 已配置 kubectl 以与集群通信

  • 对于远程集群:需要适当的 IAM 权限和访问条目

注册本地集群

要将应用程序部署到 Argo CD 运行所在的同一集群,请将其注册为部署目标。

重要

Argo CD 功能不会自动注册本地集群。必须进行明确注册才能将应用程序部署到同一集群。您可以使用集群名称 in-cluster 以实现与线上大多数 Argo CD 示例的兼容性。

注意

系统会自动为具有 Argo CD 功能角色的本地集群创建 EKS 访问条目,但默认情况下不会授予 Kubernetes RBAC 权限。这遵循最低权限的原则,您必须根据自己的使用案例明确配置 Argo CD 所需的权限。例如,如果您仅将此集群用作 Argo CD 集线器中心来管理远程集群,则它不需要任何本地部署权限。有关配置选项,请参阅下面的访问条目 RBAC 要求部分。

使用 Argo CD CLI

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/my-cluster \ --name local-cluster

使用 Kubernetes Secret

apiVersion: v1 kind: Secret metadata: name: local-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster stringData: name: local-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster project: default

应用配置:

kubectl apply -f local-cluster.yaml
注意

server 字段中使用 EKS 集群 ARN,而不是 Kubernetes API 服务器 URL。托管功能需要使用 ARN 来识别集群。不支持默认的 kubernetes.default.svc

注册远程集群

要部署到远程集群:

步骤 1:在远程集群上创建访问条目

region-code 替换为远程集群所在的 AWS 区域,将 remote-cluster 替换为远程集群名称,然后将 ARN 替换为 Argo CD 功能角色 ARN。

aws eks create-access-entry \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD

第 2 步:将访问策略与 Kubernetes RBAC 权限关联

访问条目需要 Kubernetes RBAC 权限,以便 Argo CD 能够部署应用程序。要快速入门,您可以使用 AmazonEKSClusterAdminPolicy

aws eks associate-access-policy \ --region region-code \ --cluster-name remote-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy 提供完全的集群管理员访问权限(等同于 system:masters)。这便于入门,但不应在生产环境中使用。对于生产环境,通过将访问条目与自定义的 Kubernetes 组关联,并创建相应的角色或 ClusterRole 绑定,使用更严格的权限。有关最低权限配置,请参阅下面的生产设置部分。

步骤 3:在 Argo CD 中注册集群

使用 Argo CD CLI

argocd cluster add <cluster-context-name> \ --aws-cluster-name arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster \ --name remote-cluster

使用 Kubernetes Secret

apiVersion: v1 kind: Secret metadata: name: remote-cluster namespace: argocd labels: argocd.argoproj.io/secret-type: cluster stringData: name: remote-cluster server: arn:aws:eks:us-west-2:111122223333:cluster/remote-cluster project: default

应用配置:

kubectl apply -f remote-cluster.yaml

跨账户集群

要部署到不同 AWS 账户中的集群,请执行以下操作:

  1. 在目标账户中,使用来自源账户的 Argo CD IAM 功能角色 ARN 作为主体,在目标 EKS 集群上创建访问条目

  2. 将访问策略与适当的 Kubernetes RBAC 权限关联

  3. 使用其 EKS 集群 ARN 在 Argo CD 中注册集群

无需创建额外的 IAM 角色或配置信任策略,EKS 访问条目会处理跨账户访问。

集群 ARN 格式包括区域,因此跨区域部署与同区域部署所采用的流程相同。

验证集群注册

查看已注册集群:

kubectl get secrets -n argocd -l argocd.argoproj.io/secret-type=cluster

或在 Argo CD 用户界面的“设置 → 集群”下查看集群状态。

私有集群

Argo CD 功能支持对完全私有的 EKS 集群进行透明访问,无需进行 VPC 对等连接或专门的网络配置。

AWS 会自动管理 Argo CD 功能与私有远程集群之间的连接。

只需使用其 ARN 注册私有集群,无需进行额外的联网设置。

访问条目 RBAC 要求

创建 Argo CD 功能时,系统会自动为功能角色创建 EKS 访问条目,但默认情况下不会授予 Kubernetes RBAC 权限。这种有意的设计遵循了最低权限原则,即不同的使用案例需要不同的权限。

例如:* 如果您仅将该集群用作 Argo CD 中心以管理远程集群,则它无需本地部署权限 * 如果您在本地部署应用程序,则需要在整个集群范围内拥有读取权限,并对特定命名空间拥有写入权限 * 如果您需要创建 CRD,则需要额外的集群管理员权限

您必须根据自己的要求明确配置 Argo CD 所需的权限。

Argo CD 的最低权限

Argo CD 要想正常运行且不出故障,需要两种类型的权限:

读取权限(集群范围):Argo CD 必须能够读取集群中的所有资源类型和自定义资源定义(CRD),以便:

  • 资源发现和运行状况检查

  • 检测所需状态和实际状态之间的漂移

  • 在部署之前验证资源

写入权限(特定于命名空间):Argo CD 需要创建、更新和删除应用程序中定义的资源的权限:

  • 部署应用程序工作负载(部署、服务、ConfigMaps 等)

  • 应用自定义资源(特定于您的应用程序的 CRD)

  • 管理应用程序生命周期

快速设置

对于快速入门、测试或开发环境,请使用 AmazonEKSClusterAdminPolicy

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster
重要

AmazonEKSClusterAdminPolicy 提供完整的集群管理员访问权限(等同于 system:masters),包括创建 CRD、修改集群范围的资源以及部署到任何命名空间的能力。这便于开发和 POC,但不应在生产环境中使用。对于生产,请使用下面的最低权限设置。

具有最低权限的生产设置

对于生产环境,请创建授予以下权限的自定义 Kubernetes RBAC:

  • 在整个集群范围内对所有资源的读取权限(用于发现和运行状况检查)

  • 特定于命名空间的写入权限(用于部署)

步骤 1:将访问条目与自定义 Kubernetes 组关联

aws eks associate-access-policy \ --region region-code \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy \ --access-scope type=namespace,namespaces=app-namespace

步骤 2:创建 ClusterRole 以获取读取访问权限

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: argocd-read-all rules: # Read access to all resources for discovery and health checks - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]

步骤 3:创建角色,以获取对应用程序命名空间的写入权限

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: argocd-deploy namespace: app-namespace rules: # Full access to deploy application resources - apiGroups: ["*"] resources: ["*"] verbs: ["*"]

步骤 4:将角色与 Kubernetes 组绑定

apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: argocd-read-all subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: argocd-read-all apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: argocd-deploy namespace: app-namespace subjects: - kind: Group name: eks-access-entry:arn:aws:iam::111122223333:role/ArgoCDCapabilityRole apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: argocd-deploy apiGroup: rbac.authorization.k8s.io
注意

访问条目的组名格式为 eks-access-entry: 后加主体 ARN。对 Argo CD 应在其中部署应用程序的每个命名空间重复 RoleBinding 操作。

重要

Argo CD 必须能够读取集群中的所有资源类型以进行运行状况检查和发现,即使它仅部署到特定的命名空间也是如此。如果没有整个集群范围的读取权限,Argo CD 将在检查应用程序运行状况时显示错误。

使用项目限制集群访问

使用项目控制应用程序可以部署到哪些集群和命名空间,方法是在 spec.destinations 中配置允许的目标集群和命名空间:

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: production namespace: argocd spec: destinations: - server: arn:aws:eks:us-west-2:111122223333:cluster/prod-cluster namespace: '*' - server: arn:aws:eks:eu-west-1:111122223333:cluster/prod-eu-cluster namespace: '*' sourceRepos: - 'https://github.com/example/production-apps'

有关更多信息,请参阅 使用 Argo CD 项目

其他资源