2. GitOps 工作流基础:Git 作为单一事实来源、声明式配置、自动同步机制
GitOps 是一种以 Git 仓库为运维中心的操作模型。它将声明式配置与版本控制、自动化交付相结合,确保集群状态始终与 Git 仓库中定义的期望状态保持一致。理解 GitOps 的三大核心支柱——单一事实来源、声明式配置和自动同步机制——是掌握后续 AppSet 准入策略与风险变更管控的前提。
2.1 单一事实来源(Single Source of Truth)
在传统运维模式中,集群状态可能分散在 CI/CD 脚本、手动 kubectl 命令、临时补丁或不同成员的本地配置中。GitOps 强制要求:Git 仓库是唯一被信任的期望状态定义。
- 版本化历史:每一次配置变更都通过 Git commit 记录,支持回滚、审计和差异对比。
- 不可变发布:不允许直接修改运行中的集群;所有变更必须通过修改 Git 仓库中的 YAML 文件触发。
- 分支策略:通常使用 main 分支作为生产环境的权威来源,feature 分支用于开发与评审。
合规要点:单一事实来源是满足 SOC2、PCI-DSS 等审计要求的基础。任何绕过 Git 的直接集群操作都应被视为安全事件。
2.2 声明式配置(Declarative Configuration)
声明式配置意味着用户描述“集群应该是什么状态”,而非“如何达到该状态”。Kubernetes 原生资源(Deployment、Service、ConfigMap 等)本身就是声明式的。GitOps 在此基础上进一步要求:
- 完整清单:Git 仓库中应包含集群所需的所有资源定义,包括命名空间、RBAC、网络策略、存储类等。
- 无副作用:相同的 YAML 文件在任何时间、任何环境应用都应产生相同的结果(幂等性)。
- 环境差异化:通过 Kustomize overlay 或 Helm values 实现环境差异,而非手动修改运行配置。
| 特性 | 命令式(Imperative) | 声明式(Declarative) |
|---|---|---|
| 操作方式 | kubectl run / create / delete | kubectl apply -f manifest.yaml |
| 状态来源 | 操作者记忆或脚本 | Git 仓库中的 YAML 文件 |
| 可审计性 | 低(依赖操作日志) | 高(每次变更对应一个 commit) |
| 回滚能力 | 手动逆向操作 | git revert + 自动同步 |
| 漂移检测 | 无内置机制 | 自动对比并告警 |
2.3 自动同步机制(Automatic Sync)
自动同步是 GitOps 的“执行引擎”。它持续监控 Git 仓库中的期望状态与集群实际状态之间的差异,并自动执行调和操作。主流工具(Argo CD、Flux)均采用这种模式。
核心流程:Git Push → Webhook 或轮询 → 检测差异 → 应用变更 → 状态反馈。
2.4 三种同步模式对比
不同的同步模式适用于不同的变更风险等级。在 AppSet 准入策略设计中,需要根据变更类型选择合适的同步策略。
| 同步模式 | 触发方式 | 适用场景 | 风险等级 |
|---|---|---|---|
| 自动同步 | Git 变更自动触发 | 常规配置更新、无状态应用发布 | 中 |
| 手动同步 | 运维人员点击 Sync | 数据库迁移、高风险 RBAC 变更 | 低(人工审核) |
| 计划同步 | 定时轮询(如每 3 分钟) | 批量作业、非关键环境 | 低(延迟可接受) |
2.5 漂移检测与自愈
GitOps 的自动同步机制不仅处理正向变更,还具备漂移检测能力。当集群状态因外部因素(如手动 kubectl delete、节点故障、HPA 扩缩容)偏离 Git 定义时,Operator 会自动将其恢复。
- 检测周期:Argo CD 默认每 3 分钟扫描一次;Flux 默认每 1 分钟。
- 自愈动作:重新应用 Git 中的最新 manifest,覆盖所有非预期变更。
- 告警集成:漂移事件可发送到 Slack、PagerDuty 或审计日志系统。
安全提示:自动自愈虽然增强了稳定性,但也可能掩盖安全事件。例如,攻击者临时修改 Pod 环境变量窃取凭证,自愈操作会立即恢复配置,导致安全团队无法发现入侵痕迹。建议对关键命名空间启用漂移告警而非自动自愈。
2.6 GitOps 工作流中的风险暴露点
尽管 GitOps 提供了强大的自动化与一致性保障,但在实际落地中仍存在若干风险暴露点。这些风险点正是后续章节中 AppSet 准入策略需要重点覆盖的领域。
| 风险点 | 描述 | 影响范围 |
|---|---|---|
| 直接 Push 到 main | 绕过 PR 审查直接修改生产配置 | 全集群 |
| 敏感信息泄露 | Secret 明文存储在 Git 仓库中 | 安全合规 |
| 权限过度授予 | ServiceAccount 绑定 cluster-admin | RBAC 安全 |
| 自动同步覆盖 | 自愈操作覆盖了合法的临时变更 | 业务连续性 |
| 大规模变更 | 一次 commit 修改数百个资源 | 变更管理 |
课程关联:本章建立的 GitOps 基础概念——单一事实来源、声明式配置、自动同步——是后续理解 AppSet 准入策略如何拦截高风险变更、实施渐进式交付、以及实现合规审计的基石。