news 2026/5/28 6:06:09

Kyverno:Kubernetes 原生的策略引擎,安全合规的终极利器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kyverno:Kubernetes 原生的策略引擎,安全合规的终极利器

无需学习新语言,YAML 即可定义策略,CNCF 孵化项目 Kyverno 凭什么这么火?# 🔥 深度解读 Kyverno:Kubernetes 原生的策略引擎,安全合规的终极利器

摘要:Kyverno 是一个 Kubernetes 原生的策略引擎,作为 CNCF 孵化项目,它允许用户使用 YAML 定义策略而无需学习新语言。本文全面解析 Kyverno 的核心能力,包括验证、变更、生成、清理和镜像验证五大策略类型;深入剖析其多组件架构(Admission Controller、Background Controller、Cleanup Controller、Reports Controller);对比其与 OPA/Gatekeeper 的差异化优势;展示其强大的供应链安全特性(Cosign/Notary/Sigstore 集成);介绍丰富的生态系统工具(Kyverno CLI、Policy Reporter、Chainsaw 等);分析其工程实践与安全标准(SLSA Level 3、SBOM 等);列举平台工程、安全、DevOps/SRE、合规等团队的实战应用场景;并提供快速上手指南。Kyverno 以其简洁的 YAML 策略定义、全面的功能覆盖和强大的社区生态,为 Kubernetes 集群治理提供了零学习成本的一站式解决方案。

无需学习新语言,YAML 即可定义策略,CNCF 孵化项目 Kyverno 凭什么这么火?


一、背景:K8s 策略管理的痛点

在最近的集群治理过程中,就发现有些权限没有完全收回,业务配置的很多pod中还是有没有配置健康检查,资源request;还有就是在openclaw agent火爆情况下,会生成很多pod(带有特权),这里既要在agent所在pod中增加权限配置(也可以用kyverno实现,agent自身所在服务创建时候必须要有rbac绑定,权限还不能过大),然后再agent自己创建pod时候同时走到兜底的kyverno中,不允许创建特权容器,减少安全风险。
所以只管相关就是在没法完全拦住入口的情况下,增加一些webhook,但写了后发现不同场景限制不一样,不可能一直加代码,后发发现了kyverno项目,解放了。

在 Kubernetes 集群运维中,我们经常面临这样的问题:

  • 安全合规:哪些镜像可以运行?容器是否以 root 运行?是否需要特定的 label?
  • 成本控制:有没有人创建了没有资源限制的 Pod?Namespace 是否缺少成本标签?
  • 运维规范:所有 Deployment 都必须有 readiness probe,Ingress 必须配置 TLS。
  • 治理要求:某些资源只能由特定团队创建,某些命名空间禁止运行特权容器。

传统方案要么靠人工审核(效率低),要么用OPA/Gatekeeper(需要学 Rego 语言,有学习成本)。

Kyverno给出了一个更优雅的答案。


二、什么是 Kyverno?

Kyverno(希腊语 κυβερνάω,意为“治理/管理”)是一个Kubernetes 原生的策略引擎,由Nirmata公司创建并捐赠给CNCF,目前是CNCF 孵化项目

它的核心理念是:

无需学习新语言,用 YAML 定义策略,直接在 Kubernetes 中执行。

Kyverno 能做什么?

能力说明
验证 (Validate)检查资源是否符合规范,不符合则拒绝
✏️变更 (Mutate)自动修改资源,注入 sidecar、添加 label
🚀生成 (Generate)基于某个资源自动创建其他资源
🧹清理 (Cleanup)定时清理过期或不符合规范的资源
🔐镜像验证验证容器镜像签名,保障供应链安全
🔍后台扫描对已有资源进行周期性策略扫描

三、架构解析:不止是一个 Admission Controller

Kyverno 的架构由多个微服务组件组成,每个组件各司其职:

┌─────────────────────────────────────────────────────┐ │ Kubernetes API Server │ └──────┬──────────────┬───────────┬──────────┬─────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌──────────┐ ┌────────────┐ ┌────────┐ ┌──────────┐ │ Admission │ │ Background │ │ Cleanup│ │ Reports │ │Controller │ │ Controller │ │Control │ │Controller │ ├──────────┤ ├────────────┤ ├────────┤ ├──────────┤ │ 实时拦截 │ │ 后台生成/ │ │ 定时清理 │ │ 生成策略 │ │ 验证+变更 │ │ 变更已有资源│ │ 资源 │ │ 合规报告 │ └──────────┘ └────────────┘ └────────┘ └──────────┘

1️⃣ Admission Controller(核心组件)

这是 Kyverno 的大脑。它注册到 Kubernetes 的MutatingWebhookConfigurationValidatingWebhookConfiguration,在资源创建/更新时实时拦截。

  • 变更阶段:先执行 mutate 策略,修改资源
  • 验证阶段:再执行 validate 策略,决定接受还是拒绝

2️⃣ Background Controller

对于已有资源,Kyverno 会进行后台扫描,检查它们是否违反策略。它还负责:

  • Generate 策略:当源资源创建时,自动生成目标资源
  • 对已有的资源执行 mutate 现有(mutate existing)策略

3️⃣ Cleanup Controller

定时清理策略的执行者。可以设置 Cron 表达式,定期删除符合条件的资源(如过期 Namespace、未使用的 PVC)。

4️⃣ Reports Controller

生成详细的策略合规报告,以ClusterPolicyReportPolicyReport的 CRD 形式存在,可以对接外部工具(如 Policy Reporter)进行可视化。

5️⃣ Init Container(kyvernopre)

在 Kyverno 启动前,负责对集群中已有资源进行初始化清理和策略应用,确保集群一开始就处于合规状态。


四、Policy 的核心类型

Kyverno 的策略定义非常简洁,全部用 YAML 编写。

1. Validate 策略:拒绝不符合规范的资源

apiVersion:kyverno.io/v1kind:ClusterPolicymetadata:name:require-labelsspec:validationFailureAction:Enforcerules:-name:check-required-labelsmatch:any:-resources:kinds:-Podvalidate:message:"必须包含标签 'app.kubernetes.io/managed-by'"pattern:metadata:labels:app.kubernetes.io/managed-by:"?*"

只需定义:

  • match:匹配哪些资源
  • validate:验证条件
  • validationFailureActionEnforce(强制拒绝)或Audit(仅记录告警)

2. Mutate 策略:自动注入 Sidecar

apiVersion:kyverno.io/v1kind:ClusterPolicymetadata:name:add-sidecarspec:rules:-name:inject-istio-sidecarmatch:any:-resources:kinds:-Podmutate:patchesJson6902:|- op: add path: /spec/containers/- value: name: istio-proxy image: istio/proxyv2:latest

3. Generate 策略:自动创建资源

apiVersion:kyverno.io/v1kind:ClusterPolicymetadata:name:generate-networkpolicyspec:rules:-name:default-denymatch:any:-resources:kinds:-Namespacegenerate:apiVersion:networking.k8s.io/v1kind:NetworkPolicyname:default-denynamespace:"{{request.object.metadata.name}}"data:spec:podSelector:{}policyTypes:-Ingress-Egress

4. Cleanup 策略:定时清理过期资源

apiVersion:kyverno.io/v2kind:ClusterCleanupPolicymetadata:name:cleanup-old-jobsspec:match:any:-resources:kinds:-Jobconditions:all:-key:"{{ target.spec.ttlSecondsAfterFinished }}"operator:GreaterThanOrEqualsvalue:86400schedule:"0 0 * * *"

5. Image Verification 策略:供应链安全

apiVersion:kyverno.io/v1kind:ClusterPolicymetadata:name:verify-imagespec:rules:-name:verify-cosign-signaturematch:any:-resources:kinds:-PodverifyImages:-image:"ghcr.io/myorg/*"attestors:-entries:-keys:publicKeys:|------BEGIN PUBLIC KEY-----...

五、核心能力深度解读

🔥 与 OPA/Gatekeeper 对比:Kyverno 的差异化优势

对比维度KyvernoOPA/Gatekeeper
策略语言YAML(无需学习)Rego(需要学习新语言)
变更资源✅ 原生支持 mutate❌ 不支持,需额外工具
生成资源✅ 原生支持 generate❌ 不支持
清理资源✅ 原生支持 cleanup❌ 不支持
镜像验证✅ 内置 Cosign/Notary❌ 需额外集成
后台扫描✅ 已有资源也检查❌ 仅拦截新资源
学习成本
策略模板丰富的内置库社区积累

🔐 供应链安全:不只是策略引擎

Kyverno 内置了强大的镜像签名验证能力:

  • Cosign集成:验证容器镜像的 Cosign 签名
  • Notary集成:支持 Notation 签名验证
  • Sigstore集成:支持 Keyless 签名和无密钥验证
  • SBOM:所有 Kyverno 镜像都附带 CycloneDX SBOM
  • SLSA:达到 SLSA Level 3 的供应链安全标准

🌐 生态系统

Kyverno 拥有丰富的配套工具:

工具用途
Kyverno CLI本地测试策略,无需集群
Policy Reporter策略违规可视化 UI
ChainsawE2E 测试工具
Kyverno JSON非 K8s JSON 的策略评估
Policy Library数百个现成策略模板

六、社区与工程实力

从项目的源码和工程实践可以看到 Kyverno 团队的工程化水平:

📊 项目数据

指标数据
GitHub Stars⭐ 高星项目
CNCF 状态Incubating 孵化项目
Go 版本Go 1.26
K8s 兼容v0.35.x
许可证Apache 2.0
SLSALevel 3
OpenSSF Scorecard✅ 合规

🛡️ 安全工程实践

Kyverno 在安全性上下了真功夫:

  • SAST:golangci-lint + gosec
  • SCA:Dependabot 依赖扫描
  • 容器扫描:Trivy
  • 容器签名:Cosign
  • SBOM:CycloneDX 格式 SBOM
  • SLSA 生成器:构建来源验证
  • 威胁模型:已建立并文档化
  • 安全邮件:kyverno-security@googlegroups.com

🌟 最近的版本亮点(v1.18+)

  • CEL 策略评估支持
  • Global Context 入口(跨集群数据)
  • Prometheus 指标增强
  • 改进的 CLI 离线测试能力
  • 策略报告性能优化

七、实战场景:哪些团队应该用 Kyverno?

👨‍💼 平台工程团队

  • 制定统一的集群治理规范
  • 自动注入 Sidecar、配置
  • 资源配额和成本标签强制

🔒 安全团队

  • 只允许签名镜像运行
  • 禁止特权容器
  • 强制 Pod 安全标准(PSA)
  • 合规审计报告

🚀 DevOps/SRE 团队

  • 自动生成 NetworkPolicy
  • 清理过期资源
  • 强制 deployment 健康检查配置

📋 合规团队

  • 定期扫描集群合规状态
  • 生成合规报告
  • 对接审计系统

八、快速上手

安装 Kyverno

# 使用 Helmhelm repoaddkyverno https://kyverno.github.io/kyverno/ helm repo update helminstallkyverno kyverno/kyverno-nkyverno --create-namespace

安装 CLI

# macOSbrewinstallkyverno# 或直接下载二进制curl-LOhttps://github.com/kyverno/kyverno/releases/latest/download/kyverno-cli_{os}_{arch}.tar.gz

本地测试策略

# 用 CLI 测试策略效果,无需集群kyverno apply policy.yaml--resourcepod.yaml

九、总结

Kyverno 的魅力在于它的简洁和强大

  1. 零学习成本:用 YAML 写策略,K8s 用户直接上手
  2. 原生化设计:基于 Admission Webhook,深度集成 K8s
  3. 全能选手:验证 + 变更 + 生成 + 清理 + 镜像验证,一站式搞定
  4. CNCF 背书:孵化项目,社区活跃,生态丰富
  5. 供应链安全:内置 Cosign/Notary/Sigstore,DevSecOps 利器

如果你正在为 Kubernetes 集群的策略管理发愁,或者还在纠结要不要学 Rego,不妨试试 Kyverno —— 你会发现,原来策略管理可以如此简单


🔗相关链接

  • 官网:https://kyverno.io
  • GitHub:https://github.com/kyverno/kyverno
  • 策略库:https://kyverno.io/policies/
  • Slack:https://slack.k8s.io/#kyverno

本文基于 Kyverno v1.18+ 源码解读撰写,如需深入技术细节,欢迎关注后续系列文章。
细节,欢迎关注后续系列文章。*

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 6:05:55

高性能 Java 表达式求值引擎Aviator

AviatorEvaluatorInstance 技术使用文档 一、概述 1.1 组件简介 Aviator 是一款高性能 Java 表达式求值引擎,常用于动态规则判断、公式计算、条件路由、风控 / 营销规则等场景。 AviatorEvaluatorInstance 是 Aviator 的独立引擎实例,区别于全局静态工具类 AviatorEvalua…

作者头像 李华
网站建设 2026/5/28 6:05:39

应对第三方API服务中断:构建高可用与可替换的系统架构指南

1. 项目概述:当“借来的地基”突然消失今天早上,我像往常一样打开终端,准备继续调试一个基于某个大模型API构建的自动化工作流。一条来自社区的消息让我瞬间清醒:“那个谁,刚刚把OpenClaw给关了。” 我手头正好有两个项…

作者头像 李华
网站建设 2026/5/28 6:05:36

形式化方法:用数学的方式保证程序正确

在学习形式化方法之前,先来看这样一道题:题目:电梯控制系统规格说明某建筑物内有一台电梯,楼层编号为1至N(N≥2)。电梯有两种运行模式:正常运行模式和检修模式。在正常运行模式下,电…

作者头像 李华