Argo CD 注意事项 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

帮助改进此页面

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

Argo CD 注意事项

本主题将介绍使用适用于 Argo CD 的 EKS 功能的重要注意事项,包括规划、权限、身份验证和多集群部署模式。

规划

在部署 Argo CD 之前,请考虑以下事项:

存储库策略:确定应用程序清单的存储位置(CodeCommit、GitHub、GitLab、Bitbucket)。为不同的环境规划存储库结构和分支策略。

身份验证方法:决定是使用 Amazon Identity Center 进行 SSO 还是直接管理 Argo CD 用户。建议将 SSO 用于生产环境。

RBAC 策略:规划哪些团队或用户应具有管理员、编辑者或查看者访问权限。将其映射到 Amazon Identity Center 组或 Argo CD 角色。

多集群架构:确定是否要通过单个 Argo CD 实例管理多个集群。考虑为 Argo CD 使用专用的管理集群。

应用程序组织:规划如何构建 Applications 和 ApplicationSets。考虑使用项目按团队或环境组织应用程序。

同步策略:决定应用程序应自动同步还是需要手动批准。开发环境通常采用自动同步,生产环境则采用手动同步。

权限

有关 IAM 功能角色、信任策略和安全最佳实践的详细信息,请参阅 Amazon EKS 功能 IAM 角色EKS 功能的安全注意事项

IAM 功能角色概述

创建 Argo CD 功能资源时,您需要提供 IAM 功能角色。与 ACK 不同,Argo CD 主要管理 Kubernetes 资源,而不是直接管理 Amazon 资源。但是,IAM 角色在以下场景是必需的:

  • 访问 CodeCommit 中的私有 Git 存储库

  • 与 Amazon Identity Center 集成以进行身份验证

  • 访问 Amazon Secrets Manager 中的密钥(如果已配置)

  • 跨集群部署到其他 EKS 集群

CodeCommit 集成

如果使用的是 CodeCommit 存储库,请附加具有读取权限的策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" } ] }
重要

对于生产用途,请将 Resource 字段限制为特定的存储库 ARN,而不是使用 "*"

示例:

"Resource": "arn:aws:codecommit:us-west-2:111122223333:my-app-repo"

这会将 Argo CD 限制为仅管理其所需的存储库。

Secrets Manager 集成

如果要将存储库凭证存储在 Secrets Manager 中,请附加具有读取权限的策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:argocd/*" } ] }

基本设置

对于使用公有 Git 存储库的基本 Argo CD 功能,除了信任策略外,不需要其他的 IAM 策略。

身份验证

Amazon Identity Center 集成

Argo CD 托管功能直接与 Amazon Identity Center(原 Amazon SSO)集成,您能够使用现有的身份提供者进行身份验证。

配置 Amazon Identity Center 集成时:

  1. 用户通过 EKS 控制台访问 Argo CD 用户界面

  2. 他们使用 Amazon Identity Center(可以与企业身份提供者联合)进行身份验证

  3. Amazon Identity Center 向 Argo CD 提供用户和组信息

  4. Argo CD 会根据配置将用户和组映射到 RBAC 角色

  5. 用户只能看到他们有权访问的应用程序和资源

使用 IAM Center 权限集简化访问管理

使用 Argo CD 时,Amazon Identity Center 提供两种不同的身份验证路径:

Argo CD API 身份验证:Identity Center 向 Argo CD 用户界面和 API 提供 SSO 身份验证。这通过 Argo CD 功能的 RBAC 角色映射进行配置。

EKS 集群访问权限:Argo CD 功能使用客户提供的 IAM 角色,通过访问条目向 EKS 集群进行身份验证。可以手动配置这些访问条目以添加或移除权限。

您可以使用 Identity Center 权限集来简化身份管理,允许单个身份同时访问 Argo CD 和 EKS 集群。这样一来,您只需在两个系统中管理一个身份,而无需为 Argo CD 访问和集群访问保留单独的凭证,从而减少了开销。

RBAC 角色映射

Argo CD 具有内置角色,您可以将其映射到 Amazon Identity Center 用户和组:

ADMIN:可以完全访问所有应用程序和设置。可以创建、更新和删除应用程序。可以管理 Argo CD 配置。

EDITOR:可以创建和修改应用程序。无法更改 Argo CD 设置或删除应用程序。

VIEWER:可以对应用程序进行只读访问。可以查看应用程序状态和历史记录。无法进行更改。

注意

角色名称区分大小写,必须为大写(ADMIN、EDITOR、VIEWER)。

重要

EKS 功能与 Amazon Identity Center 集成后,每个 Argo CD 功能可支持最多 1000 个身份。身份可以是用户或组。

多集群部署

Argo CD 托管功能支持多集群部署,便于您通过单个 Argo CD 实例在开发、暂存和生产集群之间管理应用程序。

多集群工作原理

当您向 Argo CD 注册其他集群时:

  1. 您需要创建集群密钥,并通过 ARN 来引用目标 EKS 集群

  2. 您需要创建针对不同集群的 Applications 或 ApplicationSets

  3. Argo CD 会连接到每个集群以部署应用程序和监视资源

  4. 您可以通过单个 Argo CD 用户界面查看和管理所有集群

多集群的先决条件

在注册其他集群之前:

  • 在目标集群上,为 Argo CD 功能角色创建访问条目

  • 确保 Argo CD 功能与目标集群之间建立网络连接

  • 验证访问目标集群所需的 IAM 权限

注册集群

使用 argocd 命名空间中的 Kubernetes Secret 注册集群。

获取目标集群 ARN。将 region-code 替换为目标集群所在的 Amazon 区域,并将 target-cluster 替换为目标集群的名称。

aws eks describe-cluster \ --region region-code \ --name target-cluster \ --query 'cluster.arn' \ --output text

使用集群 ARN 创建集群密钥:

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

server 字段中使用 EKS 集群 ARN,而不是 Kubernetes API 服务器 URL。托管功能需要使用 ARN 来识别目标集群。

应用该密钥:

kubectl apply -f cluster-secret.yaml

在目标集群上配置访问条目

目标集群必须具有访问条目,以授予 Argo CD 功能角色部署应用程序的权限。将 region-code 替换为目标集群所在的 Amazon 区域,将 target-cluster 替换为目标集群的名称,然后将 ARN 替换为 Argo CD 功能角色 ARN。

aws eks create-access-entry \ --region region-code \ --cluster-name target-cluster \ --principal-arn arn:aws:iam::[.replaceable]111122223333:role/ArgoCDCapabilityRole \ --type STANDARD \ --kubernetes-groups system:masters
注意

对于生产用途,可以考虑使用限制性更强的 Kubernetes 组,而不使用 system:masters

私有集群访问

Argo CD 托管功能可以部署到完全私有的 EKS 集群,无需进行 VPC 对等连接或专门的网络配置。Amazon 会自动管理 Argo CD 功能与私有远程集群之间的连接。

跨账户部署

对于跨账户部署,请将源账户中的 Argo CD IAM 功能角色添加到目标集群的 EKS 访问条目中:

  1. 在目标账户中的目标 EKS 集群上创建访问条目

  2. 将源账户中的 Argo CD IAM 功能角色 ARN 用作主体

  3. 为访问条目配置相应的 Kubernetes RBAC 权限

  4. 使用其 EKS 集群 ARN 在 Argo CD 中注册目标集群

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

最佳实践

使用声明式源作为事实来源:将所有应用程序清单存储在 Git 存储库、Helm 注册表或 OCI 映像中,从而实现版本控制、审计跟踪记录和协作。

实施适当的 RBAC:使用 Amazon Identity Center 集成来控制哪些人可以访问和管理 Argo CD 中的应用程序。Argo CD 支持对应用程序内的资源(Deployment、Pod、ConfigMap、Secret)进行精细访问控制。

使用 ApplicationSets 进行多环境部署:使用 ApplicationSets 在不同集群或命名空间中以不同配置部署应用程序。

生命周期管理

应用程序同步策略

控制 Argo CD 如何同步应用程序:

手动同步:应用程序需要手动批准才能同步更改。建议将其用于生产环境。

自动同步:检测到 Git 更改时,应用程序会自动同步。通常用于开发和暂存环境。

自我修复:自动还原对集群所作的手动更改。确保集群状态与 Git 一致。

修剪:自动删除从 Git 中移除的资源。请谨慎使用,因为此操作可能会删除资源。

应用程序运行状况

Argo CD 会持续监控应用程序运行状况:

  • 良好:所有资源均按预期运行

  • 正在处理:正在创建或更新资源

  • 已降级:部分资源运行状况不佳

  • 已暂停:应用程序暂停

  • 缺失:集群中缺少资源

同步时段

配置同步时段以控制何时可以同步应用程序:

  • 仅允许在维护时段进行同步

  • 在工作时间阻止同步

  • 为特定时间安排自动同步

  • 在需要暂时停止所有同步时,采用同步时段应对紧急情况

配置 Webhook 以实现更快同步

默认情况下,Argo CD 每 6 分钟轮询一次 Git 存储库以检测更改。要实现响应速度更快的部署,请配置 Git Webhook 以在推送更改时立即触发同步。

Webhook 具有以下优势:

  • 推送代码时立即同步响应(秒级而非分钟级)

  • 减少轮询开销并提高系统性能

  • 更有效地使用 API 速率限制

  • 用户体验更好,反馈更快

Webhook 端点

Argo CD 功能提供了用于接收 Git 通知的 Webhook 端点。您可以在 EKS 控制台中的集群的“功能”选项卡下查找 Webhook URL,或通过 Amazon CLI 进行检索:

aws eks describe-capability \ --cluster-name my-cluster \ --capability-name my-argocd \ --query 'capability.configuration.argoCd.webhookUrl' \ --output text \ --region region-code

按 Git 提供者配置 Webhook

GitHub:在存储库设置中,添加指向 Argo CD Webhook URL 的 Webhook。将内容类型设置为 application/json,然后选择“仅推送事件”。

GitLab:在项目设置中,添加指向 Argo CD Webhook URL 的 Webhook。启用“推送事件”和“标签推送事件”(可选)。

Bitbucket:在存储库设置中,添加指向 Argo CD Webhook URL 的 Webhook。选择“存储库推送”作为触发器。

CodeCommit:创建 Amazon EventBridge 规则,该规则会在 CodeCommit 存储库状态更改时触发,并将通知发送到 Argo CD Webhook 端点。

有关详细的 Webhook 配置说明,请参阅 Argo CD Webhook Configuration

注意

Webhooks 是对轮询的补充,并不能取而代之。Argo CD 会继续轮询存储库,作为错过 Webhook 通知时的回退机制。

后续步骤