大家好!这是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:安装后验证自定义设置
安装完成并不意味着结束。我们需要验证我们设置的值是否正确反映。
- CRD检查: 检查Kyverno使用的策略资源是否已正确创建。(kubectl get crd | grep kyverno)
- Webhook检查: 检查Kyverno Webhook是否已正确注册到API服务器。(kubectl get mutatingwebhookconfigurations)
- ConfigMap检查: 检查反映过滤设置等的ConfigMap。
💡 运维人员实用技巧
- 利用Dry-run: 使用helm install –dry-run –debug在实际安装前预览将生成的YAML。
- 资源过滤器: 将kube-system命名空间等核心系统资源排除在策略检查之外,以防止故障传播,这样更安全。
- Prometheus集成: 通过设置metricsService.enabled: true,在Grafana中实时监控Kyverno的状态。
🌟 总结
今天,我们学习了如何使用Helm智能地安装Kyverno,以及如何优化values.yaml中的主要设置。“基本设置人人都会,但精细调优是构建稳定集群的第一步。” 希望您能充分利用今天学到的设置值,构建一个坚固的安全环境。
下一次,我们将终于迎来大家期待已久的
第三章:编写策略(策略编写方法)
,探讨如何编写实际的规则。敬请期待! 🙋♂️
发表回复