From 6e342bd6c3d4345f0a8818a4198ddf91b3d80b86 Mon Sep 17 00:00:00 2001 From: Pinghao Wu Date: Sat, 21 Sep 2024 17:10:09 +0800 Subject: [PATCH] Architecture: PodTolerationRestriction --- Sections/4.Architecture.tex | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Sections/4.Architecture.tex b/Sections/4.Architecture.tex index 8d813c7..ab4f6ce 100644 --- a/Sections/4.Architecture.tex +++ b/Sections/4.Architecture.tex @@ -59,12 +59,20 @@ CSKloud 達成一代願景中的開放使用者直接存取 Kubernetes API,使 容器一般被視為一個與宿主端 (host) 隔離的環境,但由於容器具有自成一體 (self-contained) 的特性,能夠大幅簡化部屬管理,在 Kubernetes 的場合更可以統一管理叢集內部各節點的容器,因此容器也常被用來部屬與宿主端有關的底層基礎設施。此場景需要局部地關閉容器的隔離功能,來達成如管理宿主端網路環境等操作。對此,Kubernetes 在 Pod 的 \verb|spec| 欄位設計多個開關,提供解除部份隔離機制的途徑。 -即使並未關閉任何預設的隔離機制,對於一般的工作負載,我們也應遵循最小權限原則,例如以非 root 的身份執行等,對於容器內的執行身份,在 Pod 內也可以進行設定。另外,Kubernetes 除了傳統容器隔離技術外,也支援進一步設定其餘的安全與 mandatory access control (MAC)\footnote{MAC: 針對特定行程的操作與其目標(如讀寫特定檔案、使用特定網路資源)進行限制的機制。} 機制,例如 seccomp、SELinux、AppArmor 等。 +即使並未關閉任何預設的隔離機制,對於一般的工作負載,我們也應遵循最小權限原則,例如以非 root 的身份執行等,針對容器內的執行身份,在 Pod 內也可以進行設定。另外,Kubernetes 除了傳統容器隔離技術外,也支援進一步設定其餘的安全與 mandatory access control (MAC)\footnote{MAC: 針對特定行程的操作與其目標(如讀寫特定檔案、使用特定網路資源)進行限制的機制。} 機制,例如 seccomp、SELinux、AppArmor 等。 面對如此多元的安全性相關設定,以及其產生的無數組合,我們需要一個標準評判 Pod 的安全性。Kubernetes 提出了 Pod Security Standards,並且將可能的設定分為三個政策層級:privileged、baseline 與 restricted。Privileged 可以放寬隔離機制,baseline 包含未特別指定任何設定的場景,restricted 則是進一步要求提升安全性設定。對於執行這些政策檢查,Kubernetes 提供了 PodSecurity admission controller。 大多數政策類型的 admission controllers,包含 PodSecurity,設計上皆能夠以 namespace 為單位設定政策,為了確保平台安全性,我們針對使用者的 namespaces 實施 restricted 政策。 +\subsection{PodTolerationRestriction} + +在典型的 Kubernetes 叢集規劃下,節點分為兩大類:control plane 與 worker nodes。Control plane 負責運行叢集本身的元件,例如 kube-apiserver 與各式 controllers 等;而 worker nodes 負責運行一般的工作負載。Control plane 的元件通常也是以容器的形式部屬,而其節點也會納入叢集本身的管轄下,然而我們不希望 control plane 節點運行一般工作負載,避免影響到叢集控制邏輯的運行。Kubernetes 提供 taints 機制,用來標示 Node 的屬性,以及屬性應帶來的效果。以這個場景為例,我們標示這個 Node 為 control plane 並且不允許納入排程。此外,taints 機制同時也拿來自動標記異常的節點,例如節點資源即將耗盡的場景,並且藉此調整排程機制,優先使用其他節點。 + +與 taints 相對,Pod 可以設定 tolerations 來抑制 taints 的效果。例如在擴充 Kubernetes API 的場景,我們需要部屬實做自訂 resource 種類邏輯的 controller,這個 controller 屬於叢集控制邏輯的一部分,我們會希望規劃在 control plane 運行。在部屬此 controller 時,我們便會設定前述 taints 相對的 tolerations 解除限制,並且搭配其他排程設定強制排程至 control plane。 + +為了避免一般使用者濫用這個機制,我們採用 PodTolerationRestriction 來限制使用者能填寫的 tolerations。PodTolerationRestriction 可以針對 namespace 設定其中 Pods 可使用的 tolerations 白名單,我們將其限制為只允許系統內部會預設填入的項目。 + \section{權限開通實做} \section{網頁界面實做} -- 2.45.2