1. Gatekeeper 概述

1.1 项目背景:Kubernetes 策略治理的演进

Kubernetes 作为容器编排的事实标准,其声明式 API 和最终一致性模型为应用交付带来了极大便利。然而,随着集群规模扩大和多租户场景普及,如何对资源创建、Pod 调度、安全上下文等操作进行事前校验和持续合规,成为运维团队的核心痛点。

早期社区主要依赖 Admission Webhook 实现自定义校验,但这种方式存在明显短板:

方案 优点 缺点
原生 Admission Webhook 灵活、可编程 每个策略需独立开发 Webhook 服务;策略变更需重新部署;缺乏统一审计与告警
PodSecurityPolicy (PSP) 内置资源、配置简单 策略模型僵化;难以扩展自定义规则;已在 v1.25 移除
Gatekeeper 声明式策略、热加载、审计、可扩展 冷启动性能开销;Rego 学习曲线

Gatekeeper 由 Google、微软、Styra 等公司联合发起,于 2019 年进入 CNCF 沙箱,2022 年晋升为毕业项目。它基于 OPA (Open Policy Agent) 引擎,将策略从硬编码的 Webhook 逻辑中解耦,以 CRD (Custom Resource Definition) 的形式管理策略生命周期,成为 Kubernetes 策略治理的事实标准。

1.2 OPA 与 Rego 简介

OPA 是一个开源的、通用的策略引擎,它将策略决策与业务逻辑分离。OPA 接收结构化数据(JSON/YAML)作为输入,输出“允许/拒绝”或更复杂的策略评估结果。其核心组件包括:

  • Rego 语言:OPA 的声明式查询语言,灵感来源于 Datalog,专为策略定义设计。
  • 数据文档:OPA 将输入数据和策略规则统一视为文档,通过查询表达式进行匹配。
  • 内置函数库:提供字符串、正则、时间、JWT 等常用操作函数。
Rego 核心特性:
  • 声明式:只描述“策略应该是什么”,而非“如何执行”。
  • 不可变:每次查询基于快照,无副作用。
  • 可组合:规则可以分层、继承、复用。

以下是一个简单的 Rego 策略示例,用于禁止使用 latest 标签的镜像:

package k8s.requiredlabels

violation[{"msg": msg}] {
  container := input.review.object.spec.containers[_]
  endswith(container.image, ":latest")
  msg := sprintf("容器 %v 使用了 latest 标签,请指定固定版本", [container.name])
}

1.3 Gatekeeper 在 Kubernetes 中的角色与价值

Gatekeeper 以 Admission Webhook 的形式嵌入 Kubernetes API 请求链路,同时提供 审计 (Audit) 和 约束模板 (ConstraintTemplate) 机制。其核心架构如下图所示:

Gatekeeper 核心架构与策略流 Gatekeeper 核心架构与策略流 kubectl / 用户 Kubernetes API Server Gatekeeper Webhook OPA 策略引擎 ConstraintTemplate CRD Constraint 实例 审计 (Audit) 模块 OPA 数据缓存 说明:API Server 在持久化资源前调用 Gatekeeper Webhook,OPA 引擎根据 ConstraintTemplate 和 Constraint 实例评估请求,审计模块定期扫描集群现有资源。

Gatekeeper 为 Kubernetes 带来的核心价值体现在以下四个维度:

  1. 策略即代码 (Policy as Code):使用 Rego 编写策略,存储在 Git 仓库中,支持版本控制、代码审查和 CI/CD 集成。
  2. 热加载与动态更新:新增或修改 ConstraintTemplate / Constraint 后,无需重启 Webhook 服务,OPA 引擎自动重新编译策略。
  3. 审计与合规报告:审计模块定期扫描集群中已有资源,标记违反策略的对象,并生成 violations 状态。
  4. 多租户资源配额:结合 Namespace 标签和资源配额约束,实现细粒度的资源限制,防止单个租户过度占用集群资源。
冷启动性能挑战: Gatekeeper 在首次加载大量 ConstraintTemplate 或集群重启时,OPA 引擎需要编译所有 Rego 策略并构建数据缓存,这个过程可能导致 Webhook 响应延迟飙升,甚至触发 API Server 的超时重试。本课程后续章节将深入分析冷启动的瓶颈,并给出系统化的优化方案。