0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes多租戶集群的概念和常見的應(yīng)用模式

jf_TEuU2tls ? 來源:浩道linux ? 2023-05-15 16:13 ? 次閱讀

解決多租戶集群的安全隔離問題對于企業(yè)上云而言至關(guān)重要。本文討論了 Kubernetes 多租戶集群的概念和常見的應(yīng)用模式、企業(yè)內(nèi)共享集群的業(yè)務(wù)場景以及 Kubernetes 現(xiàn)有的安全管理功能!

什么是多租戶集群

首先,我們討論一下“租戶”是什么。租戶的概念不僅是集群用戶,還包括構(gòu)成計算、網(wǎng)絡(luò)、存儲和其他資源的工作負(fù)載集。在多租戶集群中,對單個集群中不同租戶進行隔離,這樣惡意租戶就無法攻擊其他租戶,共享集群資源也能合理地分配給租戶。根據(jù)隔離的安全級別,可以將集群分為軟隔離(Soft Multi-tenancy)和硬隔離(Hard Multi-tenancy)。軟隔離適用于企業(yè)內(nèi)的多租戶集群,因為默認(rèn)情況下不會有惡意租戶。在這種情況下,軟隔離主要是保護內(nèi)部團隊之間的業(yè)務(wù)并防護可能的安全攻擊。硬隔離適用于那些提供對外服務(wù)的服務(wù)提供商。由于業(yè)務(wù)模式,不能保證不同租戶中業(yè)務(wù)用戶的安全背景,所以集群中的租戶和 Kubernetes 系統(tǒng)可能會相互攻擊,這時需要嚴(yán)格的隔離以確保安全性。下面會對不同的多租戶方案進行更詳細(xì)的描述。

c7032f80-f13b-11ed-90ce-dac502259ad0.png

多租戶使用場景

下面介紹兩種不同隔離要求的企業(yè)多租戶方案:

企業(yè)內(nèi)共享集群的多租戶

這種場景下,所有集群用戶都來自企業(yè),這也是許多 Kubernetes 集群客戶的使用場景。由于服務(wù)用戶的身份是可控的,因此這種業(yè)務(wù)模式的安全風(fēng)險也相對可控,畢竟老板可以直接開掉有問題的員工。根據(jù)企業(yè)內(nèi)部人員的結(jié)構(gòu),企業(yè)可以通過命名空間,按照邏輯對不同部門或團隊的資源進行隔離。另外,定義具有以下角色的業(yè)務(wù)人員:

集群管理員

具有集群管理功能,例如伸縮容、添加節(jié)點等

為租戶管理員創(chuàng)建并分配命名空間

管理各種策略,例如 RAM、RBAC、NetworkPolicy 以及 quota

租戶管理員

至少擁有集群 RAM 只讀權(quán)限

管理租戶中相關(guān)人員的 RBAC 配置

租戶用戶

在租戶命名空間允許范圍內(nèi)使用 Kubernetes 資源

除了用戶角色的訪問控制之外,我們還要確保命名空間之間的網(wǎng)絡(luò)隔離,不同命名空間之間只允許白名單內(nèi)的跨租戶應(yīng)用程序請求。

c71e7b46-f13b-11ed-90ce-dac502259ad0.png

SaaS 和 KaaS 服務(wù)模型中的多租戶

在 SaaS 多租戶場景中,Kubernetes 集群中的租戶是 SaaS 平臺和 SaaS 控制平面上的服務(wù)應(yīng)用程序?qū)嵗T谶@種場景下,平臺的服務(wù)應(yīng)用程序?qū)嵗譃椴煌拿臻g。服務(wù)的最終用戶無法與 Kubernetes 控制平面組件進行交互。這些最終用戶可以通過自定義的 SaaS 控制平面訪問和使用 SaaS 控制臺,使用服務(wù)或部署業(yè)務(wù),如下左圖所示。例如,假設(shè)博客平臺已部署并在多租戶集群上運行。在這種情況下,租戶是每個客戶的博客實例和平臺的控制平面。平臺控制平面和每個托管博客都在不同的命名空間中運行。

KaaS 多租戶方案通常與云服務(wù)提供商有關(guān)。在這種場景下,業(yè)務(wù)平臺的服務(wù)通過 Kubernetes 控制平面直接暴露給不同租戶的用戶。最終用戶可以使用服務(wù)提供商提供的 Kubernetes API 或其他擴展 API。為了滿足隔離要求,不同的租戶同樣需要使用命名空間按照邏輯對訪問進行隔離,同時確保不同租戶的網(wǎng)絡(luò)和資源配額的隔離。

與企業(yè)內(nèi)的共享集群相反,這里的最終用戶都來自非受信區(qū)域,所以可能會有在服務(wù)平臺上運行惡意代碼的惡意租戶。對此,SaaS 和 KaaS 服務(wù)模型中的多租戶集群需要更強的安全隔離。在這種場景下,Kubernetes 現(xiàn)有的原生功能還無法滿足安全要求,因此需要在運行時進行內(nèi)核級別的隔離來增強此業(yè)務(wù)場景中的租戶安全性。

c7454faa-f13b-11ed-90ce-dac502259ad0.png

實施多租戶架構(gòu)

在規(guī)劃和實施多租戶集群時,我們首先要通過資源隔離模型來使用 Kubernetes 的資源隔離層,該模型會將集群本身、命名空間、節(jié)點、Pod 和容器分別分層。當(dāng)不同租戶的應(yīng)用程序負(fù)載共享相同的資源模型時,就可能會產(chǎn)生安全風(fēng)險,因此,在實施多租戶時,要控制每個租戶可訪問的資源域。在資源調(diào)度層面,還要確保處理敏感信息的容器只能運行在獨立的資源節(jié)點上。當(dāng)不同租戶的負(fù)載共享同一資源域時,我們可以使用運行時的資源調(diào)度控制策略來降低跨租戶攻擊的風(fēng)險。

盡管 Kubernetes 現(xiàn)有安全性和調(diào)度功能不足以實現(xiàn)租戶之間的完全安全隔離,但是可以通過命名空間隔離租戶使用的資源域,并使用 RBAC、PodSecurityPolicy、NetworkPolicy 等策略模型來控制租戶的資源訪問范圍以及資源調(diào)度功能。這種方法具有可靠的安全隔離能力。

以下部分重點介紹基于 Kubernetes 原生安全功能的多租戶實踐。

訪問控制

NetworkPolicy

NetworkPolicy 控制不同租戶業(yè)務(wù) Pod 之間的網(wǎng)絡(luò)流量,并通過白名單進行跨租戶業(yè)務(wù)的訪問控制。

PodSecurityPolicy

PodSecurityPolicies(PSP)是 Kubernetes 中原生集群維度的資源模型,可以在創(chuàng)建 Pod 請求的準(zhǔn)入階段驗證該行為是否滿足相應(yīng) PSP 的要求,例如檢查 Pod 是否使用主機的網(wǎng)絡(luò)、文件系統(tǒng)、指定端口或 PID 命名空間。另外,它能限制租戶內(nèi)的用戶啟用特權(quán)容器,還會根據(jù)綁定的策略將相應(yīng)的 SecurityContext 添加到 Pod,包括容器運行時的 UID、GID 以及添加或刪除的內(nèi)核功能等設(shè)置。

OPA

Open Policy Agent(OPA)是一種功能強大的策略引擎,支持解耦的策略決策服務(wù)。目前,社區(qū)已經(jīng)有了成熟的 Kubernetes 集成解決方案。當(dāng)現(xiàn)有 RBAC 在命名空間級別上的隔離不能滿足企業(yè)應(yīng)用程序復(fù)雜的安全需求時,OPA 可以在對象模型級別提供細(xì)粒度的訪問策略控制。另外,OPA 還支持 7 層 NetworkPolicy 定義以及基于標(biāo)簽和注釋的跨命名空間訪問控制,可以有效增強 Kubernetes 原生的 NetworkPolicy。

資源調(diào)度

資源配額(ResourceQuota)和限制范圍(LimitRange)

在多租戶場景中,不同的團隊或部門會共享集群資源,這可能導(dǎo)致資源競爭問題,需要通過限制每個租戶的資源使用配額來解決。ResourceQuota 用于限制總資源請求,以及租戶對應(yīng)命名空間下所有 Pod 的資源。LimitRange 用于設(shè)置租戶的命名空間中 Pod 的默認(rèn)資源請求和限制值。另外,我們還可以限制租戶的存儲資源配額和對象數(shù)量配額。

Pod 優(yōu)先級(Priority)和搶占(Preemption)

從 Kubernetes 1.14 版本開始,Pod 優(yōu)先級和搶占功能已成為重要組成部分。容器優(yōu)先級表示調(diào)度隊列中處于 pending 狀態(tài)容器的優(yōu)先級。由于節(jié)點資源不足或其他原因而無法調(diào)度高優(yōu)先級的 Pod 時,調(diào)度程序會嘗試驅(qū)逐低優(yōu)先級的 Pod,來保證可以先調(diào)度、部署高優(yōu)先級的 Pod。在多租戶方案中,優(yōu)先級和搶占的設(shè)置可以用來保護租戶中重要業(yè)務(wù)應(yīng)用程序的可用性。此外,Pod 優(yōu)先級與 ResourceQuota 搭配使用可將租戶配額限制設(shè)為指定的優(yōu)先級。

專用節(jié)點(Dedicated Nodes)

注意:惡意租戶可能繞過節(jié)點 taint 和 tolerance 機制強制實施策略。以下內(nèi)容僅適用于企業(yè)內(nèi)受信任租戶的集群,或租戶無法直接訪問 Kubernetes 控制平面的集群。

通過為集群中的某些節(jié)點添加 taint,可以將這些節(jié)點提供給指定租戶專用。在多租戶場景中,當(dāng)集群中包含 GPU 節(jié)點時,可以使用 taint 為需要 GPU 資源的業(yè)務(wù)應(yīng)用程序服務(wù)團隊保留這些節(jié)點。集群管理員可以使用諸如 effect:“NoSchedule” 之類的標(biāo)簽向節(jié)點添加污點,這樣就只能調(diào)度具有相應(yīng) tolerance 設(shè)置的 Pod 到該節(jié)點。但是,惡意租戶會將相同的 tolerance 設(shè)置添加到 Pod 上來訪問此節(jié)點,因此,僅使用節(jié)點 taint 和 tolerance 機制無法確保目標(biāo)節(jié)點在非信任多租戶集群中的安全性。

保護敏感信息—REST 的 secret 加密

在多租戶集群中,不同的租戶用戶共享一套相同的 etcd 存儲。當(dāng)最終用戶訪問 Kubernetes 控制平面時,要保護好 secret 數(shù)據(jù),以避免訪問控制策略配置不正確時導(dǎo)致敏感信息泄漏。

總結(jié)

在部署多租戶體系架構(gòu)時,首先要確定相應(yīng)的應(yīng)用場景,包括租戶內(nèi)用戶和應(yīng)用程序的可信度和對應(yīng)的安全隔離程度。另外,為滿足基本的安全隔離要求,最好執(zhí)行以下幾點:

啟用 Kubernetes 集群默認(rèn)安全配置

啟用 RBAC,禁止匿名用戶訪問

啟用 secrets encryption,保護敏感信息

根據(jù) CIS Kubernetes 基準(zhǔn)執(zhí)行安全配置

啟用準(zhǔn)入控制器,例如 NodeRestriction、AlwaysPullImages 和 PodSecurityPolicy

使用 PSP 控制 Pod 部署的特權(quán)模式,并在 Pod 運行時控制 Pod 的安全上下文

配置 NetworkPolicy

Docker 運行時啟用 Seccomp、AppArmor 和 SELinux

對監(jiān)控、日志記錄等服務(wù)進行多租戶隔離

當(dāng)使用諸如 SaaS 和 KaaS 之類的服務(wù)模型時,或者無法保證租戶下用戶的可信度時,可以使用以下更強力的隔離措施:

使用 OPA DENG 動態(tài)策略引擎在網(wǎng)絡(luò)或?qū)ο蠹墑e進行細(xì)粒度的訪問控制

部署安全容器,在容器運行時進行內(nèi)核級隔離

對監(jiān)視、日志記錄、存儲和其他服務(wù)實施全面的多租戶隔離解決方案

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SaaS
    +關(guān)注

    關(guān)注

    1

    文章

    360

    瀏覽量

    36795
  • 安全隔離
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    6219
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    223

    瀏覽量

    8675

原文標(biāo)題:實踐難?本文解決 k8s 多租戶集群的安全隔離難題!

文章出處:【微信號:浩道linux,微信公眾號:浩道linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    阿里云上Kubernetes集群聯(lián)邦

    摘要: kubernetes集群讓您能夠方便的部署管理運維容器化的應(yīng)用。但是實際情況中經(jīng)常遇到的一些問題,就是單個集群通常無法跨單個云廠商的多個Region,更不用說支持跨跨域不同的云廠商。這樣會給
    發(fā)表于 03-12 17:10

    kubernetes集群配置

    基于v1104版本手動搭建高可用kubernetes 集群
    發(fā)表于 08-19 08:07

    Kubernetes 從懵圈到熟練:集群服務(wù)的三個要點和一種實現(xiàn)

    問題。Kubernetes 集群是 Google 多年來自動化運維實踐的結(jié)晶,這樣的實現(xiàn)顯然與其智能運維的哲學(xué)相背離的。自帶通信員邊車模式(Sidecar)是微服務(wù)領(lǐng)域的核心概念。邊車
    發(fā)表于 09-24 15:35

    kubernetes v112二進制方式集群部署

    kubernetes v112 二進制方式集群部署
    發(fā)表于 05-05 16:30

    copy模式的DRDS集群

    活解決方案。DRDS按照之前說的業(yè)務(wù)數(shù)據(jù)拆分的維度,阿里云DRDS有兩種集群分別支持買家維度與賣家維度:unit 模式的DRDS集群
    發(fā)表于 11-16 09:23

    請問鴻蒙系統(tǒng)上可以部署kubernetes集群嗎?

    鴻蒙系統(tǒng)上可以部署kubernetes集群
    發(fā)表于 06-08 11:16

    如何部署基于Mesos的Kubernetes集群

    的內(nèi)核。把Kubernetes運行在Mesos集群之上,可以和其他的框架共享集群資源,提高集群資源的利用率。 本文是Kubernetes和M
    發(fā)表于 10-09 18:04 ?0次下載
    如何部署基于Mesos的<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    淺談Kubernetes集群的高可用方案

    Kubernetes作為容器應(yīng)用的管理中心,通過對Pod的數(shù)量進行監(jiān)控,并且根據(jù)主機或容器失效的狀態(tài)將新的Pod調(diào)度到其他Node上,實現(xiàn)了應(yīng)用層的高可用性。針對Kubernetes集群,高可用性
    發(fā)表于 10-11 10:04 ?1次下載
    淺談<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>的高可用方案

    Kubernetes集群發(fā)生網(wǎng)絡(luò)異常時如何排查

    本文將引入一個思路:“在 Kubernetes 集群發(fā)生網(wǎng)絡(luò)異常時如何排查”。文章將引入 Kubernetes 集群中網(wǎng)絡(luò)排查的思路,包含網(wǎng)絡(luò)異常模型,常用工具,并且提出一些案例以供學(xué)
    的頭像 發(fā)表于 09-02 09:45 ?4614次閱讀

    Kubernetes 集群的功能

    Telepresence 是一個開源工具,可讓您在本地運行單個服務(wù),同時將該服務(wù)連接到遠(yuǎn)程 Kubernetes 集群
    的頭像 發(fā)表于 09-05 10:58 ?1014次閱讀

    Kubernetes集群內(nèi)服務(wù)通信機制介紹

    現(xiàn)在在 Kubernetes 集群中,我們擁有構(gòu)成集群管理組件和一組工作機器(稱為節(jié)點)的控制平面。這些節(jié)點托管 Pod,這些 Pod 將后端微服務(wù)作為容器化服務(wù)運行。
    發(fā)表于 10-04 10:13 ?525次閱讀

    Kubernetes集群的關(guān)閉與重啟

    在日常對 Kubernetes 集群運行維護的過程中,您可能需要臨時的關(guān)閉或者是重啟 Kubernetes 集群集群進行維護,本文將介紹如
    的頭像 發(fā)表于 11-07 09:50 ?9689次閱讀

    Kubernetes集群部署

    Kubeadm是一種Kubernetes集群部署工具,通過kubeadm init命令創(chuàng)建master節(jié)點,通過 kubeadm join命令把node節(jié)點加入到集群
    的頭像 發(fā)表于 02-15 10:35 ?1604次閱讀

    求一種SaaS模式租戶系統(tǒng)數(shù)據(jù)隔離實現(xiàn)方案

    開發(fā)過SaaS系統(tǒng)平臺的小伙伴一定對租戶這個概念不陌生,簡單來說一個租戶就是一個公司客戶,多個租戶共用同一個SaaS系統(tǒng),一旦SaaS系統(tǒng)
    的頭像 發(fā)表于 07-27 10:34 ?820次閱讀

    使用Velero備份Kubernetes集群

    Velero 是 heptio 團隊(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。
    的頭像 發(fā)表于 08-05 15:43 ?287次閱讀
    使用Velero備份<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>