Kyverno大师课:通过模式匹配实现声明式Kubernetes安全指南

大家好!这是Kyverno大师系列课程的第七讲,Kyverno是Kubernetes安全强大的防御屏障。🛡️

在之前的课程中,我们学习了可以称之为策略大脑的变量和JMESPath。现在,是时候利用这些知识,学习如何实际验证和阻止资源的实战防御技术了。

今天我们将探讨Kyverno的核心——validate规则,以及策略操作的关键策略:failurePolicy和validationFailureAction。让我们深入学习,成为集群安全专家吧!🚀


🏗️ 1. validate规则的基本结构与模式匹配

validate规则是检查用户尝试创建的资源是否符合我们定义的“模式”的过程。

🔹 基本结构

最简单的validate策略是检查资源的特定字段值是否符合我们期望的值。

YAML

validate:
  message: "이유를 설명하는 메시지 (사용자에게 노출됨)"
  pattern:
    spec:
      containers:
      - name: "*" # 对于所有容器
        securityContext:
          allowPrivilegeEscalation: false # 此值必须为false

🔸 模式匹配的魔力

Kyverno的模式匹配非常直观。它直接遵循资源的YAML结构进行值比较。

  • 通配符 (*): 匹配零个或多个字符。(例如: image: “nginx:*” 允许所有nginx版本)
  • 问号 (?): 匹配单个字符。
  • 非空 (?[*): 表示该字段必须存在且其值不能为空。
  • 条件匹配: 可以对数字或字符串使用 >, <, >= 等运算符。

🚦 2. failurePolicy: Webhook连接失败时您的选择是?

当Kubernetes API服务器与Kyverno之间的通信出现问题时(例如网络故障、Kyverno Pod宕机等),这是一个非常重要的设置,它决定了集群应如何响应。

🟢 Ignore (默认值)

  • 工作方式: 如果Kyverno没有响应,它会“没办法”,并允许资源创建。
  • 优点: Kyverno故障不会导致整个服务部署失败。(可用性优先)
  • 缺点: 存在未经安全检查就部署危险资源的风险。

🔴 Fail

  • 工作方式: 如果Kyverno没有响应,它会说“危险,立即停止!”,并阻止资源创建。
  • 优点: 可以严格维护安全性。(安全优先)
  • 缺点: 如果Kyverno出现问题,集群内所有资源的创建/修改操作都将瘫痪。

💡 专家提示: 在生产环境中,通常的策略是默认使用Ignore,但将Kyverno配置为高可用性(HA)以降低故障概率。


⚖️ 3. validationFailureAction: Audit(审计) vs Enforce(强制)

这决定了当策略被违反时Kyverno将采取何种行动。可以将其理解为策略的“模式”。

👁️ Audit (监控模式)

  • 行为: 允许资源创建,但将违规事项记录在PolicyReport中。
  • 用途: 首次引入新策略时使用,以了解其对现有服务的影响。(类似于Dry-run)

🚫 Enforce (阻止模式)

  • 行为: 立即阻止违反策略的资源创建,并向用户发送错误消息。
  • 用途: 用于通过已验证的策略,强力执行集群安全指南。

💻 实战综合示例:安全强化策略

让我们来看一个包含上述三个核心概念的实战策略代码。

YAML

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: enforce-secure-defaults
spec:
  # 1. 策略违规时立即阻止 (生产阶段)
  validationFailureAction: Enforce 
  
  # 2. 即使Kyverno故障,API服务器也继续进行 (确保可用性)
  # 注意: 此设置将反映在实际的WebhookConfiguration中。
  failurePolicy: Ignore 
  
  background: true
  rules:
  - name: check-image-registry
    match:
      any:
      - resources:
          kinds:
          - Pod
    validate:
      message: "허용되지 않은 레지스트리에서 이미지를 가져올 수 없습니다. (우리 회사 전용 사용 필수)"
      pattern:
        spec:
          containers:
          - image: "my-company.registry.io/*" # 利用模式匹配

🚀 运维人员的策略性转换指南

在集群中部署新的安全策略时,遵循以下步骤是最安全的:

  1. 第1步 (审计模式): 以 validationFailureAction: Audit 部署。几天内查看 PolicyReport,确认哪些团队的哪些资源受到影响。
  2. 第2步 (通知与修正): 根据违规报告,联系相关团队并请求修改资源。
  3. 第3步 (转换为强制模式): 当所有资源都准备就绪后,切换到 Enforce 模式以确立安全性。

🌟 总结

今天,我们探讨了Kyverno策略的核心防御机制——validate,以及操作策略设置。

  • 您已经学会了如何使用模式进行细致检查,
  • 通过failurePolicy应对故障情况,以及
  • 通过validationFailureAction温和或强力地应用安全策略。🛠️

现在,您不仅能够创建策略,更成为了一名熟练的运维人员,懂得如何在实际服务环境中安全地部署策略!💪 如有任何疑问,请随时在评论区留言!😊



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注