Kyverno

1. ​Kyverno 是什么?​​

Kyverno​ 是一个专为 Kubernetes 设计的 ​策略引擎​(Policy Engine),用于通过声明式策略(YAML)自动化管理集群的安全、合规和运维规则。它的名字源自希腊语 "​κυβερνήτης​"(意为“舵手”),寓意引导 Kubernetes 集群安全航行。

1.1. ​核心特性​

  1. 原生 Kubernetes 集成

    • 直接作为 Kubernetes 的 ​动态准入控制器(Admission Controller)​​ 运行,无需额外组件。
    • 策略通过 ​Custom Resource Definitions (CRDs)​​ 定义,与 K8s 原生资源风格一致。
  2. 策略即代码(Policy-as-Code)​

    • 使用 ​YAML​ 编写策略,支持以下类型:
      • 验证(Validate)​​:检查资源是否符合规则(如禁止特权容器)。
      • 变更(Mutate)​​:自动修改资源(如添加默认标签)。
      • 生成(Generate)​​:根据条件创建新资源(如自动生成 NetworkPolicy)。
  3. 上下文感知

    • 支持基于 ​资源内容用户信息命名空间​ 等动态决策。
    • 示例:限制只有特定团队能在生产命名空间部署 Pod。
  4. 免 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. ​安装与使用​

  1. 安装 Kyverno​(Helm 方式):
helm install kyverno kyverno/kyverno -n kyverno --create-namespace
  1. 应用策略​:
kubectl apply -f policy.yaml

1.6. ​适用人群​

  • 平台工程师​:统一集群安全基线。
  • DevOps 团队​:自动化运维规则。
  • 安全团队​:确保合规性审计。

Kyverno 通过 ​简单易用的策略管理,帮助用户降低 Kubernetes 的运维复杂度和安全风险。