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 的运维复杂度和安全风险。