帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 \ --regionregion-code\ --cluster-nameremote-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 \ --regionregion-code\ --cluster-nameremote-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 账户中的集群,请执行以下操作:
-
在目标账户中,使用来自源账户的 Argo CD IAM 功能角色 ARN 作为主体,在目标 EKS 集群上创建访问条目
-
将访问策略与适当的 Kubernetes RBAC 权限关联
-
使用其 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 \ --regionregion-code\ --cluster-namemy-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 \ --regionregion-code\ --cluster-namemy-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 项目。
其他资源
-
使用 Argo CD 项目:组织应用程序并强制实施安全边界
-
创建应用程序:部署第一个应用程序
-
使用 ApplicationSets:使用 ApplicationSets 部署到多个集群
-
Argo CD 注意事项:多集群模式和跨账户设置
-
Declarative Cluster Setup
:上游集群配置参考