Kyverno

Kyverno后台扫描

2022-09-23  本文已影响0人  王勇1024

将策略应用于集群中的现有资源。

Kyverno 可以验证集群中可能在创建策略之前创建的现有资源。在将新验证策略更改为强制模式之前评估新 validate 策略对集群的潜在影响时,这可能很有用。将策略应用于现有资源称为后台扫描,并且默认启用,除非在策略中将 background 设置为 false,如下面的代码片段所示。

spec:
  background: false
  rules:
  - name: default-deny-ingress

PolicyClusterPolicy 对象中默认启用带有 spec.background 字段的后台扫描,允许 Kyverno 扫描现有资源并查找它们是否匹配任何 validate 规则。如果发现违反现有策略的现有资源,后台扫描会将它们记录在 ClusterPolicyReportPolicyReport 对象中,具体取决于资源是否是命名空间级别的。即使在 enforce 模式下,它也不会阻塞任何匹配到 validate 规则的现有资源。后台扫描是可选字段,默认为true,仅对 validate 规则生效。它对 generatemutate 规则无效。

默认情况下,后台扫描每小时发生一次,可以通过 background-scan 标志进行配置。

后台扫描会定期遍历所有 background=true 的策略,并依据策略配置,按照 kindnamespaceLabelSelector 从 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.objectrequest.namespace 变量例外。

上一篇 下一篇

猜你喜欢

热点阅读