4. Kyverno安装与部署:Helm安装、YAML安装、验证安装状态、RBAC配置
在生产环境中部署Kyverno时,需要根据集群规模、安全策略和运维习惯选择合适的安装方式。本章将详细讲解三种主流部署路径:Helm Chart安装(推荐用于生产环境)、YAML清单安装(适用于离线环境或快速验证),以及安装后的状态验证与RBAC配置。
前置条件:确保已拥有一个运行中的Kubernetes集群(v1.22+),并且具备集群管理员权限(cluster-admin)。Helm安装方式需要Helm v3.8+客户端。
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 离线安装步骤
- 在可访问外网的机器上下载 install.yaml 文件。
- 将文件传输到离线集群的控制节点或可通过 kubectl 访问的机器。
- 执行
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 进行权限隔离,确保策略管理安全可控。
4.5 安装后快速验证策略生效
部署完成后,可以通过创建一个简单的测试策略来验证 Kyverno 是否正常工作:
# 创建一个测试策略:禁止特权容器
cat <
如果 Kyverno 正常工作,第二个命令会返回类似 Error: admission webhook "validate.kyverno.svc" denied the request 的错误信息,表明准入控制已生效。