K8s 多租戶方案的挑戰與價值

在當今企業環境中,隨着業務的快速增長和多樣化,服務器和雲資源的管理會越來越讓人頭疼。K8s 雖然很強大,但在處理多個部門或團隊的業務部署需求時,如果缺乏有效的多租戶支持,在效率和資源管理方面都會不盡如人意。

本文將深入探討 K8s 多租戶的概念、其在現代企業中的應用價值,以及實現這一機制所面臨的技術挑戰和解決方案。

K8s 多租戶的價值

“多租戶”是一種軟件架構的設計方式,允許多個用戶(租戶)共享相同的系統或程序組件,同時保持各自數據的隔離性和安全性。在 K8s 環境中,實現有效的多租戶機制意味着能夠在同一 K8s 集羣中運行多個獨立的租戶工作負載,而無需擔心資源衝突、數據泄露或安全問題。

沒有多租戶支持的挑戰

當企業購買很多服務器並安裝 K8s 後,企業內部多個部門 (例如 20 個) 可能都需要在同一集羣上部署各自的業務應用。在沒有多租戶機制的情況下,這種集羣使用方式有很多弊端:

  1. 低效率:每個部門不能自主使用集羣,必須通過集羣管理員進行部署和管理。不僅減慢了部署進程,還可能造成排隊等待的情況,大大降低工作效率。

  2. 資源利用不充分:業務應用不能混合部署,需要對服務器資源進行劃分,最終可能會導致資源無法充分利用,造成浪費。

  3. 業務和資源管理混亂:在一個沒有租戶隔離的集羣中,各部門的業務相互干擾,難以管理。隨着時間的推移,集羣的管理和運維變得越來越複雜。

  4. 規模擴展受限:在一個單一租戶的環境下,集羣難以支持多樣化的業務需求,限制了企業的擴展能力。

多租戶架構的優勢

一旦有了多租戶能力,企業就可以真正意義上構建自己的雲環境,實現資源的最大化利用和高效管理:

  1. 資源管理有序:通過賬戶系統,每個部門可以自主管理其資源使用,無需擔心資源分配和使用上的混亂。

  2. 效率大幅提升:各部門可以獨立進行業務部署和更新,無需麻煩集羣管理員,極大提高了操作效率和業務的靈活性。

  3. 資源擴展靈活:集羣管理員只需關注整個集羣的資源狀況,而不是單個業務應用,資源按需分配和擴展會更加靈活和高效。

  4. 業務隔離保障穩定性:不同部門的業務應用在集羣中彼此隔離,避免了相互干擾,保障了業務的穩定運行。

K8s 多租戶的挑戰

在 K8s 環境中實現多租戶架構難度非常大,不是簡單使用命名空間的能力就能實現的,還涉及到非常多的技術挑戰。

挑戰 1:防止越權

在 K8s 多租戶環境中,限制每個用戶的權限是關鍵。當多個用戶共享一個集羣時,一個權限過高的用戶可能會對整個集羣構成致命威脅。例如,禁止用戶訪問服務器節點或執行節點級別的操作,如使用 kubectl get node 命令。此外,需要限制其他高風險操作,如啓用容器特權模式、共享主機文件系統、端口和網絡等。

爲了解決這些問題,Sealos 在其底層架構中採用了多種隔離手段。例如,使用 OpenEBS 進行存儲的塊級別隔離,Firecracker 以及 Cloud Hypervisor 用於計算運行時的隔離,以及通過 Cilium 實現網絡隔離。這些措施確保即使在共享環境中,每個租戶的操作也不會影響到其他租戶。

挑戰 2:用戶的概念、授權與命名空間綁定

K8s 本身不具備原生的用戶管理系統。因此,需要通過擴展功能來構建用戶概念,與第三方用戶系統對接,爲每個用戶生成獨立的 kubeconfig 認證文件或 token。此外,需要建立用戶與命名空間 (namespace) 之間的多對多關係,併爲用戶分配適當的權限。

Sealos 的設計允許管理員將用戶加入特定的命名空間,並對其角色進行管理,從而有效地控制權限。這樣管理員就可以細粒度地管理用戶權限,確保每個用戶只能訪問和修改他們被授權的資源。

挑戰 3:計量與配額管理

在多租戶環境中,合理地分配和監控資源使用是另一個重大挑戰。需要明確每個租戶使用了多少 CPU、內存、磁盤和網絡資源,並在資源使用超出配額時進行適當的處理。網絡計量尤其複雜,需要區分內外網流量,而且要追蹤到達特定容器的流量,並確定這些容器屬於哪個租戶。

Sealos 採用 eBPF 技術來監控網絡流量,並通過控制器將流量數據與租戶信息相關聯,存儲到數據庫中。這樣可以與計量計費系統對接,實現對資源使用的準確計費。對於計算和存儲資源的監控,Sealos 同樣採用了控制器來收集和管理這些信息。

Sealos 多租戶的挑戰

如果說上面的這些問題很難解決,那麼 Sealos 的場景是在上述難度上乘以了 10 倍,因爲 Sealos 選擇了在公網這個不可信的環境中解決多租戶問題,意味着給任意的開發者公開註冊,然後一起共享一個 K8s 集羣。

公網環境的不可信性和開放性使得實現多租戶變得尤爲複雜。在這種環境下,任何開發者都可以註冊並共享同一個 K8s 集羣,這就帶來了巨大的安全和穩定性挑戰。但是,如果能夠成功實現,其好處也是顯而易見的:

  1. 成本效益:用戶無需單獨搭建和維護完整的集羣,顯著降低了雲服務的使用成本。
  2. 資源優化:允許每個容器運行在更小的規模上,充分利用平臺的彈性和資源。
  3. 強隔離性:在公網環境中實現良好的多租戶隔離,可以確保更高的安全性和穩定性。

前途的光明的,但挑戰也是巨大的。

挑戰 1:網關限制

Sealos 目前擁有數萬註冊用戶,流量很大,我們幾乎已經打爆了市面上很多主流的開源網關。在這種情況下,一個用戶的更新可能導致所有其他用戶受到影響,因爲 Nginx 需要重新加載配置,這顯然是不能接受的。

還有某知名網關 (不便透露),控制器 CPU 很容易就被打爆。

還有某知名網關 (同樣不便透露),數量一多配置生效需要超過兩分鐘。不過我們已經和上游社區進行了反饋,應該很快會有改進。

挑戰 2:運行時隔離問題

Sealos 需要實現強隔離以保證多租戶環境的安全。然而,市面上的主流運行時環境並不能滿足 Sealos 的隔離需求。例如,Firecracker 無法提供對 GPU 的良好支持,這對於需要高性能計算的應用來說是一個比較嚴重的限制。

挑戰 3:存儲隔離問題

Sealos 需要確保不同租戶的數據彼此隔離,防止數據泄露或被其他租戶錯誤訪問。這就需要實現塊級別的存儲隔離,挑戰也很大。

挑戰 4:網絡計量和爭用管理

最後,網絡資源的計量和管理也是多租戶環境中的關鍵問題。Sealos 需要準確地計量每個用戶的網絡使用情況,並且在資源有限的情況下合理地分配網絡資源。當網絡資源產生爭用時,需要有機制來公平地解決這些爭用,確保所有用戶都能公平合理地使用網絡資源。

總結

多租戶成熟了才能算作是一朵真正的雲,才能把雲的威力發揮到九成以上。面對公網這一極其複雜和不可預測的環境,Sealos 不僅實現了多租戶的隔離和安全,還在保障高效運行的同時,降低了成本。且底層使用了非常多優雅的技術方案,徹底解決企業所有開發者共享一朵雲的需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章