Kubernetes 多租戶簡介
什麼是多租戶?
在不同租戶之間共享應用程序或軟件的單個實例的想法稱爲多租戶。自雲環境興起以來,這種方法非常流行。現在,隨着 Kubernetes 的引入,開發人員和管理員需要在 Kubernetes 集羣上實施相同的方法。因爲這將提供更好的資源利用率,更好地管理底層計算資源,並降低成本。
這篇博文將討論在 Kubernetes 集羣中引入多租戶的各種可用方法,並將嘗試在所有這些方法之間進行比較。
如何使用多租戶更好?
在討論多租戶架構之前,我們應該知道是部署單個 支持多租戶的 Kubernetes 集羣更好, 還是應該部署多個集羣,每個租戶都不同。
首先,對此沒有特定規則,大多數組織根據易用性、管理等來決定這一點。部署多個集羣很簡單,因爲您不必擔心遵循其他最佳實踐,例如審計 RBAC,爲用戶建立標準做法。除此之外,成本在做出此決定時也起着重要作用。如果成本不是問題並且您想要簡單的架構,請部署多個集羣。然而,如果您的計算需求要少得多並且您想節省一些額外的成本,多租戶可能是更好的選擇。其他一些因素也起着至關重要的作用,例如集羣的生命週期,如果您的需求只是暫時的,多集羣可能是一個可行的選擇,因爲您不必在集羣上安裝任何其他東西。
擁有多個集羣的一個主要缺點是增加了管理開銷,特別是對於大型環境,需要付出很多努力來保持每個集羣的更新,還 需要更多的 安全審計。值得注意的是,雖然您可能會使用多集羣方法,但您不應該通過犯一些小錯誤(例如將所有應用程序部署在同一命名空間中)來阻止圍繞多租戶的未來擴展。
多租戶架構的不同方法
Kubernetes 中的多租戶可以分爲兩大類:
-
軟隔離:在這種情況下,我們有一個企業,不同的團隊訪問同一個集羣,這需要較少的安全開銷,因爲用戶可以相互信任。
-
硬隔離:當 Kubernetes 暴露給具有獨立且完全不受信任的用戶的多個企業時,這是必需的。
KubeCon Europe 2019 討論了各種方法,其中每種方法都可以列入上述兩個類別中的任何一個。
上圖概述了在您的環境中使用 Kubernetes 集羣的 4 種不同方法。
-
方法 A 這並沒有提供精確的多租戶解決方案,因爲它部署了不同的 Kubernetes 集羣。然而,仍然可以認爲在這個解決方案中每個租戶都會收到一個不同的 Kubernetes 集羣,該集羣與任何其他計算資源完全隔離。這可以通過使用隔離的 VM 提供商(如 Amazon EC2、GCP 計算實例和 vSphere VM)來實現。
-
方法 B 這是一種流行的架構,其中隔離基於名稱空間。這提供了不同租戶之間的軟隔離。這樣,租戶只能在其命名空間內查看、修改和創建對象。此外,他們可以在其命名空間內爲安全性和角色創建策略。這種方法有兩個主要缺點,一個是像 API 服務器這樣的共享主組件,另一個是集羣範圍資源的配置。爲開發這種方法而進行的主要工作是由 Project HNC(分層命名空間)完成的。
-
方法 C 這種方法提供了一種在 Kubernetes 租戶之間實現硬隔離的方法,這些租戶之間沒有信任。這通過在超級 Kubernetes 集羣上創建迷你虛擬集羣爲每個租戶提供隔離的主平面組件。管理員還可以在這些虛擬集羣中創建自定義資源。這是由 VirtualCluster 和 vCluster 等項目提供的能力 。
-
方法 D 與上述所有方法不同,這表明 Kubernetes 應該提供開箱即用的創建租戶的支持。它尚未開發,因爲需要修改 Kubernetes 源代碼。
各種解決方案的比較
Kubernetes 中多租戶的一些用例
-
SaaS 應用程序多租戶的實施可以使組織能夠集中管理其多個客戶的基礎設施。這使 SaaS 組織可以輕鬆管理在不同租戶之間共享的基礎架構。
-
更好的資源利用率由於多個團隊可以共享一個集羣,因此將需要更少的集羣,這將更有效地利用集羣資源。
結論
總而言之,多租戶是 Kubernetes 的一個重要方案,它不是開箱即用的,但可以通過各種策略實現。它可以擴展 Kubernetes 的可用性,有助於實現更好的資源利用率,可以節省計費成本,對於集羣管理員以高效的方式管理各種微服務也很重要。
原文:https://www.cncf.io/blog/2021/12/20/introduction-to-multi-tenancy-in-kubernetes/
參考
-
https://static.sched.com/hosted_files/kccnceu19/74/kubecon-eu-multitenancy-wg-deepdive.pdf
-
https://www.youtube.com/watch?v=SUW54Wlx6Po
-
https://github.com/kubernetes-sigs/hierarchical-namespaces
-
https://github.com/kubernetes-sigs/cluster-api-provider-nested/tree/main/virtualcluster
-
https://github.com/kubernetes-sigs/cluster-api-provider-nested/blob/main/virtualcluster/doc/vc-icdcs.pdf
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/YBxsZ5a_K6AWnOISTtiX3g