将策略应用于集群中的现有资源。
Kyverno 可以验证集群中可能在创建策略之前创建的现有资源。在将新验证策略更改为强制模式之前评估新 validate
策略对集群的潜在影响时,这可能很有用。将策略应用于现有资源称为后台扫描,并且默认启用,除非在策略中将 background
设置为 false
,如下面的代码片段所示。
spec:
background: false
rules:
- name: default-deny-ingress
在 Policy
或 ClusterPolicy
对象中默认启用带有 spec.background
字段的后台扫描,允许 Kyverno 扫描现有资源并查找它们是否匹配任何 validate 规则。如果发现违反现有策略的现有资源,后台扫描会将它们记录在 ClusterPolicyReport
或 PolicyReport
对象中,具体取决于资源是否是命名空间级别的。即使在 enforce
模式下,它也不会阻塞任何匹配到 validate 规则的现有资源。后台扫描是可选字段,默认为true,仅对 validate
规则生效。它对 generate
和 mutate
规则无效。
默认情况下,后台扫描每小时发生一次,可以通过 background-scan 标志进行配置。
后台扫描会定期遍历所有 background=true
的策略,并依据策略配置,按照 kind
、namespace
和 LabelSelector
从 API Server 获取相关资源列表,再将资源挨个交由策略进行评估后,并产生策略报告。
注意:Kyverno 不会改变现有资源以防止无意中更改工作负载。在后台扫描期间不处理 mutate 和 generate 规则。
当启用后台扫描时,无论规则的 validationFailureAction
被设置为 enforce
还是 audit
,违规行为将记录在报告中。要查看报告如何与后台扫描一起工作的详细信息,请参阅下表。
background: true 的报告行为
新资源 | 已存在资源 | |
---|---|---|
validationFailureAction: enforce | None | Report |
validationFailureAction: audit | Report | Report |
background: false 的报告行为
新资源 | 已存在资源 | |
---|---|---|
validationFailureAction: enforce | None | None |
validationFailureAction: audit | Report | None |
策略中如果使用了来自 AdmissionReview请求信息中的变量(如 request.userInfo
),将无法在后台扫描模式下应用于现有资源,因为这些信息必须来自于一个 AdmissionReview 请求,而在资源已存在时,无法获取到这些信息。因此,这类策略必须将 background
设置为 false
以禁用后台扫描。 request.object
和 request.namespace
变量例外。