3. 安装与部署:Helm安装Kyverno、配置高可用、验证安装状态
本章将指导你使用 Helm 包管理器在生产环境中安装 Kyverno,配置控制平面组件的高可用模式,并通过多种手段验证安装状态。Kyverno 作为 Kubernetes 原生的策略引擎,其部署方式直接影响策略生效的可靠性与集群安全基线的稳定性。
3.1 环境准备与前置检查
在安装 Kyverno 之前,请确保目标集群满足以下最低要求:
| 检查项 | 最低版本 / 配置 | 说明 |
|---|---|---|
| Kubernetes 版本 | v1.24+ | Kyverno 1.12+ 要求 v1.24 及以上 |
| Helm 版本 | v3.8+ | 支持 OCI 仓库与依赖管理 |
| 集群资源 | 2 vCPU / 4 GiB 内存(最小) | 高可用模式建议 4 vCPU / 8 GiB |
| RBAC 权限 | cluster-admin | 安装需要创建 CRD、ClusterRole 与 Webhook |
| Ingress 控制器 | 可选 | 用于暴露 Webhook 指标(非必须) |
💡 建议: 在生产集群中,优先使用 Kubernetes v1.28+ 以获得最佳的 Webhook 准入控制兼容性。安装前运行
kubectl version --short 和 helm version 确认版本。
3.2 使用 Helm 安装 Kyverno
Kyverno 官方维护的 Helm Chart 位于 kyverno/kyverno 仓库。推荐使用 OCI 方式拉取 Chart 包,确保版本一致性与签名验证。
3.2.1 添加 Helm 仓库并更新
# 添加 Kyverno 官方 Helm 仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
# 更新本地仓库索引
helm repo update
# 搜索可用版本(可选)
helm search repo kyverno/kyverno --versions
3.2.2 安装 Kyverno(单副本模式)
以下命令在 kyverno 命名空间中安装 Kyverno v3.2.x,包含核心控制器、准入 Webhook 和清理控制器:
# 创建命名空间
kubectl create namespace kyverno
# 使用 Helm 安装(单副本,适合测试环境)
helm install kyverno kyverno/kyverno \
--namespace kyverno \
--version v3.2.6 \
--set replicaCount=1 \
--set webhooks.forceUpdate=true
📌 关键参数说明:
replicaCount:控制 Kyverno 控制器副本数,生产环境建议 ≥2。webhooks.forceUpdate:强制更新 Webhook 配置,避免旧配置残留。--version:锁定 Chart 版本,防止意外升级。
3.3 配置高可用(HA)部署
生产环境必须启用高可用模式,确保策略引擎在节点故障时持续可用。Kyverno 的高可用依赖多副本部署、Pod 反亲和性以及可选的 Leader Election 配置。
3.3.1 高可用 Helm values 文件
创建 kyverno-ha-values.yaml 文件,包含以下核心配置:
# kyverno-ha-values.yaml
replicaCount: 3
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- kyverno
topologyKey: kubernetes.io/hostname
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 2
memory: 2Gi
webhooks:
forceUpdate: true
service:
type: ClusterIP
metrics:
enabled: true
serviceMonitor:
enabled: true
leaderElection:
enabled: true
leaseDuration: 15s
renewDeadline: 10s
retryPeriod: 2s
3.3.2 执行高可用安装
helm upgrade --install kyverno kyverno/kyverno \
--namespace kyverno \
--version v3.2.6 \
--values kyverno-ha-values.yaml \
--wait
⚠️ 注意: 高可用模式下,Kyverno 会创建多个 Webhook 端点。请确保集群的
ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration 中的 failurePolicy 设置为 Fail 或 Ignore 根据策略严格度调整。默认建议使用 Fail 以保证策略强制生效。
3.4 验证安装状态
安装完成后,通过以下步骤全面验证 Kyverno 是否正常运行。
3.4.1 检查 Pod 状态
# 查看所有 Kyverno 相关 Pod
kubectl get pods -n kyverno -o wide
# 预期输出示例(高可用模式):
# NAME READY STATUS RESTARTS AGE
# kyverno-7d8f9c6b9c-abc12 1/1 Running 0 5m
# kyverno-7d8f9c6b9c-def34 1/1 Running 0 5m
# kyverno-7d8f9c6b9c-ghi56 1/1 Running 0 5m
# kyverno-cleanup-controller-xyz 1/1 Running 0 5m
3.4.2 验证 Webhook 配置
# 列出 Kyverno 注册的 Webhook
kubectl get validatingwebhookconfiguration -l webhook.kyverno.io/managed-by=kyverno
kubectl get mutatingwebhookconfiguration -l webhook.kyverno.io/managed-by=kyverno
# 检查 Webhook 是否处于 Active 状态
kubectl get validatingwebhookconfiguration kyverno-resource-validating-webhook-cfg -o jsonpath='{.webhooks[0].clientConfig.service}'
3.4.3 测试策略执行
部署一个简单的测试策略,验证 Kyverno 是否能够拦截并处理资源:
# 创建测试策略:禁止特权容器
cat <
✅ 验证成功标志: 如果策略报告显示
fail 结果,说明 Kyverno 已成功拦截并审计了特权容器创建请求。此时可将 validationFailureAction 改为 Enforce 以强制拒绝。
3.5 架构组件与数据流
下图展示了 Kyverno 高可用部署的核心组件及其交互关系:
3.6 安装后检查清单
完成部署后,建议逐项确认以下检查点:
| 检查项 | 命令 / 方法 | 预期结果 |
|---|---|---|
| Pod 运行状态 | kubectl get pods -n kyverno |
所有 Pod 均为 Running,READY 为 1/1 |
| Webhook 注册 | kubectl get validatingwebhookconfiguration |
至少存在 2 条 Kyverno 管理的 Webhook 配置 |
| CRD 安装 | kubectl get crd | grep kyverno |
包含 clusterpolicies.kyverno.io、policyreports.wgpolicyk8s.io 等 |
| Leader 选举 | kubectl get lease -n kyverno |
存在 kyverno 租约,持有者为一个 Pod |
| 策略执行 | 部署测试 ClusterPolicy | 策略报告生成,资源被正确审计或拒绝 |
🔍 排障提示:
- 如果 Pod 一直处于
Pending状态,检查节点资源是否充足,或使用kubectl describe pod查看调度事件。 - 如果 Webhook 未生效,检查
kubectl get events -n kyverno中是否有证书或网络相关错误。 - 高可用模式下,如果 Leader 频繁切换,检查
leaderElection.leaseDuration是否过短。
3.7 升级与回滚
Kyverno 的升级建议遵循以下步骤:
# 1. 备份当前 values
helm get values kyverno -n kyverno -o yaml > kyverno-backup-values.yaml
# 2. 升级到目标版本
helm upgrade kyverno kyverno/kyverno \
--namespace kyverno \
--version v3.3.0 \
--values kyverno-ha-values.yaml \
--atomic
# 3. 如果升级失败,回滚到上一版本
helm rollback kyverno -n kyverno 1
⚠️ 重要: 升级前务必阅读 Kyverno 的 Changelog,确认是否有破坏性变更(如 CRD 字段废弃、Webhook 行为变化)。建议先在测试集群验证后再操作生产环境。