~xdavidwu/cskloudv3-thesis

060ce3c532f39de12d175e4ac515d8eb16a7d20e — Pinghao Wu 3 months ago f3d1696
hbox overflow fixes
3 files changed, 6 insertions(+), 4 deletions(-)

M Sections/2.Backgrounds.tex
M Sections/4.Architecture.tex
M Sections/5.Evaluation.tex
M Sections/2.Backgrounds.tex => Sections/2.Backgrounds.tex +1 -0
@@ 94,6 94,7 @@ OpenID Connect (OIDC)\cite{oidc} 則是一個基於 OAuth 框架衍生的身份
\begin{table}[htb]
    \centering
    \caption{Kubernetes 驗證機制彙整}
    \setlength{\tabcolsep}{4pt}
    \begin{tabular}{l || c | c | c | l}
        & 效期 & 撤銷 & 管理、開發成本 & 典型場景 \\
        \hline\hline

M Sections/4.Architecture.tex => Sections/4.Architecture.tex +3 -3
@@ 65,7 65,7 @@ Kubernetes 功能廣泛,有許多功能牽涉較大的作業系統權限,間

面對如此多元的安全性相關設定,以及其產生的無數組合,我們需要一個標準評判 Pod 的安全性。Kubernetes 提出了 Pod Security Standards,並且將可能的設定分為三個政策層級:privileged、baseline 與 restricted。Privileged 可以放寬隔離機制,baseline 包含未特別指定任何設定的場景,restricted 則是進一步要求提升安全性設定。對於執行這些政策檢查,Kubernetes 提供了 \verb|PodSecurity| admission controller。

大多數政策類型的 admission controllers,包含 \verb|PodSecurity|,設計上皆能夠以 Namespace 為單位設定政策,為了確保平台安全性,我們針對使用者的 Namespaces 實施 restricted 政策。
大多數政策類型的 admission controllers,包含 \verb|PodSecurity|,皆能夠以 Namespace 為單位設定政策,增加管理上的彈性。為了確保平台安全性,我們針對使用者的 Namespaces 實施 restricted 政策,再另外個案處理平台基礎建設所使用的 Namespaces。

\subsection{PodTolerationRestriction}
\label{sec:PodTolerationRestriction}


@@ 127,7 127,7 @@ Kubernetes 中容器 images 的下載策略(\verb|imagePullPolicy| 欄位)

對於管理需求,我們在 admission control 實做保留了彈性,若操作者為管理者即不加以限制。管理者可以自行創立代表他人的 User,為其修改身份組,提供人工處理政策上例外的空間。另外,由 User 所產生的每個 resource 皆會採用 Kubernetes 的 \verb|ownerReferences| 機制。\verb|ownerReferences| 表現了一個 resource 被一個 owner resource 所管轄,當 owner resource 被刪除時,Kubernetes 的回收機制也會一併刪除此 resource。在我們的場景,由於使用者的資料皆為於個人專屬的 Namespace 底下,而 User 又為此 Namespace 的 owner resource,於是當使用者行為極端異常,管理者需要對其制裁時,只須刪除其 User 便可徹底清除此使用者的所作所為。

在實做方面,User 種類的定義以及 controller 邏輯採用 Kubebuilder\cite{kubebuilder} 框架撰寫。Kubebuilder 採用 Go 程式語言與 \verb|sig.k8s.io/controller-runtime| 函式庫開發,由 Go 語言的資料結構定義輔以註解補充,搭配程式碼生成技術實現 Kubernetes resource 種類的定義,並且提供實做 controller 時所需的監控 resources 變更等基本邏輯。另外,\verb|sig.k8s.io/controller-runtime| 亦具備 \verb|envtest| 測試框架,自動化運行 kube-apiserver 等元件,在不需要架設完整叢集的前提下,提供 controller 較為完整的測試環境。
在實做方面,User 種類的定義以及 controller 邏輯採用 Kubebuilder\cite{kubebuilder} 框架撰寫。Kubebuilder 採用 Go 程式語言與 \verb|sig.k8s.io/controller-runtime| 函式庫開發,由 Go 語言的資料結構定義輔以註解補充,搭配程式碼生成技術實現 Kubernetes resource 種類的定義,並且提供實做 controller 時所需的監控 resources 變更等基本邏輯。另外,\verb|sig.k8s.io/controller-runtime| 亦具備 \verb|envtest| 測試框架,實做 kube-apiserver 等元件的自動運行,在不需要架設完整叢集的前提下,提供 controller 較為完整的測試環境。

\subsection{Namespace}



@@ 225,7 225,7 @@ Helm Release 預設的 Secret 儲存方式需要經過 Base64\footnote{Base64: 
    \caption{CSKloud v3 網頁界面實做 Helm 原理示意圖}
\end{figure}

除此之外,瀏覽器執行程式碼的方式主要為單執行緒,不論 JavaScript 或 WebAssembly 邏輯皆是在與畫面繪製相同的執行緒執行,唯 JavaScript 語言上具有異步 IO 相關設計,使得一般負擔主要在 IO 與事件處理的網頁程式碼具備可接受的效能。但我們的場景不同,Helm 的模板引擎運算量較多,在執行時容易拖累到畫面繪製,造成卡頓。對此,我們進一步採用 Web Workers 技術。Web Workers 提供一個較侷限的執行環境,但在獨立的執行緒運行,可以避面上述影響繪製的窘境,使用上開發者需自行處理 Web Workers 與瀏覽器一般執行緒間的溝通。我們將安裝、升級、回滾、解除安裝的耗時的操作,包含 WebAssembly 的使用,在 Web Workers 環境下實做以改善使用者體驗。
除此之外,瀏覽器一般以單一執行緒運行程式碼,不論 JavaScript 或 WebAssembly 邏輯皆是在與畫面繪製相同的執行緒執行,唯 JavaScript 語言上具有異步 IO 相關設計,使得一般負擔主要在 IO 與事件處理的網頁程式碼具備可接受的效能。但我們的場景不同,Helm 的模板引擎運算量較多,在執行時容易拖累到畫面繪製,造成卡頓。對此,我們進一步採用 Web Workers 技術。Web Workers 提供一個較侷限的執行環境,但在獨立的執行緒運行,可以避面上述影響繪製的窘境,使用上開發者需自行處理 Web Workers 與瀏覽器一般執行緒間的溝通。我們將安裝、升級、回滾、解除安裝的耗時的操作,包含 WebAssembly 的使用,在 Web Workers 環境下實做以改善使用者體驗。

在安裝的部份,由於我們是在瀏覽器內實做,能存取的 HTTP 服務受到對端的跨域政策影響。除非對端主動的表示允許,瀏覽器會限制網頁邏輯對其他域名服務的存取,作為增強安全性的一個手段。由於 Helm 傳統上並非在瀏覽器環境執行,Helm Repositories 大多不會特別放寬跨域政策,因此我們無法直接使用市面上大多數的 Helm Repositories。針對 CSKloud 的場景,因為可以預期部份 Charts 會受到平台加固等策略影響而無法安裝,我們採用自行架設 Helm Repositories,並只納入批量測試成功安裝的 Helm Charts,目前共提供 32 個來自 Bitnami 的 Helm Charts。


M Sections/5.Evaluation.tex => Sections/5.Evaluation.tex +2 -1
@@ 8,6 8,7 @@
\begin{table}[htb]
    \centering
    \caption{CSKloud v3 內部實驗環境}
    \setlength{\tabcolsep}{5pt}
    \begin{tabular}{l || c | c}
        & Control plane & Worker nodes \\
        \hline\hline


@@ 54,7 55,7 @@ PSSUQ 是常見針對軟體系統的標準問卷調查,根據歷史發展分
\begin{table}[htb]
    \centering
    \small
    \setlength{\tabcolsep}{2pt}
    \setlength{\tabcolsep}{1.97pt}
    \caption{問卷調查結果}
    \label{tab:survey-result}
    % cat *.csv  | grep 2024 | cut -d ',' -f 2-25 | tr -d '"' | sed 's/,/ \& /g;s/&  &/\& \\scriptsize NA \&/g;s/$/ \\\\/;s/^/\& /;=' | wl-copy