帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 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 集成时:
-
用户通过 EKS 控制台访问 Argo CD 用户界面
-
他们使用 Amazon Identity Center(可以与企业身份提供者联合)进行身份验证
-
Amazon Identity Center 向 Argo CD 提供用户和组信息
-
Argo CD 会根据配置将用户和组映射到 RBAC 角色
-
用户只能看到他们有权访问的应用程序和资源
使用 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 注册其他集群时:
-
您需要创建集群密钥,并通过 ARN 来引用目标 EKS 集群
-
您需要创建针对不同集群的 Applications 或 ApplicationSets
-
Argo CD 会连接到每个集群以部署应用程序和监视资源
-
您可以通过单个 Argo CD 用户界面查看和管理所有集群
多集群的先决条件
在注册其他集群之前:
-
在目标集群上,为 Argo CD 功能角色创建访问条目
-
确保 Argo CD 功能与目标集群之间建立网络连接
-
验证访问目标集群所需的 IAM 权限
注册集群
使用 argocd 命名空间中的 Kubernetes Secret 注册集群。
获取目标集群 ARN。将 region-code 替换为目标集群所在的 Amazon 区域,并将 target-cluster 替换为目标集群的名称。
aws eks describe-cluster \ --regionregion-code\ --nametarget-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 \ --regionregion-code\ --cluster-nametarget-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 访问条目中:
-
在目标账户中的目标 EKS 集群上创建访问条目
-
将源账户中的 Argo CD IAM 功能角色 ARN 用作主体
-
为访问条目配置相应的 Kubernetes RBAC 权限
-
使用其 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-namemy-cluster\ --capability-namemy-argocd\ --query 'capability.configuration.argoCd.webhookUrl' \ --output text \ --regionregion-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 通知时的回退机制。
后续步骤
-
使用 Argo CD:了解如何创建和管理 Argo CD 应用程序
-
排查 Argo CD 功能的问题:排查 Argo CD 问题
-
使用功能资源:管理 Argo CD 功能资源