[Kyverno]🛠️ 为什么应该使用 Helm 进行安装?

大家好!这是Kubernetes安全核心Kyverno系列的第二部分。🛡️

上次我们探讨了Kyverno的整体架构。今天,我们将进入实战,讨论“如何最完美地在集群中安装和优化Kyverno?” 特别是,我们将详细剖析业界最常用的Helm安装方式以及values.yaml文件中的主要配置值。🚀

单独管理Kubernetes资源YAML文件是一项非常痛苦的任务。对于像Kyverno这样拥有大量CRD(Custom Resource Definitions)和复杂Webhook配置的解决方案来说,更是如此。

  • 版本管理: 轻松部署和回滚特定版本的Kyverno。
  • 配置自动化: 通过一个values.yaml文件集中管理高可用性(HA)设置或资源限制(Limit)等。
  • 维护: 只需一行helm upgrade命令即可应用最新的安全补丁。

🏗️ 步骤1:注册Kyverno官方Helm仓库

首先要做的是添加Kyverno官方Chart仓库。

Bash

# 添加仓库
helm repo add kyverno https://kyverno.github.io/kyverno/

# 更新最新Chart信息
helm repo update

# 安装前检查Chart版本
helm search repo kyverno

⚙️ 步骤2:核心中的核心,values.yaml主要设置解析

仅仅输入helm install是不够的,根据我们的服务环境定制设置至关重要。我们整理了KCA考试和实际工作中最重要的values.yaml核心参数

① 高可用性和副本 (Replica & HA) 🚀

在生产环境中,只有一个Kyverno Pod是危险的。如果API服务器无法收到Kyverno的响应,资源创建可能会被阻止。

  • replicaCount: 建议至少3个。
  • topologySpreadConstraints: 将Pod均匀分布到多个节点或区域,以提高可用性。

YAML

replicaCount: 3
podDisruptionBudget:
  minAvailable: 1

② 资源管理 (Resources & Webhook) 🔋

Kyverno会检查集群中的所有请求,因此资源分配和超时设置非常重要。

  • resources: 设置requests和limits以防止OOM(Out Of Memory)。
  • webhook.timeoutSeconds: 设置Webhook响应等待时间。(默认10秒,过长会降低API响应速度。)

YAML

resources:
  limits:
    memory: 512Mi
  requests:
    cpu: 100m
    memory: 256Mi

③ 服务和通信安全 (Service & RBAC) 🔒

决定Kyverno如何与API服务器通信以及拥有哪些权限。

  • admissionController.container.image.tag: 明确指定要使用的Kyverno版本。
  • rbac.create: 决定Kyverno是否自动创建所需的权限。(默认true)
  • certManager.enabled: 是否使用外部cert-manager管理证书。

④ 策略报告和后台扫描 (Background & Reports) 📋

  • backgroundController.enabled: 决定是否对现有资源进行定期策略合规性扫描。
  • cleanupController.enabled: 启用删除过期资源的功能。

📄 Kyverno优化my-values.yaml示例

# ---------------------------------------------------------
# 1. 副本和高可用性 (HA) 设置
# ---------------------------------------------------------
replicaCount: 3

# Pod 分布策略:在多个节点上均匀分布以确保可用性
topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        app.kubernetes.io/instance: kyverno

# 升级期间,至少1个Pod必须始终保持可用状态
podDisruptionBudget:
  minAvailable: 1

# ---------------------------------------------------------
# 2. 资源分配和超时 (性能优化)
# ---------------------------------------------------------
admissionController:
  container:
    resources:
      requests:
        cpu: 100m
        memory: 256Mi
      limits:
        cpu: 500m
        memory: 512Mi

# Webhook 超时:过短会导致请求失败,过长会降低 API 响应速度
webhook:
  timeoutSeconds: 15

# ---------------------------------------------------------
# 3. 证书管理 (与 cert-manager 集成时)
# ---------------------------------------------------------
# 如果要使用外部 cert-manager 而不是内部自签名证书,请设置为 true
certManager:
  enabled: false 

# ---------------------------------------------------------
# 4. 监控和指标启用
# ---------------------------------------------------------
# 为 Prometheus 和 Grafana 集成启用指标服务
metricsService:
  enabled: true
  serviceMonitor:
    enabled: false # 如果 Prometheus Operator 已安装,请更改为 true

# ---------------------------------------------------------
# 5. 后台扫描和资源清理 (控制器设置)
# ---------------------------------------------------------
backgroundController:
  enabled: true
  resources:
    requests:
      cpu: 50m
      memory: 64Mi
    limits:
      cpu: 200m
      memory: 128Mi

cleanupController:
  enabled: true # 启用自动删除过期资源的功能
  resources:
    requests:
      cpu: 50m
      memory: 64Mi

# ---------------------------------------------------------
# 6. 安全和过滤 (RBAC & Filters)
# ---------------------------------------------------------
# 将特定命名空间或资源排除在检查范围之外 (防止故障)
config:
  resourceFilters:
    - "[Event,*,*]"
    - "[*,kube-system,*]"
    - "[*,kube-public,*]"
    - "[*,kube-node-lease,*]"
    - "[Node,*,*]"
    - "[APIService,*,*]"
    - "[TokenReview,*,*]"
    - "[SubjectAccessReview,*,*]"
    - "[SelfSubjectAccessReview,*,*]"

🚀 步骤3:执行实际安装命令

准备好优化的my-values.yaml文件后,使用以下命令进行安装。

# 创建命名空间
kubectl create namespace kyverno

# 使用优化设置进行安装
helm install kyverno kyverno/kyverno -n kyverno -f my-values.yaml

安装完成后,务必使用以下命令确认所有组件都处于Running状态! kubectl get pods -n kyverno


🔍 步骤4:安装后验证自定义设置

安装完成并不意味着结束。我们需要验证我们设置的值是否正确反映。

  1. CRD检查: 检查Kyverno使用的策略资源是否已正确创建。(kubectl get crd | grep kyverno)
  2. Webhook检查: 检查Kyverno Webhook是否已正确注册到API服务器。(kubectl get mutatingwebhookconfigurations)
  3. ConfigMap检查: 检查反映过滤设置等的ConfigMap。

💡 运维人员实用技巧

  • 利用Dry-run: 使用helm install –dry-run –debug在实际安装前预览将生成的YAML。
  • 资源过滤器: 将kube-system命名空间等核心系统资源排除在策略检查之外,以防止故障传播,这样更安全。
  • Prometheus集成: 通过设置metricsService.enabled: true,在Grafana中实时监控Kyverno的状态。

🌟 总结

今天,我们学习了如何使用Helm智能地安装Kyverno,以及如何优化values.yaml中的主要设置。“基本设置人人都会,但精细调优是构建稳定集群的第一步。” 希望您能充分利用今天学到的设置值,构建一个坚固的安全环境。

下一次,我们将终于迎来大家期待已久的

第三章:编写策略(策略编写方法)

,探讨如何编写实际的规则。敬请期待! 🙋‍♂️



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注