將策略應用于集群中的現有資源。
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
變量例外。