策略和规则
了解 Kyverno 政策和规则的运作方式。
一个 Kyverno 策略是一组规则的集合。每个规则包含一个 match声明,一个可选的 exclude 声明,以及 validate, mutate, generate, 或 verifyImages声明之一,每个规则只能包含一个 validate
、 mutate
、 generate
或 verifyImages
子声明。
策略可以定义为集群级别资源(使用kind ClusterPolicy
)或命名空间级别资源(使用kind Policy
。)正如预期的那样,命名空间级别策略仅适用于定义它们的命名空间内的资源,而集群级别策略适用于所有命名空间中的匹配资源。 否则,这两种类型之间没有区别。
应用策略
跨集群和交付管道应用策略
Kyverno 策略存储库包含几个可以立即应用于集群的策略。
集群内
安装后,Kyverno 会作为动态准入控制器在集群内运行。Kyverno 从 kube-apiserver 接收验证和变更准入 webhook HTTP 回调,并应用匹配策略返回执行准入策略或拒绝请求的结果。
具有验证规则的策略,可用于通过将 validationFailureAction 设置为 enforce
来阻止不安全或不合规的配置。验证规则也可用于定期扫描,并将结果产出为策略报告。
策略中的规则按定义顺序应用。在准入控制过程中,变更规则在验证规则之前应用。这允许验证变更期间所做的更改。请注意,在应用任何验证规则之前,首先应用所有策略中的变更规则。
策略内或策略之间没有排序,所有匹配的策略规则将始终应用。validate
规则对顺序没有要求,然而,对于 mutate
和 generate
规则,如果存在级联依赖关系,则应根据这些依赖关系对规则进行排序。由于验证规则的内容是 pass
或 fail
条件,规则不能覆盖其他规则,只能扩展 fail
条件集。因此,命名空间级别策略不能覆盖或修改集群范围策略中描述的行为。由于策略是相关规则的逻辑集合,并且不暗示相对于其他策略的功能,所以,例如具有两个验证规则的单个策略产生与每个具有一个规则的两个策略的最终效果相同。因此,设计策略主要是一个组织问题,而不是功能问题。
CI/CD 流水线中
您可以使用 Kyverno CLI 将策略应用于 YAML 资源清单文件,并将其作为软件交付管道的一部分。该命令行工具允许将 Kyverno 集成到 GitOps 风格的工作流中,并在资源清单提交到版本控制系统前检查其是否合规,然后将其应用到集群中。
编写策略
创建可以验证、变更和生成资源以及执行容器镜像验证的策略。
策略配置
策略中所有规则的通用配置。
策略包含一个或多个规则,以及适用于策略中所有规则的以下常见设置:
-
validationFailureAction: 控制验证策略规则失败是否应该阻止准入审查请求(
enforce
)或允许(audit
)准入审查请求并在策略报告中报告策略失败。 默认为audit
。 -
validationFailureActionOverrides: 一个 ClusterPolicy 属性,指定 validationFailureAction 命名空间方式。 它会覆盖指定命名空间的 validationFailureAction。
-
background: 控制是否在后台扫描期间将规则应用于现有资源。 默认为“true”。
-
schemaValidation: 控制是否应用策略验证检查。 默认为“true”。 Kyverno 将尝试验证策略的 schema,如果无法确定它满足该资源的 OpenAPI schema 定义,则会失败。可以在验证或变更策略上发生。 设置为“false”以跳过模式验证。
-
failurePolicy: 定义 webhook 无法响应时的 API Server行为。 允许的值为“
Ignore
”或“Fail
”。 默认为“Fail
”。 -
webhookTimeoutSeconds: 指定允许此策略执行的最长时间(以秒为单位)。 默认超时为 10 秒。 该值必须介于 1 到 30 秒之间。
使用 kubectl explain policy.spec
获取有关策略 schema 的命令行帮助。
网友评论