策略和規(guī)則
了解 Kyverno 政策和規(guī)則的運(yùn)作方式。
一個(gè) Kyverno 策略是一組規(guī)則的集合。每個(gè)規(guī)則包含一個(gè) match聲明,一個(gè)可選的 exclude 聲明,以及 validate, mutate, generate, 或 verifyImages聲明之一,每個(gè)規(guī)則只能包含一個(gè) validate
、 mutate
、 generate
或 verifyImages
子聲明。
策略可以定義為集群級(jí)別資源(使用kind ClusterPolicy
)或命名空間級(jí)別資源(使用kind Policy
。)正如預(yù)期的那樣,命名空間級(jí)別策略?xún)H適用于定義它們的命名空間內(nèi)的資源,而集群級(jí)別策略適用于所有命名空間中的匹配資源。 否則,這兩種類(lèi)型之間沒(méi)有區(qū)別。
應(yīng)用策略
跨集群和交付管道應(yīng)用策略
Kyverno 策略存儲(chǔ)庫(kù)包含幾個(gè)可以立即應(yīng)用于集群的策略。
集群內(nèi)
安裝后,Kyverno 會(huì)作為動(dòng)態(tài)準(zhǔn)入控制器在集群內(nèi)運(yùn)行。Kyverno 從 kube-apiserver 接收驗(yàn)證和變更準(zhǔn)入 webhook HTTP 回調(diào),并應(yīng)用匹配策略返回執(zhí)行準(zhǔn)入策略或拒絕請(qǐng)求的結(jié)果。
具有驗(yàn)證規(guī)則的策略,可用于通過(guò)將 validationFailureAction 設(shè)置為 enforce
來(lái)阻止不安全或不合規(guī)的配置。驗(yàn)證規(guī)則也可用于定期掃描,并將結(jié)果產(chǎn)出為策略報(bào)告。
策略中的規(guī)則按定義順序應(yīng)用。在準(zhǔn)入控制過(guò)程中,變更規(guī)則在驗(yàn)證規(guī)則之前應(yīng)用。這允許驗(yàn)證變更期間所做的更改。請(qǐng)注意,在應(yīng)用任何驗(yàn)證規(guī)則之前,首先應(yīng)用所有策略中的變更規(guī)則。
策略?xún)?nèi)或策略之間沒(méi)有排序,所有匹配的策略規(guī)則將始終應(yīng)用。validate
規(guī)則對(duì)順序沒(méi)有要求,然而,對(duì)于 mutate
和 generate
規(guī)則,如果存在級(jí)聯(lián)依賴(lài)關(guān)系,則應(yīng)根據(jù)這些依賴(lài)關(guān)系對(duì)規(guī)則進(jìn)行排序。由于驗(yàn)證規(guī)則的內(nèi)容是 pass
或 fail
條件,規(guī)則不能覆蓋其他規(guī)則,只能擴(kuò)展 fail
條件集。因此,命名空間級(jí)別策略不能覆蓋或修改集群范圍策略中描述的行為。由于策略是相關(guān)規(guī)則的邏輯集合,并且不暗示相對(duì)于其他策略的功能,所以,例如具有兩個(gè)驗(yàn)證規(guī)則的單個(gè)策略產(chǎn)生與每個(gè)具有一個(gè)規(guī)則的兩個(gè)策略的最終效果相同。因此,設(shè)計(jì)策略主要是一個(gè)組織問(wèn)題,而不是功能問(wèn)題。
CI/CD 流水線中
您可以使用 Kyverno CLI 將策略應(yīng)用于 YAML 資源清單文件,并將其作為軟件交付管道的一部分。該命令行工具允許將 Kyverno 集成到 GitOps 風(fēng)格的工作流中,并在資源清單提交到版本控制系統(tǒng)前檢查其是否合規(guī),然后將其應(yīng)用到集群中。
編寫(xiě)策略
創(chuàng)建可以驗(yàn)證、變更和生成資源以及執(zhí)行容器鏡像驗(yàn)證的策略。
策略配置
策略中所有規(guī)則的通用配置。
策略包含一個(gè)或多個(gè)規(guī)則,以及適用于策略中所有規(guī)則的以下常見(jiàn)設(shè)置:
validationFailureAction: 控制驗(yàn)證策略規(guī)則失敗是否應(yīng)該阻止準(zhǔn)入審查請(qǐng)求(
enforce
)或允許(audit
)準(zhǔn)入審查請(qǐng)求并在策略報(bào)告中報(bào)告策略失敗。 默認(rèn)為audit
。validationFailureActionOverrides: 一個(gè) ClusterPolicy 屬性,指定 validationFailureAction 命名空間方式。 它會(huì)覆蓋指定命名空間的 validationFailureAction。
background: 控制是否在后臺(tái)掃描期間將規(guī)則應(yīng)用于現(xiàn)有資源。 默認(rèn)為“true”。
schemaValidation: 控制是否應(yīng)用策略驗(yàn)證檢查。 默認(rèn)為“true”。 Kyverno 將嘗試驗(yàn)證策略的 schema,如果無(wú)法確定它滿(mǎn)足該資源的 OpenAPI schema 定義,則會(huì)失敗。可以在驗(yàn)證或變更策略上發(fā)生。 設(shè)置為“false”以跳過(guò)模式驗(yàn)證。
failurePolicy: 定義 webhook 無(wú)法響應(yīng)時(shí)的 API Server行為。 允許的值為“
Ignore
”或“Fail
”。 默認(rèn)為“Fail
”。webhookTimeoutSeconds: 指定允許此策略執(zhí)行的最長(zhǎng)時(shí)間(以秒為單位)。 默認(rèn)超時(shí)為 10 秒。 該值必須介于 1 到 30 秒之間。
使用 kubectl explain policy.spec
獲取有關(guān)策略 schema 的命令行幫助。