~xdavidwu/cskloudv3-thesis

f3d1696b55d6a7c5775f62f563115922df587a63 — Pinghao Wu a month ago ef08af1
backport ingress figure
2 files changed, 6 insertions(+), 0 deletions(-)

M Sections/4.Architecture.tex
A assets/ingress.png
M Sections/4.Architecture.tex => Sections/4.Architecture.tex +6 -0
@@ 96,6 96,12 @@ Kubernetes 中容器 images 的下載策略(\verb|imagePullPolicy| 欄位)

以 CEL 實做 validating admission control 邏輯需要由 ValidatingAdmissionPolicy resource 先行定義,再以 ValidatingAdmissionPolicyBinding resource 將之啟用。圖 \ref{fig:code-pod-policy} 即為實做防止繞過排程的 ValidatingAdmissionPolicy。首先我們只對開放給使用者的 Namespace 進行限制,透過 \ref{sec:provisioner} 權限開通的設計,以具有 \verb|u-| 前綴來判斷。再來由於排程機制對 Pod 指定節點與使用者直接指定修改的欄位相同,我們需要避免限制到叢集系統本身。這點由於我們的權限規劃,使用者沒有列舉 Nodes 的權限,我們以此分別使用者與系統。最後我們檢查欄位狀況,確保在更新時值保持不變,或者在創立時未被指定。

\begin{figure}[htb]
    \centering
    \includegraphics[width=\textwidth]{assets/ingress.png}
    \caption{以 Kubernetes Ingress 基於域名的 HTTP 服務分流規劃示意圖}
\end{figure}

另一個需要自訂邏輯的場景是域名使用權的管控。針對用來設定反向代理的 Ingresses,我們一樣先判斷操作的 Namespace 是否為使用者面向的,再進一步進行限制。需要限制的有:禁止使用 \verb|defaultBackend| 欄位(全域、不符合任何規則時的 fallback route),以及所有反向代理規則中的 \verb|host| 必須要符合域名白名單。白名單參考其餘政策相關內建 admission controllers 的設計,採用在 Namespace 上標記作為設定手段,後續再藉由 \ref{sec:provisioner} 權限開通設定此白名單。

\section{權限開通實做}

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