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 来确保全局一致性。
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 | 根据策略自动清理过期或不合规的资源 | 清理规则、保留策略 |
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)共同构成完整的策略生命周期管理。