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 高可用部署的核心组件及其交互关系:

Kyverno 高可用部署架构 Kubernetes API Server Kyverno Controller (副本1) Kyverno Controller (副本2) Kyverno Controller (副本3) Leader Election (Lease) ValidatingWebhook MutatingWebhook PolicyReport CRD ClusterPolicy CRD 📌 高可用关键点: • 多副本通过 Leader Election 选主,仅 Leader 处理 Webhook 请求 • Pod 反亲和性确保副本分布在不同节点,避免单点故障

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 行为变化)。建议先在测试集群验证后再操作生产环境。