2、GitOps核心概念回顾:声明式配置、Git作为单一事实来源、Pull vs Push模式、ArgoCD/Flux简介
在深入 Kyverno 策略引擎与 GitOps 的集成实践之前,有必要先厘清 GitOps 架构的四个核心支柱。这些概念不仅是理解后续章节的基础,也是设计策略生效路径的关键依据。
2.1 声明式配置:期望状态驱动
声明式配置是 GitOps 的哲学起点。运维人员不再编写“如何做”的指令式脚本(如 kubectl run 或 kubectl apply -f),而是直接描述系统“应该是什么样”。
- 指令式(Imperative):关注步骤。例如:
kubectl create deployment nginx --image=nginx:1.25。 - 声明式(Declarative):关注结果。例如:在 YAML 中定义 Deployment 的 replicas、image、ports,然后交给控制器去调和。
关键区别:声明式配置天然具备幂等性——无论应用多少次,只要期望状态不变,最终结果一致。这为策略引擎提供了稳定的“检视面”:Kyverno 可以直接对 Git 仓库中的 YAML 清单进行静态验证,而无需等待运行时。
2.2 Git 作为单一事实来源
在 GitOps 中,Git 仓库不仅是代码存储库,更是整个集群的“期望状态数据库”。所有基础设施配置、应用部署清单、策略定义都必须通过 Pull Request 合并到 Git 仓库的主分支。
| 特性 | 传统运维 | GitOps |
|---|---|---|
| 状态来源 | 数据库、CMDB、人工记忆 | Git 仓库(单一入口) |
| 变更记录 | 操作日志、聊天记录 | Git commit 历史(完整审计) |
| 回滚方式 | 手动执行逆向操作 | git revert + 自动同步 |
| 策略一致性 | 依赖运行时准入 Webhook | Git 端预检 + 运行时双重保障 |
将 Git 作为单一事实来源后,Kyverno 的策略可以提前在 CI 流水线中执行(例如通过 kyverno-json 或 kyverno apply 命令),在配置进入集群之前就拦截违规。
2.3 Pull vs Push 模式
GitOps 工具与集群的交互方式分为两种模式,直接影响策略的生效时机和网络拓扑。
- Push 模式:CI/CD 工具(如 Jenkins、GitLab CI)直接通过
kubectl或 API 将配置推送到集群。集群无需主动访问外部。 - Pull 模式:集群内部运行一个 Agent(如 ArgoCD、Flux),由 Agent 主动从 Git 仓库拉取配置并调和。集群无需对外暴露 API。
实践建议:在 Pull 模式下,Kyverno 策略可以部署在集群内作为 Admission Controller,与 ArgoCD/Flux 形成“Git 端预检 + 运行时强制”的双层防线。Push 模式则更适合在 CI 阶段使用
kyverno-json 进行静态策略检查。
2.4 ArgoCD 与 Flux 简介
ArgoCD 和 Flux 是目前最主流的两个 GitOps 工具,它们都采用 Pull 模式,但在架构和策略集成方式上存在差异。
| 特性 | ArgoCD | Flux |
|---|---|---|
| 架构 | Controller + API Server + UI | 多 Controller(Source、Kustomize、Helm、Notification) |
| 同步策略 | 支持自动/手动同步,Prune 策略灵活 | 自动同步为主,支持依赖排序 |
| 多集群支持 | 原生支持,通过 Cluster Secret 或 ArgoCD ApplicationSet | 通过 Kustomize 覆盖或 Flux CLI 引导 |
| 策略集成 | 支持 PreSync/Sync/PostSync Hooks,可调用 Kyverno CLI | 通过 Flux 的 postBuild 子流程或 Admission Controller |
| UI 与可观测性 | 内置 Web UI,支持 Diff 视图 | 依赖 flux diff 命令或第三方 Dashboard |
注意:虽然 ArgoCD 和 Flux 都支持自动同步,但在生产环境中建议开启 手动同步 + 策略预检 模式。自动同步配合 Kyverno 的 Mutating 策略可能导致配置漂移,增加排障难度。
2.5 小结:GitOps 与策略引擎的协同点
回顾完这些核心概念后,可以总结出 Kyverno 在 GitOps 架构中的三个关键协同位置:
- Git 端预检:在 CI 阶段使用 Kyverno CLI 对 PR 中的 YAML 进行静态策略检查,提前拦截不合规配置。
- 同步前校验:ArgoCD/Flux 在应用配置前,通过 PreSync Hook 或 Admission Controller 调用 Kyverno 进行二次验证。
- 运行时强制:Kyverno 作为集群内的 Admission Webhook,对所有资源变更进行实时策略执行,形成最终防线。