Kyverno是Kubernetes原生策略引擎,通過“策略即代碼”(Policy-as-Code)定義和執行安全、合規及自動化策略。相較於叢集預設整合的OPA Gatekeeper,Kyverno支援使用YAML定義(無需學習 Rego),並支援在資源准入階段進行修改(Mutating)和產生(Generating),適用於需要高度自訂策略、實現營運自動化、或進行多叢集策略治理的情境。
工作原理
Kyverno以動態准入控制器(Dynamic Admission Controller)的形式運行在Kubernetes叢集中,攔截來自API Server的Webhook准入請求,執行校正(Validating)或變更(Mutating)操作,並返回審計結果。
下圖展示 Kyverno 如何通過 Admission Webhook 在 API Server 的准入階段進行策略校正和資源變更。
適用情境
ACK安全性原則管理功能預設提供基於OPA Gatekeeper的安全性原則管理能力,並內建面向不同安全合規和營運情境的容器安全性原則規則庫,以滿足通用的審計和攔截需求。它支援多策略執行個體部署,可與SLSLog Service整合,以提升策略治理的可觀測性。
Kyverno是為Kubernetes原生設計的策略引擎,使用標準CRD來定義和管理原則,提供更為簡潔、易用的體驗。其核心優勢包括:
YAML定義:策略採用標準YAML格式編寫,與Kubernetes Manifests風格一致,無需學習Rego等專用策略語言,降低使用門檻。
豐富的功能支援:原生支援校正(Validate)、修改(Mutate)和產生(Generate)操作,能覆蓋更廣泛的自動化和Policy-as-Code情境。
覆蓋存量資源:不僅在資源准入時生效,還支援對叢集存量資源進行掃描、報告、修改與產生操作。
關聯資源自動產生:可根據策略自動建立NetworkPolicy、ConfigMap等關聯資源,實現自動化配置。
相較於Kubernetes社區原生的ValidatingAdmissionPolicy和MutatingAdmissionPolicy,Kyverno的企業級策略治理能力更為全面。推薦的使用情境如下。
自訂策略:需要為CRD快速編寫和部署策略。
修改與建置原則:需要使用Mutating或Generating策略。
Kyverno具備完善的緩衝、外部資料調用和報告機制,並擴充了CEL文法庫,能滿足企業特定情境下Policy-as-Code的擴充需求。
多叢集策略治理:期望通過CLI、API或與GitOps工具(如ArgoCD)整合,實現跨多個叢集的統一策略分發與管理。
準備工作
已建立1.30及以上版本的ACK託管叢集或ACK專有叢集。如需升級,請參見手動升級叢集。
Kyverno遵循Kubernetes社區N-2版本支援策略,維護目前的版本及前兩個次要版本。更早版本未經充分測試,不保證相容性。詳見Kyverno相容性矩陣。
安裝Kyverno組件
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊建立,按照頁面提示搜尋並選中kyverno,選擇Chart版本為最新版本,並設定相應參數(可參見自訂參數),完成組件的安裝。
策略類型
Kyverno在1.15版本新增了多種策略類型。詳見策略類型。
策略類型 | 說明 |
| 通用策略類型,支援Validate、Mutate和Generate類型的規則。 |
| 校正Kubernetes資源或工作負載模板,擴充原生ValidatingAdmissionPolicy能力,以支援更全面的企業級策略校正能力。 |
| 修改Kubernetes資源或工作負載模板,擴充原生MutatingAdmissionPolicy能力,以實現更全面的企業級策略治理能力。 |
| 基於CEL語言建立和同步更新指定的Kubernetes資源。 |
| 在叢集或命名空間維度清理指定資源。 |
| 驗證鏡像簽名和證明資訊,支援cosign/notary簽名檢查、SBOM驗證等。 |
適用於生產環境
合理配置失敗策略(Failure Policy)
failurePolicy定義了當Webhook調用失敗時API Server的行為,可根據安全性與可營運性按需選擇策略。配置詳見安全與營運。Fail-open:允許API請求繼續執行,可能存在安全風險。Fail-closed:阻止API請求,可能導致叢集操作中斷。
配置高可用與可觀測性
高可用部署:使用多副本運行Kyverno,結合使用Pod反親和性(Pod Anti-Affinity)與拓撲分布約束(Topology Spread Constraints),將副本分散至不同節點或可用性區域。
資源規劃:為Kyverno Pod配置明確的資源
requests和limits。監控警示:啟用阿里雲Prometheus監控,監控Pod狀態、資源使用率、Webhook延遲和錯誤率等關鍵計量,並設定警示。
更多高可用建議,請參見實現高可用。