~xdavidwu/cskloudv3-thesis

9072d99838c1caa39ec611a81dbfcdf2fe4cc000 — Pinghao Wu 5 months ago 8a17247
RelatedWorks: multi-tenancy: expand
2 files changed, 32 insertions(+), 5 deletions(-)

M Sections/3.RelatedWorks.tex
M ref.bib
M Sections/3.RelatedWorks.tex => Sections/3.RelatedWorks.tex +22 -4
@@ 33,12 33,30 @@

雲端運算的一大要點為集結大量資源,予以集中管理,彈性分配給多個租戶使用以提高運用效率。然而 Kubernetes 因功能的廣泛,以及專注於單一租戶的歷史脈絡,導致實做多租戶有多個不同的方法與隔離程度,其中依照使用場景又常分為軟、硬兩種多租戶層級\cite{k8smultitenancy}。

軟多租戶指的是租戶間擁有一定程度的信任,在租戶間的隔離與安全性上的需求較低,而專注於防止租戶間的意外狀況影響,常見於同個公司內部的不同團隊。硬多租戶則是指租戶間無法存在信任,任一租戶都必須視為可能的攻擊者,在設計上必須以隔離、安全性為優先考量。本研究欲達成的目標較偏向硬多租戶。
軟多租戶指的是租戶間擁有一定程度的信任,在租戶間的隔離與安全性上的需求較低,而專注於防止租戶間的操作意外影響,常見於同個公司內部的不同團隊。硬多租戶則是指租戶間無法存在信任,任一租戶都必須視為可能的攻擊者,在設計上必須以隔離、安全性為優先考量,常見於公有服務。本研究欲達成的目標為硬多租戶。

Kubernetes Namespaces 由於只影響 API 上能描述的 resources 相互關係,並不隱含實際工作負載的隔離,常用來實做軟多租戶。然而,透過 admission control 我們仍可為 resource 內容加以把關,確保使用者在其他層面啟用對工作負載的隔離措施,防止在共用叢集的架構下影響其他租戶,彌補 Namespaces 在此方面的不足,使整體更為貼近硬多租戶的目標。CScloud 即是採用此類方案,但同時帶來的是大量的 admission control 加固開發成本。
Kubernetes Namespaces 由於只影響 API 上能描述的 resources 相互關係,並不隱含實際工作負載的隔離,常用來實做軟多租戶。然而,透過 admission control 我們仍可為 resource 內容加以把關,確保使用者在其他層面啟用對工作負載的隔離措施,防止在共用叢集的架構下影響其他租戶,彌補 Namespaces 在此方面的不足,以達成硬多租戶的目標。CScloud 即是採用此類方案,但同時帶來的是大量的 admission control 加固開發成本。另外由於 Namespaces 設計上無法管控 cluster-scoped 的 resource 種類,在此方案下租戶無法使用相關功能。

在硬多租戶的議題下,另一個常見許多的手法則是基於叢集的多租戶模型,透過給予每個租戶獨立的叢集,進而免除對叢集內部的大多數加固需求,以高層次架構來看單純許多,並且租戶能夠使用較完整的 Kubernetes 功能。

基於叢集的多租戶需要動態的配置多個獨立叢集與節點,因此經常透過大型虛擬機平台實做,加上 cluster API 達成相關的自動化。Cluster API 是 Kubernetes API 的延伸,透過自訂 resource 種類,將租戶叢集的管理以 controller 的方式實做,達成以一個管理用母叢集,控管多個租戶子叢集的形式,減少在維運上的負擔。有些手法另外會將叢集邏輯元件在部屬上盡可能與叢集本身抽離,以其他方式統一代管,避免租戶操作上的意外影響,提昇可靠度,並且降低多叢集在資源上的部份負擔。
基於叢集的多租戶需要動態的配置多個獨立叢集與節點,因此經常透過大型虛擬機平台實做,加上 Cluster API 達成相關的自動化。Cluster API\cite{clusterapi} 是 Kubernetes API 的延伸,透過自訂 resource 種類,將租戶叢集的管理以 controller 的方式實做,達成以一個管理用母叢集,控管多個租戶子叢集的形式,減少在維運上的負擔。Cluster API 在實做上具有擴充性設計,將節點運算資源環境與加入叢集方式分離,定義提供者界面,使虛擬化平台以及 Kubernetes 發行版供應商的支援皆可擴充開發,並且兩者可以自由搭配使用,目前已經支援大多數常見的公、私有雲虛擬機平台。

將大量叢集管理的想法再進一步延伸,有些手法另外會將叢集控制邏輯元件在部屬上與運算節點抽離,以其他方式統一代管。一方面避免租戶直接存取叢集關鍵元件,減少操作上的意外影響,提昇叢集整體可靠度,另一方面也降低多叢集在資源上的部份負擔。此類做法常見於直接提供 Kubernetes 服務的公有雲。

雖然基於叢集的多租戶具備功能完整、架構簡潔與高度隔離的優勢,並且已有 Cluster API 自動化以輔助管理。然而多叢集運算資源與管理開銷較大,本研究有上千個潛在的租戶,即使我們將控制邏輯元件集中管理,並且每個叢集只提供一個節點,犧牲節點層面的高可用性,仍然可能需要上千個虛擬機,考量到系計中的硬體資源,此方法並不實際。相較於上千個小型叢集,一個大型叢集較易於管理,也能大幅減少虛擬機數量,避免重複運行相同系統元件帶來的資源浪費。本研究沿襲 CScloud,採取單一叢集、基於 Namespace 的多租戶設計,並且將其加固以實踐硬多租戶,使用較低的資源成本,但仍提供可接受的安全性。另外我們將加固實做重新整理,以更低的開發維護成本與更新的技術實現。

\begin{table}[htb]
    \centering
    \caption{Kubernetes 硬多租戶實做形式彙整}
    \begin{tabular}{l || c | c }
        租戶切分方式 & 叢集 & Namespace \\
        \hline\hline
        實做主要議題 & 大量叢集管理自動化 & 單一叢集內部加固 \\ \hline
        典型的租戶隔離形式 & 虛擬機(叢集環境) & 容器 \\ \hline
        額外資源負擔 & 大 & 小 \\ \hline
        可用 Kubernetes 功能 & 完整 & 足以部屬網頁服務 \\ \hline
        開發負擔 & 小 & 大 \\ \hline
        管理負擔 & 大 & 小 \\
    \end{tabular}
\end{table}

雖然基於叢集的多租戶具備功能完整、架構簡潔與高度隔離的優勢,並且已有較多完整的現成解決方案,然而資源開銷較大,本研究有上千個潛在的租戶,考量到系計中的硬體資源,此方法並不實際。本研究沿襲 CScloud,採取基於 Namespace 的多租戶設計,並且將其加固以貼近硬多租戶,使用較低的資源成本,但仍提供可接受的安全性。另外我們將加固實做重新整理,以更低的開發維護成本與更新的技術實現。

M ref.bib => ref.bib +10 -1
@@ 16,7 16,7 @@
    type	= {Master's thesis},
}

% TODO dot position, urldate, unify rfcs
% TODO urldate

@misc{kubernetes,
    title 	= {{Kubernetes}},


@@ 274,3 274,12 @@
    url		= {https://docs.google.com/document/d/1PjlsBmZw6Jb3XZeVyZ0781m6PV7-nSUvQrwObkvz7jg},
    urldate	= {2024-09-25},
}

@misc{clusterapi,
    title 	= {Introduction - The {Cluster API} Book},
    author	= {{The Kubernetes Authors}},
    year	= {2024},
    url		= {https://cluster-api.sigs.k8s.io/introduction},
    urldate	= {2024-10-15},
}