2. Kyverno 基础回顾:Kyverno 是什么?策略引擎工作原理与安装部署
2.1 Kyverno 是什么?
Kyverno(希腊语“治理”)是一个为 Kubernetes 设计的原生策略引擎。它允许平台团队、安全管理员和 DevOps 工程师以 Kubernetes 资源(策略 和 规则)的形式定义策略,无需编写复杂的 Webhook 或学习新的策略语言(如 OPA/Rego)。
Kyverno 的核心定位:
- Kubernetes 原生:策略本身就是
ClusterPolicy或Policy资源,通过kubectl apply即可生效。 - 无新语言:使用 YAML 声明式定义匹配、条件和操作,学习曲线低。
- 集群级治理:可覆盖 MutatingAdmissionWebhook、ValidatingAdmissionWebhook 和生成/更新资源的场景。
- 可观测性:提供策略执行报告(PolicyReport)和集群策略报告(ClusterPolicyReport)。
💡 关键区别:与 OPA/Gatekeeper 相比,Kyverno 不需要编写 Rego 策略语言,所有逻辑都通过 YAML 字段(如
match、exclude、validate、mutate、generate)表达,更适合 Kubernetes 管理员快速上手。
2.2 策略引擎工作原理
Kyverno 以 动态准入控制 Webhook 的形式运行在 Kubernetes 集群中。当任何资源(Pod、Service、Namespace 等)被创建、更新或删除时,Kubernetes API Server 会将请求发送给 Kyverno 的 Webhook 端点,Kyverno 根据已加载的策略进行匹配、校验、变更或生成操作。
工作流程分为以下步骤:
- 资源请求:用户通过
kubectl、API 调用或控制器创建/更新/删除资源。 - API Server 拦截:Kubernetes API Server 将请求发送到已注册的 MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。
- Kyverno 处理:
- Mutate(变更):在资源持久化之前,根据策略修改资源字段(如注入 Sidecar、添加标签)。
- Validate(校验):检查资源是否符合策略规则,拒绝不符合的请求。
- Generate(生成):根据策略自动创建新的资源(如为每个 Namespace 生成 NetworkPolicy)。
- 返回结果:Kyverno 将处理结果(允许/拒绝/补丁)返回给 API Server,API Server 据此决定是否持久化资源。
2.3 安装与部署
Kyverno 支持多种安装方式,推荐使用 Helm Chart 或直接应用 YAML 清单。以下为生产环境常用部署方法。
2.3.1 前置条件
| 组件 | 版本要求 | 说明 |
|---|---|---|
| Kubernetes 集群 | ≥ 1.23 | 支持 admissionregistration.k8s.io/v1 |
| kubectl | ≥ 1.23 | 与集群版本匹配 |
| Helm(可选) | ≥ 3.8 | 使用 Helm Chart 安装时 |
| 集群资源 | 建议 2 核 4GB | 至少 1 个可用节点 |
2.3.2 安装方式对比
| 方式 | 命令/步骤 | 适用场景 |
|---|---|---|
| Helm Chart(推荐) |
|
生产环境、需要自定义配置 |
| YAML 清单 |
|
快速测试、离线环境 |
| Kyverno CLI |
|
本地策略测试、CI/CD 流水线 |
2.3.3 验证安装
安装完成后,执行以下命令确认 Kyverno Pod 正常运行:
kubectl get pods -n kyverno
# 预期输出类似:
# NAME READY STATUS RESTARTS AGE
# kyverno-7c8b9d6f8f-abc12 1/1 Running 0 2m
检查 Webhook 是否注册成功:
kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations
# 应看到 kyverno 相关的 Webhook 配置
⚠️ 生产环境注意事项:
- 建议将 Kyverno 部署在独立的
kyvernoNamespace 中,便于管理和清理。 - 如果集群使用 Pod Security Admission (PSA),需确保 Kyverno 的 ServiceAccount 具有足够的权限。
- 对于多集群环境,可使用 Kyverno Policy Reporter 或 Policy Controller 统一查看策略执行状态。
2.4 策略引擎核心组件
Kyverno 的策略引擎由以下核心组件构成:
各组件职责:
- Policy / ClusterPolicy:策略的顶层定义,包含
rules列表。ClusterPolicy 为集群范围,Policy 为 Namespace 范围。 - Match / Exclude:定义策略适用的资源范围(按 kind、label、namespace、name 等过滤)。
- Validate / Mutate:校验逻辑(拒绝不符合条件的资源)和变更逻辑(自动修改资源字段)。
- Generate:根据策略自动创建新资源(如为每个 Namespace 生成 ResourceQuota)。
- PolicyReport:记录每个策略的执行结果(pass/fail/error),便于审计和监控。