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 vs Push 模式对比 Push 模式 CI/CD 工具 Kubernetes API kubectl apply • 集群无需出站访问 • 需要管理凭证 • 策略在推送前执行 Pull 模式 Git 仓库 ArgoCD/Flux git pull • 集群主动拉取 • 无需暴露集群 API • 策略在 Agent 内执行
实践建议:在 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 集成架构 Git 仓库 ArgoCD Flux Kyverno 策略生效路径 1. 开发者提交 YAML 到 Git 仓库 2. ArgoCD/Flux 从 Git 拉取配置并调和到集群 3. Kyverno 作为 Admission Controller 拦截资源创建/更新请求 4. 策略验证通过后,资源才被持久化到 etcd
注意:虽然 ArgoCD 和 Flux 都支持自动同步,但在生产环境中建议开启 手动同步 + 策略预检 模式。自动同步配合 Kyverno 的 Mutating 策略可能导致配置漂移,增加排障难度。

2.5 小结:GitOps 与策略引擎的协同点

回顾完这些核心概念后,可以总结出 Kyverno 在 GitOps 架构中的三个关键协同位置:

  1. Git 端预检:在 CI 阶段使用 Kyverno CLI 对 PR 中的 YAML 进行静态策略检查,提前拦截不合规配置。
  2. 同步前校验:ArgoCD/Flux 在应用配置前,通过 PreSync Hook 或 Admission Controller 调用 Kyverno 进行二次验证。
  3. 运行时强制:Kyverno 作为集群内的 Admission Webhook,对所有资源变更进行实时策略执行,形成最终防线。