大家好!这是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步 (审计模式): 以 validationFailureAction: Audit 部署。几天内查看 PolicyReport,确认哪些团队的哪些资源受到影响。
- 第2步 (通知与修正): 根据违规报告,联系相关团队并请求修改资源。
- 第3步 (转换为强制模式): 当所有资源都准备就绪后,切换到 Enforce 模式以确立安全性。
🌟 总结
今天,我们探讨了Kyverno策略的核心防御机制——validate,以及操作策略设置。
- 您已经学会了如何使用模式进行细致检查,
- 通过failurePolicy应对故障情况,以及
- 通过validationFailureAction温和或强力地应用安全策略。🛠️
现在,您不仅能够创建策略,更成为了一名熟练的运维人员,懂得如何在实际服务环境中安全地部署策略!💪 如有任何疑问,请随时在评论区留言!😊
发表回复