~xdavidwu/cskloudv3-thesis

5b60a1b6fbc48a226f11907d1bd989723bbf5c48 — Pinghao Wu 6 months ago 5675b1d
Architecture: add high level arch
2 files changed, 24 insertions(+), 1 deletions(-)

M Sections/4.Architecture.tex
A assets/CSKloudV3.png
M Sections/4.Architecture.tex => Sections/4.Architecture.tex +24 -1
@@ 12,6 12,9 @@
    \item \textbf{通用性}:跳脫 PaaS 的設計框架、充分發揮 Kubernetes 的潛力
\end{itemize}

% 這看要不要往下丟到 propose 設計本身
由於架構變更,使得平台上自行撰寫的元件必須重新實做。以此為契機,我們採用可上線運行的高標準撰寫,並且著重其完備性,而非僅只進行機制的概念驗證。在實做過程中,我們也反覆審視此架構下對於使用者體驗的影響,並且透過擴展網頁界面功能以其他方式彌補。

\subsection{安全性}

二代架構設計將需要高權限、低使用量的使用者開通元件以及低權限、高使用量的使用者互動界面實做為單一一個單體式網頁服務,不同權限層級的操作間欠缺隔離手段。另外在實做上也欠缺資訊安全意識,其根據使用者操作在伺服器端呼叫 Helm CLI 的方式也容易產生漏洞。完全仰賴自行定義的 admission controllers 邏輯進行 Kubernetes 叢集本身的加固,由於 Kubernetes API 的複雜性,也容易由於未充分理解而有所缺失。


@@ 20,4 23,24 @@

\subsection{通用性}

二代並沒有達成一代對於開放直接使用 Kubernetes API 的想法,欠缺通用性,在網頁控制界面的實做亦是以新的 PaaS 平台角度出發,Kubernetes 僅只屬於達成平台的手段,這樣的實做脈絡容易侷限於自身的使用經驗,而忽略其他潛在的需求。Kubernetes 本身經過時間的洗禮,已發展為高度彈性且經過廣泛採用歷練的服務部屬框架,應由直接利用 Kubernetes 的角度設計,即可低成本的達成高通用性。
二代並沒有達成一代對於開放直接使用 Kubernetes API 的想法,欠缺通用性,在網頁控制界面的實做亦是以新的 PaaS 平台角度出發,Kubernetes 僅只屬於達成平台的手段,這樣的實做脈絡容易侷限於自身的使用經驗,而忽略其他潛在的需求。同樣由於系計中人力更迭的特性,較不利於累積經驗,這個方式難以產出功能全面的產品。Kubernetes 本身經過時間的洗禮,已發展為高度彈性且經過廣泛採用歷練的服務部屬框架,應由直接利用 Kubernetes 的角度設計,即可低成本的達成高通用性。

\section{CSKloud V3 架構設計}

\begin{figure}[htb]
    \centering
    \includegraphics{assets/CSKloudV3.png}
    \caption{CSKloud V3 架構簡易示意圖}
\end{figure}

針對這些需求,我們提出新的架構,稱為 CSKloud V3(以下簡寫 CSKloud)。我們將權限開通元件拆分,改採類似於一代的方式,透過自訂 Kubernetes resource 類型撰寫。一代的開通流程仰賴於管理者手動觸發,CSKloud 則是採取更自動的流程。透過 Kubernetes 對於身份驗證的設計,OIDC 驗證前不須針對新使用者進行設定,即可進行身份驗證,我們設計賦予所有使用者創立此自訂 resource 的權限,在網頁界面首次登入時自動創立,作為開通流程的觸發機制。同時權限開通元件本身並不會自行查詢使用者身份資訊,而是透過創立者的驗證資訊判斷。

對於叢集本身的加固,二代採用 webhooks 的形式自行定義 admission controllers,而 CSKloud 改以 Kubernetes 本身內建的 admission controllers 為主,有利於確保相關防禦的完備性,並且隨著 Kubernetes 的更迭,內建的 admission controllers 也會有對應的邏輯更新,大幅減少後續在維護上的負擔,同時其行為也更為通用,更容易對使用者描述,使得使用者可以對平台所提供的功能有更明確的認知。整個系統難免還是有內建 admission controllers 無法涵蓋的其餘需求,例如域名使用權的管控,這部份 CSKloud 以 CEL 重新實做取代 webhooks,以達到更好的效能及更低的運作成本。

CSKloud 達成一代願景中的開放使用者直接存取 Kubernetes API,使用者可以透過標準 Kubernetes 客戶端(如 kubectl\footnote{kubectl: Kubernetes 官方提供的 CLI (指令列界面)型客戶端。})存取叢集,但仍然提供一個網頁界面。除了用以觸發前述的權限開通流程,這個網頁界面同時具備作為 Kubernetes 的通用型網頁界面的功能,由 Kubernetes 的角度出發設計,用意主要在輔助與簡化 Kubernetes 的使用,以及提供 kubectl 所缺乏的配額視覺化等在 CLI 場景難以實做的功能。

在網頁界面的實做方面,由於 CSKloud 開放存取 Kubernetes API,可以將其直接作為網頁後端利用,而網頁界面本身透過 SPA 架構重新實做,免除另外維護網頁後端伺服器所產生的維運成本及資安考量,同時也可以利用 Kubernetes API 本身對資料更新的推送機制,搭配 SPA 動態控制內容的特性,達成即時的資訊更新,大幅地增強使用者體驗。同時將對於 Helm 的支援透過 WebAssembly 改由直接在瀏覽器端運行,並且將其功能完善,開放更多的 Helm Charts 提供安裝。

\section{權限開通、叢集加固實做}

\section{網頁界面實做}

A assets/CSKloudV3.png => assets/CSKloudV3.png +0 -0