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