3. Kyverno 基础入门:Kyverno 是什么、核心概念与安装部署

3.1 Kyverno 是什么

Kyverno 是一个为 Kubernetes 设计的云原生策略引擎,由 Nirmata 开源,目前是 CNCF 的孵化项目。与传统的策略工具(如 OPA/Gatekeeper)不同,Kyverno 采用 Kubernetes 原生资源模型——策略本身就是一个标准的 ClusterPolicy 或 Policy 自定义资源(CRD),无需学习专用的策略语言(如 Rego)。

核心设计哲学:“策略即 Kubernetes 资源”。Kyverno 通过 Admission Webhook 拦截 API 请求,对资源的创建、更新、删除进行校验、变更或生成,从而实现安全基线、合规治理与自动化运维。

3.2 核心概念:Policy / ClusterPolicy / Rule

Kyverno 的策略体系由三个层级构成,下表清晰区分了它们的范围与用途:

概念 作用域 匹配目标 典型场景
Policy 命名空间级 仅匹配所在 Namespace 的资源 多租户隔离、团队级安全基线
ClusterPolicy 集群级 匹配整个集群所有 Namespace 的资源 全局安全基线、合规审计、准入控制
Rule 策略内部单元 定义具体的匹配条件与行为 校验镜像仓库、禁止特权容器、自动添加标签

一个 Rule 包含三个核心要素:

  • match / exclude:定义规则适用的资源类型、标签、命名空间等选择器。
  • validate / mutate / generate:定义规则执行的动作类型——校验(validate)、变更(mutate)或生成(generate)。
  • 背景扫描(Background):除了实时准入,Kyverno 还会对集群中已有资源进行周期性扫描,发现不合规项并报告。
💡 关键区别:Policy 只影响其所在的 Namespace,而 ClusterPolicy 影响整个集群。在安全基线场景中,通常使用 ClusterPolicy 来确保全局一致性。
Kyverno 核心概念关系图 ClusterPolicy(集群级) Policy(命名空间级) Rule(匹配+动作) Rule(匹配+动作) Rule(匹配+动作) validate(校验) mutate(变更) generate(生成) 背景扫描(Background)持续对已有资源进行合规检查,与准入控制形成双重保障

3.3 安装与部署

Kyverno 支持多种安装方式,推荐使用 Helm Chart 进行生产级部署。以下为两种主流方式:

3.3.1 使用 Helm 安装(推荐)

# 添加 Kyverno Helm 仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update

# 安装 Kyverno 到 kyverno 命名空间
helm install kyverno kyverno/kyverno \
  --namespace kyverno \
  --create-namespace \
  --version v3.2.0 \
  --set admissionController.replicas=2 \
  --set backgroundController.replicas=2 \
  --set cleanupController.replicas=1
⚠️ 生产环境建议:至少为 admissionController 和 backgroundController 设置 2 个副本以保证高可用;根据集群规模调整资源 requests/limits。

3.3.2 使用 YAML 清单安装(快速验证)

kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml

安装完成后,验证所有 Pod 处于 Running 状态:

kubectl get pods -n kyverno

NAME                                           READY   STATUS    RESTARTS   AGE
kyverno-admission-controller-7c8b6f8b9f-abc12   1/1     Running   0          2m
kyverno-background-controller-5d4f7c9d8f-def34  1/1     Running   0          2m
kyverno-cleanup-controller-6f9e8d7c5b-ghi56     1/1     Running   0          2m

3.3.3 组件架构概览

Kyverno 由三个核心控制器组成,各司其职:

控制器 职责 关键配置
Admission Controller 处理准入 Webhook 请求,实时校验/变更/生成资源 replicas、资源限制、超时时间
Background Controller 周期性扫描集群已有资源,报告不合规项 扫描间隔、报告存储
Cleanup Controller 根据策略自动清理过期或不合规的资源 清理规则、保留策略
Kyverno 组件架构与请求流程 kubectl / API Server Admission Controller (实时准入 Webhook) Policy Engine (匹配 Rule 执行动作) Background Controller 集群资源扫描 Cleanup Controller 资源清理与回收 三个控制器协同工作:Admission 实时拦截,Background 定期巡检,Cleanup 自动清理

3.4 验证安装与快速测试

部署完成后,可以通过以下命令验证 Kyverno 是否正常工作:

# 查看 Kyverno 版本与健康状态
kubectl get clusterpolicy -A

# 查看 Webhook 配置
kubectl get validatingwebhookconfigurations -l app.kubernetes.io/name=kyverno
kubectl get mutatingwebhookconfigurations -l app.kubernetes.io/name=kyverno

创建一个简单的测试策略,验证准入控制是否生效:

cat <
✅ 验证结果:尝试创建一个不带 app.kubernetes.io/managed-by 标签的 Pod,请求会被 Kyverno 拒绝并返回上述错误消息。这表明 Kyverno 的 Admission Controller 已成功拦截并执行了策略。

3.5 本章小结

  • Kyverno 是 Kubernetes 原生的策略引擎,使用 CRD 定义策略,无需学习新语言。
  • ClusterPolicy 用于全局安全基线,Policy 用于命名空间级隔离,Rule 定义具体的匹配与动作逻辑。
  • 安装推荐使用 Helm,生产环境需配置多副本与资源限制。
  • 三个控制器(Admission、Background、Cleanup)共同构成完整的策略生命周期管理。