From bae95a4ddff5d187256f307dcd44437f75046eb5 Mon Sep 17 00:00:00 2001 From: Pinghao Wu Date: Sun, 22 Sep 2024 13:45:38 +0800 Subject: [PATCH] Architecture: provisioner high level overview --- Sections/4.Architecture.tex | 15 +++++++++++++++ assets/provisioner-user-spec.png | Bin 0 -> 43818 bytes 2 files changed, 15 insertions(+) create mode 100644 assets/provisioner-user-spec.png diff --git a/Sections/4.Architecture.tex b/Sections/4.Architecture.tex index 0613be3..ae75c90 100644 --- a/Sections/4.Architecture.tex +++ b/Sections/4.Architecture.tex @@ -98,6 +98,21 @@ CSKloud 達成一代願景中的開放使用者直接存取 Kubernetes API,使 \section{權限開通實做} \label{sec:provisioner} +使用者權限開通的主要流程為:建立一個 Namespace,對其設定配額,增加 admission controllers 政策相關標記,最終調整 RBAC 授予使用者此 Namespace 下的權限。為了將其自動化,我們規劃為拓展 Kubernetes API,使用自訂 resource 種類進行實做,此種類稱為 User。使用者登入網頁界面時會自動嘗試創立代表自身的 User,若已存在代表已開通完成不須另外動作。面對新創立的 User,我們撰寫的 controller 會實行上述的開通流程。 + +\begin{figure}[htb] + \centering + \includegraphics[width=0.5\textwidth]{assets/provisioner-user-spec.png} + \caption{權限開通自訂 resource 種類 User spec 範例} + \label{fig:code-pod-policy} +\end{figure} + +每個使用者會創立一個與其系計中帳號名稱相同的 User,其中 \verb|spec| 的 \verb|profile| 欄位帶有其身份組資訊,由網頁界面自動判斷填入。身份組影響對齊開放配額的大小。對於創立代表自身 User 所需的權限,我們透過 RBAC 允許所有使用者創立 User,再透過 admission control 將其限制名稱必須與身份相同。分兩階段設計有助於簡化 RBAC 實做,使 RBAC 實做上不須枚舉使用者名稱一一事先對應,同時也減少叢集上相關設定的 resources 個數,有助於減少管理上的負擔。對於 \verb|profile| 欄位的真實性,我們一樣透過 admission control 與身份資訊比對。 + +實際上以 \verb|profile| 欄位而言,還有一個可行的方法,即是以 mutating admission control 層由叢集端判斷寫入,而不用仰賴網頁界面邏輯。這個方式目前有個缺點:admission control 邏輯我們希望透過 CEL 實做,而以 CEL 實做 mutating 雖然已有相關機制,現今仍未進入穩定狀態。另外,透過網頁界面預填也使得 admission control 層只須實做 validating,相對於 mutating,validating 因不能修改 resource 內容,較為單純且有平行化處理的空間,在效能與管理上皆有些許優勢。 + +對於管理需求,我們在 admission control 實做保留了彈性,若操作者為管理員即不加以限制。管理員可以自行創立代表他人的 User,為其修改身份組,提供人工處理政策上例外的空間。 + \section{網頁界面實做} 進一步對網頁界面的需求分析,可以將網頁界面切分為兩大塊:支援 Helm 的通用 Kubernetes 網頁型客戶端,以及 CSKloud 特定的部份,包含權限開通元件的整合以及 CSKloud 平台面向使用者的文件等。其中 Kubernetes 客戶端很容易的就可以利用於其他場景,我們採取 open core 的策略,將其 Kubernetes 客戶端開放原始碼,以 MIT 授權條款\footnote{MIT license: 一個在網頁技術場域廣受歡迎的寬鬆型開放原始碼條款。}釋出,命名為 Sparkles\footnote{Sparkles 釋出於 \url{https://github.com/xdavidwu/sparkles} 。},回饋於社會,使得非平台使用者也能受益,同時可以也利用開放原始碼社群的力量來茁壯平台的發展。 diff --git a/assets/provisioner-user-spec.png b/assets/provisioner-user-spec.png new file mode 100644 index 0000000000000000000000000000000000000000..8d432fdaa58c9f7745fc355831e018e128361cea GIT binary patch literal 43818 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%0ApEM^=@?yF0eq_eU-+&tc11Z< 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