Skip to content

antony@notes:~/security$ cat "認識與實作-Kyverno.md"

認識與實作 Kyverno

2025-07-28· security

認識與實作 Kyverno

Kyverno(希臘語中「治理」的意思)是一個為雲端原生環境設計的策略引擎。它最初是為 Kubernetes 所打造,現在也能在 Kubernetes 叢集之外,作為一個統一的策略語言來使用。

Kyverno 讓平台工程師(platform engineers)能夠自動化處理安全性、合規性及最佳實踐的驗證,並為應用程式團隊(application teams)提供安全的自助服務。

其眾多功能特色包含:

  • 將策略定義為基於 YAML 的宣告式 Kubernetes 資源,無需學習新的語言!
  • 可作為 Kubernetes 的 admission controller、基於 CLI 的掃描器,以及在執行期間(at runtime)強制執行策略。
  • 驗證(validate)、變更(mutate)、產生(generate)或清理(cleanup/remove)任何 Kubernetes 資源。
  • 驗證 container image 及其元數據(metadata),以確保軟體供應鏈(software supply chain)的安全性。
  • 策略可應用於任何 JSON 格式的負載(payload),包含 Terraform 資源、雲端資源及服務授權。
  • 使用來自 CNCF Policy WG(策略工作小組)的開放報告格式來產出策略報告。
  • 彈性的策略例外管理機制。
  • 提供工具對策略進行全面的單元測試(unit testing)與端對端測試(e2e testing)。
  • 使用如 git 和 kustomize 等熟悉的工具,將策略作為程式碼資源(policies as code)來管理。

How Kyverno Works

Kyverno 在 Kubernetes 叢集中作為一個 dynamic admission controller 運行。Kyverno 從 Kubernetes API server 接收 validating 和 mutating admission webhookHTTP 回呼(callbacks),並應用相符的策略來回傳結果,以強制執行准入策略或拒絕請求。

Kyverno 策略可以使用資源的 kindnamelabel selectors 等多種方式來匹配資源。

Mutating policies(變更型策略)可以寫成 overlays(類似於 Kustomize)的形式,或是 RFC 6902 JSON Patch 的格式。Validating policies(驗證型策略)也使用 overlay 風格的語法,並支援模式匹配(pattern matching)和條件式(if-then-else)處理。

策略的強制執行情況會透過 Kubernetes events 來記錄。對於那些被允許的請求,或是在 Kyverno 策略被引入前就已存在的資源,Kyverno 會在叢集中建立 Policy Reports。這些報告會包含一份持續更新的清單,列出由某個策略匹配到的資源、它們的狀態等等。

下圖顯示了 Kyverno 的高階邏輯架構 :

image

Webhook 是一個伺服器,負責處理來自 Kubernetes API server 的傳入 AdmissionReview 請求,並將它們傳送給 Engine 進行處理。它由 Webhook Controller 進行動態設定,該控制器會監看已安裝的策略,並修改 webhooks,使其只請求那些被策略所匹配的資源。

Cert Renewer 負責監看並更新 webhook 所需的憑證,這些憑證以 Kubernetes Secrets 的形式儲存。

Background Controller 透過協調(reconciling)一個名為 UpdateRequests 的中介資源,來處理所有 generate(產生)和 mutate-existing(變更現有)的策略。

Report Controllers 則負責從它們的中介資源——Admission ReportsBackground Scan Reports——來建立及協調 Policy Reports

Kyverno 也支援高可用性(high availability)。一個高可用性的 Kyverno 安裝,是指其選擇安裝的 controllers 會被設定為以多個副本(replicas)運行。根據 controller 的不同,額外的 replicas 也可能用來提升 Kyverno 的可擴展性(scalability)。請參閱高可用性頁面,以獲取更多關於各種 Kyverno controllers、它們的元件以及各自如何處理可用性的詳細資訊。