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 根据已加载的策略进行匹配、校验、变更或生成操作。

Kyverno 策略引擎工作原理流程图 Kyverno 策略引擎工作原理 用户 / 客户端 Kubernetes API Server Kyverno Webhook Mutating Webhook Validating Webhook 策略引擎(匹配/校验/变更) 说明:Kyverno 通过 Mutating 和 Validating 两个 Webhook 拦截资源请求,执行策略逻辑

工作流程分为以下步骤:

  1. 资源请求:用户通过 kubectl、API 调用或控制器创建/更新/删除资源。
  2. API Server 拦截:Kubernetes API Server 将请求发送到已注册的 MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。
  3. Kyverno 处理:
    • Mutate(变更):在资源持久化之前,根据策略修改资源字段(如注入 Sidecar、添加标签)。
    • Validate(校验):检查资源是否符合策略规则,拒绝不符合的请求。
    • Generate(生成):根据策略自动创建新的资源(如为每个 Namespace 生成 NetworkPolicy)。
  4. 返回结果: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(推荐)
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
helm install kyverno kyverno/kyverno -n kyverno --create-namespace
生产环境、需要自定义配置
YAML 清单
kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml
快速测试、离线环境
Kyverno CLI
# 下载二进制
curl -sLO https://github.com/kyverno/kyverno/releases/latest/download/kyverno-cli_linux_amd64.tar.gz
tar -xzf kyverno-cli_linux_amd64.tar.gz
sudo mv kyverno /usr/local/bin/
本地策略测试、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 部署在独立的 kyverno Namespace 中,便于管理和清理。
  • 如果集群使用 Pod Security Admission (PSA),需确保 Kyverno 的 ServiceAccount 具有足够的权限。
  • 对于多集群环境,可使用 Kyverno Policy Reporter 或 Policy Controller 统一查看策略执行状态。

2.4 策略引擎核心组件

Kyverno 的策略引擎由以下核心组件构成:

Kyverno 核心组件架构图 Kyverno 核心组件架构 策略定义 (Policy / ClusterPolicy) 规则引擎 (Rule Engine) Match / Exclude Validate / Mutate Generate Webhook 执行 / PolicyReport 生成 说明:策略定义 → 规则引擎(匹配/校验/变更/生成)→ Webhook 执行并生成报告

各组件职责:

  • Policy / ClusterPolicy:策略的顶层定义,包含 rules 列表。ClusterPolicy 为集群范围,Policy 为 Namespace 范围。
  • Match / Exclude:定义策略适用的资源范围(按 kind、label、namespace、name 等过滤)。
  • Validate / Mutate:校验逻辑(拒绝不符合条件的资源)和变更逻辑(自动修改资源字段)。
  • Generate:根据策略自动创建新资源(如为每个 Namespace 生成 ResourceQuota)。
  • PolicyReport:记录每个策略的执行结果(pass/fail/error),便于审计和监控。