Kyverno
1. Kyverno 是什么?
Kyverno 是一个专为 Kubernetes 设计的 策略引擎(Policy Engine),用于通过声明式策略(YAML)自动化管理集群的安全、合规和运维规则。它的名字源自希腊语 "κυβερνήτης"(意为“舵手”),寓意引导 Kubernetes 集群安全航行。
1.1. 核心特性
-
原生 Kubernetes 集成
- 直接作为 Kubernetes 的 动态准入控制器(Admission Controller) 运行,无需额外组件。
- 策略通过 Custom Resource Definitions (CRDs) 定义,与 K8s 原生资源风格一致。
-
策略即代码(Policy-as-Code)
- 使用 YAML 编写策略,支持以下类型:
- 验证(Validate):检查资源是否符合规则(如禁止特权容器)。
- 变更(Mutate):自动修改资源(如添加默认标签)。
- 生成(Generate):根据条件创建新资源(如自动生成 NetworkPolicy)。
- 使用 YAML 编写策略,支持以下类型:
-
上下文感知
- 支持基于 资源内容、用户信息、命名空间 等动态决策。
- 示例:限制只有特定团队能在生产命名空间部署 Pod。
-
免 Sidecar
- 不依赖 Sidecar 注入,减少性能开销。
1.2. 常见使用场景
| 场景 | 示例策略 |
|---|---|
| 安全加固 | 禁止容器以 root 用户运行 |
| 合规检查 | 要求所有 Pod 添加 env=prod 标签 |
| 自动修复 | 自动为没有 resource-limits 的 Pod 添加 CPU/内存限制 |
| 多租户管理 | 限制不同团队只能访问特定命名空间 |
| 成本优化 | 强制删除超过 30 天未使用的 PVC |
1.3. 1.3.与 OPA/Gatekeeper 对比
| 工具 | 特点 |
|---|---|
| Kyverno | 专为 K8s 设计,策略语法简单,支持变更和生成,无需学习 Rego 语言 |
| OPA | 通用策略引擎(不限于 K8s),需搭配 Gatekeeper,使用 Rego 语言编写策略 |
1.4. 快速示例
1.4.1. 验证策略(禁止特权容器)
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disable-privileged-containers
spec:
validationFailureAction: Enforce # 强制拒绝违规请求
rules:
- name: check-privileged
match:
resources:
kinds:
- Pod
validate:
message: "特权容器禁止运行!"
pattern:
spec:
containers:
- securityContext:
privileged: false
1.4.2. 1.4.2.2. 变更策略(自动添加标签)
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: add-default-label
spec:
rules:
- name: inject-label
match:
resources:
kinds:
- Pod
mutate:
patchStrategicMerge:
metadata:
labels:
env: "default"
1.5. 安装与使用
- 安装 Kyverno(Helm 方式):
helm install kyverno kyverno/kyverno -n kyverno --create-namespace
- 应用策略:
kubectl apply -f policy.yaml
1.6. 适用人群
- 平台工程师:统一集群安全基线。
- DevOps 团队:自动化运维规则。
- 安全团队:确保合规性审计。
Kyverno 通过 简单易用的策略管理,帮助用户降低 Kubernetes 的运维复杂度和安全风险。