1. 课程导论:什么是 AppSet、GitOps 的核心原则、为什么需要准入策略覆盖高风险变更
在云原生与 GitOps 的工程实践中,ApplicationSet(AppSet) 是 ArgoCD 生态中用于多集群、多环境应用部署的关键控制器。它通过模板化生成多个 ArgoCD Application 对象,解决了传统 GitOps 模式下“每个环境手动维护 Application YAML”的痛点。然而,AppSet 的自动化能力也带来了新的风险:一次模板变更可能同时影响数百个集群或环境,若缺乏准入控制,高风险变更将直接穿透到生产环境。
1.1 什么是 ApplicationSet(AppSet)
ApplicationSet 是 ArgoCD 的一个子项目,它允许用户通过一个 ApplicationSet 自定义资源(CR) 定义生成器(Generators)和模板(Template),从而动态创建、更新或删除多个 ArgoCD Application。常见的生成器包括:
- List Generator:基于静态列表生成 Application。
- Git Generator:根据 Git 仓库中的目录或文件变化生成 Application。
- Cluster Generator:根据 ArgoCD 管理的集群列表生成 Application。
- Matrix Generator:组合多个生成器的结果。
核心价值:AppSet 将“应用部署策略”从“逐个管理 Application”提升为“声明式模板 + 自动化生成”,是 GitOps 多集群管理的基石。
1.2 GitOps 的核心原则
GitOps 是一种以 Git 仓库作为单一事实来源(Single Source of Truth)的运维模式。其核心原则可归纳为以下四点:
| 原则 | 描述 | 在 AppSet 场景中的体现 |
|---|---|---|
| 声明式 | 系统的期望状态以声明式配置存储在 Git 中 | AppSet CR 和 Application 模板均为声明式 YAML |
| 版本控制 | 所有变更通过 Git 提交,具备完整审计轨迹 | AppSet 的生成器参数(如 Git Generator)直接引用仓库路径 |
| 自动同步 | 集群代理持续将实际状态拉向期望状态 | ArgoCD 自动同步由 AppSet 生成的 Application |
| 可观测 | 偏离(Drift)可被检测并告警 | AppSet 生成的 Application 状态可被集中监控 |
实践要点:在 AppSet 驱动的 GitOps 工作流中,Git 仓库中的每一次提交都可能触发跨集群的配置变更。因此,Git 提交的“准入控制”比传统单集群 GitOps 更为关键。
1.3 为什么需要准入策略覆盖高风险变更
AppSet 虽然提升了部署效率,但也引入了 “高风险变更” 的扩散问题。以下场景是典型的“高风险变更”:
- 模板参数错误:例如将生产环境的副本数误设为 0,或引用了错误的镜像标签。
- 生成器范围失控:Cluster Generator 意外包含了未授权的集群,导致配置泄露。
- 权限越级:开发者通过修改 AppSet 模板,绕过了环境隔离策略(如直接修改生产环境配置)。
- 合规性破坏:变更违反了组织安全基线(如允许特权容器、关闭 Pod 安全策略)。
传统 GitOps 依赖“代码审查 + 分支保护”来拦截风险,但在 AppSet 场景下,一次合并请求可能同时影响多个集群,人工审查难以覆盖所有生成结果。因此,需要引入 准入策略(Admission Policy) 在变更生效前进行自动化校验。
风险警示:没有准入策略的 AppSet 部署,相当于“自动化扩散风险”。一个错误的参数变更可能在 30 秒内同步到所有生产集群,而人工回滚往往需要 5-10 分钟。这期间的业务影响可能是灾难性的。
本课程将深入讲解如何为 AppSet 设计并实施准入策略,覆盖从策略定义、引擎选择(如 OPA/Gatekeeper、Kyverno)、到 CI/CD 流水线集成的完整实践,确保 GitOps 高风险变更在到达集群之前被有效拦截。