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 或轮询 → 检测差异 → 应用变更 → 状态反馈。
GitOps 自动同步流程 开发者 Push Git 仓库 GitOps Operator (Argo CD / Flux) K8s 集群 状态反馈 / 漂移检测 自动同步机制确保集群实际状态与 Git 仓库中的期望状态持续一致

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 环境变量窃取凭证,自愈操作会立即恢复配置,导致安全团队无法发现入侵痕迹。建议对关键命名空间启用漂移告警而非自动自愈。
漂移检测与自愈流程 Git 期望状态 集群实际状态 差异检测 自愈:重新应用 Git 配置 漂移检测是 GitOps 安全模型的关键环节,也是 AppSet 准入策略需要覆盖的监控点

2.6 GitOps 工作流中的风险暴露点

尽管 GitOps 提供了强大的自动化与一致性保障,但在实际落地中仍存在若干风险暴露点。这些风险点正是后续章节中 AppSet 准入策略需要重点覆盖的领域。

风险点 描述 影响范围
直接 Push 到 main 绕过 PR 审查直接修改生产配置 全集群
敏感信息泄露 Secret 明文存储在 Git 仓库中 安全合规
权限过度授予 ServiceAccount 绑定 cluster-admin RBAC 安全
自动同步覆盖 自愈操作覆盖了合法的临时变更 业务连续性
大规模变更 一次 commit 修改数百个资源 变更管理
课程关联:本章建立的 GitOps 基础概念——单一事实来源、声明式配置、自动同步——是后续理解 AppSet 准入策略如何拦截高风险变更、实施渐进式交付、以及实现合规审计的基石。