~xdavidwu/cskloudv3-thesis

0ed5c9f244b9310186f967b3223c4cebb892828f — Pinghao Wu 3 months ago f35e28e
Backgrounds: kubernetes: builtin and custom admission control
1 files changed, 3 insertions(+), 1 deletions(-)

M Sections/2.Backgrounds.tex
M Sections/2.Backgrounds.tex => Sections/2.Backgrounds.tex +3 -1
@@ 37,4 37,6 @@ Kubernetes resources 的種類帶給 resources 既定的語意和格式,例如

Kubernetes 主要透過兩個機制達成使用者的存取控制,其一是 RBAC (Role-based access control)。RBAC 可以根據 resources 的類別、所在的 Namespace 或是特定的 resource 實例授予使用者對其進行操作的權力,包含創立、刪除、更新、獲取、列舉等,不同種類的操作可以分別授予。

另一個機制為 admission controllers,在 RBAC 後執行,可以根據被創立或更新的 resources 內容進行控制,又分為 mutating 與 validating 兩種。Mutating admission controllers 可以修改 resources 內容,常用於對 resources spec 中的特定欄位賦予預設值。以 mutating admission controllers 賦予預設值的方法,比起在實做 resources 的 controller 定義預設行為,以使用者的立場更為明確,使用者可以觀察創建或修改後的 resource 內容明確得知其行為,對於平台提供者,也可以透過這個機制實做平台特定的預設值。Validating admission controllers 則無法修改 resources 內容,只能做出允許或拒絕操作的決策,常用於執行特定設定上的政策。由於 Kubernetes 功能上的廣泛,不適合將每個功能都規劃成獨立的 resources 類別,用 RBAC 針對 resources 類別進行存取控制有時會顯得不足,admission controllers 便補足了這方面的彈性。
另一個機制為 admission controllers,在 RBAC 後執行,可以根據被創立或更新的 resources 內容進行控制,又分為 mutating 與 validating 兩種。Mutating admission controllers 可以修改 resources 內容,常用於對 resources spec 中的特定欄位賦予預設值。以 mutating admission controllers 賦予預設值的方法,比起在實做 resources 的 controller 定義預設行為,以使用者的立場更為明確,使用者可以觀察創建或修改後的 resource 內容得知其行為,對於平台提供者,也可以透過這個機制實做平台特定的預設值。Validating admission controllers 則無法修改 resources 內容,只能做出允許或拒絕操作的決策,為了能夠驗證最終的 resources 內容,編排在 mutating admission controllers 後執行,常用於執行特定設定上的政策。由於 Kubernetes 功能上的廣泛,不適合將每個功能都規劃成獨立的 resources 類別,用 RBAC 針對 resources 類別進行存取控制有時會顯得不足,admission controllers 便補足了這方面的彈性。

Kubernetes 內建許多 admission controllers,其中一些用來實做基本功能並預設啟用,例如資源配額的部份邏輯即是以這個機制實做。另外也有些預設停用的 admission controllers,提供給管理者進行平台加固或者調整行為使用。對於內建的邏輯不敷使用的場合,Kubernetes 提供兩個機制讓管理者進一步自訂邏輯:webhooks 與 Common Expression Language (簡稱 CEL)。Webhooks 透過呼叫管理者提供的 HTTPS API 達成,支援 mutating 與 validating,可以透過任何能架設 HTTPS API 的語言編寫,在生態系上已經有多個框架可以協助開發,例如:Open Policy Agent 與 Kyverno 等。CEL 為一結構資料處理語言,常用以使軟體功能可程式化,以 Kubernetes 1.31 而言,目前只有 validating 進入穩定狀態,對 mutating 的支援仍在測試階段 (alpha)。相對於 webhooks,使用 CEL 可以直接在 kube-apiserver 上執行邏輯,省略了呼叫 HTTPS API 的網路溝通,減少造成的延遲影響與管理負擔,但能夠進行的操作受限於 Kubernetes 對其執行環境提供的函式庫。