2. Argo CD 基础回顾:核心概念、架构组件、工作流程
在深入资源模型驱动的准入策略自动化之前,必须牢固掌握 Argo CD 的基础知识。本章将系统回顾 Argo CD 的核心概念、架构组件以及标准工作流程,为后续章节的项目级策略设计奠定坚实的理论基础。
2.1 核心概念
Argo CD 是一个基于 Kubernetes 的声明式 GitOps 持续交付工具。其核心理念是将目标环境的状态与 Git 仓库中存储的期望状态进行持续同步。以下是几个必须理解的核心概念:
| 概念 | 定义 | 关键作用 |
|---|---|---|
| Application | 一组 Kubernetes 资源的逻辑分组,定义了从哪个 Git 仓库获取资源以及部署到哪个目标集群/命名空间。 | Argo CD 管理的基本单元,所有同步、健康检查、策略评估都围绕 Application 进行。 |
| ApplicationSet | 一个模板化的 Application 生成器,可根据参数(如 Git 目录、集群列表、PR 列表)动态生成多个 Application。 | 实现多集群、多环境、多租户的批量部署管理,是规模化 GitOps 的核心。 |
| Project | 用于隔离和约束 Application 的逻辑边界。定义了允许的目标集群、允许的源仓库、允许的资源类型以及同步策略。 | 实现多租户安全隔离和准入策略控制的核心单元,本课程的核心关注点。 |
| Repository | 存储 Kubernetes 资源清单(YAML/JSON/Helm/Kustomize)的 Git 仓库。 | 作为单一事实来源(Single Source of Truth),驱动所有环境的状态。 |
| Target Cluster | Argo CD 负责部署和同步的目标 Kubernetes 集群。 | 可以是 Argo CD 所在的集群(in-cluster)或外部集群。 |
| Sync | 将 Git 仓库中的期望状态应用到目标集群的过程。 | 确保集群实际状态与 Git 仓库中的声明式配置保持一致。 |
关键理解: Project 是 Argo CD 中实现多租户安全策略的核心。本课程后续设计的准入策略自动化,本质上就是通过编程方式动态生成和更新 Project 的约束规则,从而在 Application 创建或同步时进行拦截和校验。
2.2 架构组件
Argo CD 采用微服务架构,主要由以下几个核心组件构成,它们协同工作以实现 GitOps 工作流。
2.3 工作流程
Argo CD 的标准工作流程遵循 GitOps 的“Pull”模式,即 Argo CD 主动从 Git 仓库拉取配置并应用到集群。以下是典型的工作流步骤:
- 用户提交代码:开发人员将 Kubernetes 资源清单(YAML/Helm/Kustomize)推送到 Git 仓库。
- Argo CD 检测变更:Argo CD 的 Application Controller 定期轮询(或通过 Webhook 事件触发)Git 仓库,发现与集群当前状态存在差异。
- Repo Server 渲染清单:Repo Server 从 Git 仓库拉取最新代码,并根据 Application 配置(如 Helm Values、Kustomize overlay)渲染出最终的 Kubernetes 资源清单。
- Application Controller 执行同步:Application Controller 将渲染后的清单与集群中的实际资源进行对比,然后执行同步操作(创建、更新或删除资源)。
- 健康检查与状态更新:同步完成后,Application Controller 对部署的资源进行健康检查(如 Pod 是否 Running、Deployment 是否 Ready),并更新 Application 的状态(Synced、OutOfSync、Healthy、Degraded)。
- 通知与反馈:Notification Controller 根据状态变化发送通知,用户可通过 Argo CD UI 或 CLI 查看同步结果和资源状态。
工作流关键点: 整个流程是“声明式”的。用户只需在 Git 仓库中声明期望状态,Argo CD 负责确保集群实际状态与期望状态一致。这种模式消除了手动 kubectl apply 的操作风险,并提供了完整的审计追踪。
2.4 同步策略与安全模型
Argo CD 提供了多种同步策略,以适应不同的部署场景。同时,其安全模型通过多层机制保障集群安全。
| 同步策略 | 说明 | 适用场景 |
|---|---|---|
| Manual Sync | 用户手动触发同步操作,Argo CD 不会自动同步。 | 生产环境,需要人工审批的变更。 |
| Auto Sync | Argo CD 自动检测到 Git 仓库变更后立即执行同步。 | 开发/测试环境,追求快速迭代。 |
| Self-Heal | 当集群中的资源被手动修改(配置漂移)时,Argo CD 自动将其恢复为 Git 仓库中的状态。 | 需要严格保证集群状态与 Git 一致的环境。 |
| Prune | 同步时自动删除 Git 仓库中已不存在的资源。 | 清理废弃资源,保持集群整洁。 |
安全警告: 在生产环境中启用 Auto Sync 和 Self-Heal 需要谨慎。建议结合 Project 级别的准入策略(如禁止删除 Namespace、禁止修改关键 CRD)来降低风险。本课程后续将详细讲解如何通过资源模型自动生成这些策略。
Argo CD 的安全模型主要包含以下层次:
- RBAC:基于角色的访问控制,控制用户对 Application、Project、Cluster 等资源的操作权限。
- Project 约束:定义 Application 可以使用的源仓库、目标集群、允许的资源类型和命名空间。
- 资源排除/忽略:通过配置,可以阻止 Argo CD 管理某些敏感资源(如 Secrets、ServiceAccounts)。
- Webhook 签名:验证 Git 仓库 Webhook 请求的合法性,防止恶意触发同步。