4. Kyverno安装与部署:Helm安装、YAML安装、验证安装状态、RBAC配置

在生产环境中部署Kyverno时,需要根据集群规模、安全策略和运维习惯选择合适的安装方式。本章将详细讲解三种主流部署路径:Helm Chart安装(推荐用于生产环境)、YAML清单安装(适用于离线环境或快速验证),以及安装后的状态验证与RBAC配置。

前置条件:确保已拥有一个运行中的Kubernetes集群(v1.22+),并且具备集群管理员权限(cluster-admin)。Helm安装方式需要Helm v3.8+客户端。
Kyverno 部署架构与组件关系 Kyverno 部署架构与组件关系 Kubernetes 集群 kube-apiserver Kyverno Pod 准入控制器 (Admission Controller) ClusterPolicy / Policy CRD 资源定义 MutatingWebhookConfiguration ValidatingWebhookConfiguration 说明: 1. Kyverno 以 Pod 形式运行,注册为动态准入 Webhook。 2. 策略以 CRD(ClusterPolicy/Policy)形式存储,无需重新编译。

4.1 使用 Helm Chart 安装(推荐)

Helm 是 Kubernetes 生态中最流行的包管理工具。Kyverno 官方维护的 Helm Chart 提供了灵活的配置选项,支持生产级部署。

4.1.1 添加 Helm 仓库并更新

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

# 更新本地仓库索引
helm repo update

4.1.2 安装 Kyverno(基础版)

# 创建命名空间
kubectl create namespace kyverno

# 使用 Helm 安装(默认配置)
helm install kyverno kyverno/kyverno \
  --namespace kyverno \
  --version v3.2.6

4.1.3 生产环境推荐配置

对于生产集群,建议调整副本数、资源限制和高可用参数:

helm install kyverno kyverno/kyverno \
  --namespace kyverno \
  --version v3.2.6 \
  --set replicaCount=3 \
  --set resources.requests.cpu=500m \
  --set resources.requests.memory=512Mi \
  --set resources.limits.cpu=1 \
  --set resources.limits.memory=1Gi \
  --set webhookTimeout=10
提示:replicaCount 设置为 3 可以保证控制面高可用。webhookTimeout 默认值为 10 秒,对于复杂策略评估可适当调高至 15-20 秒。

4.2 使用 YAML 清单安装

当集群无法访问外部 Helm 仓库,或需要快速验证时,可以直接使用 Kyverno 官方发布的 YAML 清单文件进行安装。

4.2.1 下载并应用最新发布清单

# 直接应用官方发布的 YAML 清单(包含所有资源)
kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml

4.2.2 离线安装步骤

  1. 在可访问外网的机器上下载 install.yaml 文件。
  2. 将文件传输到离线集群的控制节点或可通过 kubectl 访问的机器。
  3. 执行 kubectl apply -f install.yaml。
注意:YAML 清单安装方式默认使用 kyverno 命名空间,且不会自动创建命名空间。如果命名空间不存在,请先执行 kubectl create namespace kyverno。

4.3 验证安装状态

安装完成后,需要通过多个维度验证 Kyverno 是否正常运行。

4.3.1 检查 Pod 运行状态

# 查看 Kyverno Pod 是否 Running
kubectl get pods -n kyverno

# 预期输出示例:
# NAME                      READY   STATUS    RESTARTS   AGE
# kyverno-7c8b9d6f8f-abc1   1/1     Running   0          2m
# kyverno-7c8b9d6f8f-xyz2   1/1     Running   0          2m

4.3.2 检查 Webhook 配置是否注册

# 查看 MutatingWebhookConfiguration
kubectl get mutatingwebhookconfigurations

# 查看 ValidatingWebhookConfiguration
kubectl get validatingwebhookconfigurations

4.3.3 检查 CRD 是否就绪

# 查看 Kyverno 相关的 CRD
kubectl get crd | grep kyverno

# 预期输出应包含:
# clusterpolicies.kyverno.io
# policies.kyverno.io
# clusterpolicyreports.kyverno.io
# policyreports.kyverno.io

4.3.4 验证状态速查表

检查项 命令 正常状态
Pod 状态 kubectl get pods -n kyverno 所有 Pod 为 Running,READY 为 1/1
Webhook 注册 kubectl get mutatingwebhookconfigurations 存在 kyverno 前缀的 Webhook 配置
CRD 存在 kubectl get crd | grep kyverno 至少包含 clusterpolicies.kyverno.io
Service 暴露 kubectl get svc -n kyverno kyverno-svc 存在,ClusterIP 正常

4.4 RBAC 配置

Kyverno 本身需要特定的 RBAC 权限来读取资源、管理 Webhook 配置以及处理策略。同时,运维人员也需要适当的 RBAC 权限来管理 Kyverno 策略。

4.4.1 Kyverno 自身 ServiceAccount 权限

安装过程中会自动创建 kyverno-service-account,并绑定以下 ClusterRole:

  • kyverno:webhook:管理 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration。
  • kyverno:policy:读取、更新 ClusterPolicy 和 Policy CRD。
  • kyverno:report:创建和更新 PolicyReport 和 ClusterPolicyReport。
  • kyverno:background:执行后台扫描和清理任务。

4.4.2 为运维人员创建 RBAC

以下示例为 devops-team 用户组创建可以管理 Kyverno 策略的 ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kyverno-policy-admin
rules:
- apiGroups: ["kyverno.io"]
  resources: ["clusterpolicies", "policies"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["kyverno.io"]
  resources: ["policyreports", "clusterpolicyreports"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kyverno-policy-admin-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kyverno-policy-admin
subjects:
- kind: Group
  name: devops-team
  apiGroup: rbac.authorization.k8s.io

4.4.3 最小权限原则建议

角色 所需权限 说明
策略管理员 ClusterPolicy/Policy 的 CRUD 可创建、修改、删除策略
策略审计员 PolicyReport 的只读权限 仅查看合规报告,不可修改策略
集群管理员 Kyverno 命名空间全部权限 可管理 Kyverno 自身部署和升级
最佳实践:不要将 cluster-admin 权限直接授予普通运维人员。使用上述细粒度的 ClusterRole 进行权限隔离,确保策略管理安全可控。
RBAC 权限模型与策略管理流程 RBAC 权限模型与策略管理流程 运维人员 / 用户组 ClusterRoleBinding ClusterRole 创建/更新/删除策略 查看合规报告 管理 Kyverno 部署 权限隔离原则: 策略管理员 → ClusterPolicy CRUD | 审计员 → PolicyReport 只读 | 集群管理员 → Kyverno 命名空间管理

4.5 安装后快速验证策略生效

部署完成后,可以通过创建一个简单的测试策略来验证 Kyverno 是否正常工作:

# 创建一个测试策略:禁止特权容器
cat <

如果 Kyverno 正常工作,第二个命令会返回类似 Error: admission webhook "validate.kyverno.svc" denied the request 的错误信息,表明准入控制已生效。