Kubernetes 多租戶(hù)集群的實(shí)踐
解決多租戶(hù)集群的安全隔離問(wèn)題對(duì)于企業(yè)上云而言至關(guān)重要。本文討論了 Kubernetes 多租戶(hù)集群的概念和常見(jiàn)的應(yīng)用模式、企業(yè)內(nèi)共享集群的業(yè)務(wù)場(chǎng)景以及 Kubernetes 現(xiàn)有的安全管理功能。
什么是多租戶(hù)集群
首先,我們討論一下“租戶(hù)”是什么。租戶(hù)的概念不僅是集群用戶(hù),還包括構(gòu)成計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)和其他資源的工作負(fù)載集。在多租戶(hù)集群中,對(duì)單個(gè)集群中不同租戶(hù)進(jìn)行隔離,這樣惡意租戶(hù)就無(wú)法攻擊其他租戶(hù),共享集群資源也能合理地分配給租戶(hù)。

多租戶(hù)應(yīng)用場(chǎng)景
下面介紹兩種不同隔離要求的企業(yè)多租戶(hù)方案:
這種場(chǎng)景下,所有集群用戶(hù)都來(lái)自企業(yè),這也是許多 Kubernetes 集群客戶(hù)的使用場(chǎng)景。由于服務(wù)用戶(hù)的身份是可控的,因此這種業(yè)務(wù)模式的安全風(fēng)險(xiǎn)也相對(duì)可控,畢竟老板可以直接開(kāi)掉有問(wèn)題的員工。根據(jù)企業(yè)內(nèi)部人員的結(jié)構(gòu),企業(yè)可以通過(guò)命名空間,按照邏輯對(duì)不同部門(mén)或團(tuán)隊(duì)的資源進(jìn)行隔離。另外,定義具有以下角色的業(yè)務(wù)人員:
集群管理員 具有集群管理功能,例如伸縮容、添加節(jié)點(diǎn)等 為租戶(hù)管理員創(chuàng)建并分配命名空間
管理各種策略,例如 RAM、RBAC、NetworkPolicy 以及 quota
租戶(hù)管理員
至少擁有集群 RAM 只讀權(quán)限
管理租戶(hù)中相關(guān)人員的 RBAC 配置
租戶(hù)用戶(hù)
在租戶(hù)命名空間允許范圍內(nèi)使用 Kubernetes 資源


實(shí)施多租戶(hù)架構(gòu)
在規(guī)劃和實(shí)施多租戶(hù)集群時(shí),我們首先要通過(guò)資源隔離模型來(lái)使用 Kubernetes 的資源隔離層,該模型會(huì)將集群本身、命名空間、節(jié)點(diǎn)、Pod 和容器分別分層。當(dāng)不同租戶(hù)的應(yīng)用程序負(fù)載共享相同的資源模型時(shí),就可能會(huì)產(chǎn)生安全風(fēng)險(xiǎn),因此,在實(shí)施多租戶(hù)時(shí),要控制每個(gè)租戶(hù)可訪(fǎng)問(wèn)的資源域。在資源調(diào)度層面,還要確保處理敏感信息的容器只能運(yùn)行在獨(dú)立的資源節(jié)點(diǎn)上。當(dāng)不同租戶(hù)的負(fù)載共享同一資源域時(shí),我們可以使用運(yùn)行時(shí)的資源調(diào)度控制策略來(lái)降低跨租戶(hù)攻擊的風(fēng)險(xiǎn)。
訪(fǎng)問(wèn)控制
NetworkPolicy
Open Policy Agent(OPA)是一種功能強(qiáng)大的策略引擎,支持解耦的策略決策服務(wù)。目前,社區(qū)已經(jīng)有了成熟的 Kubernetes 集成解決方案。當(dāng)現(xiàn)有 RBAC 在命名空間級(jí)別上的隔離不能滿(mǎn)足企業(yè)應(yīng)用程序復(fù)雜的安全需求時(shí),OPA 可以在對(duì)象模型級(jí)別提供細(xì)粒度的訪(fǎng)問(wèn)策略控制。另外,OPA 還支持 7 層 NetworkPolicy 定義以及基于標(biāo)簽和注釋的跨命名空間訪(fǎng)問(wèn)控制,可以有效增強(qiáng) Kubernetes 原生的 NetworkPolicy。
資源調(diào)度
資源配額(ResourceQuota)和限制范圍(LimitRange)
注意:惡意租戶(hù)可能繞過(guò)節(jié)點(diǎn) taint 和 tolerance 機(jī)制強(qiáng)制實(shí)施策略。以下內(nèi)容僅適用于企業(yè)內(nèi)受信任租戶(hù)的集群,或租戶(hù)無(wú)法直接訪(fǎng)問(wèn) Kubernetes 控制平面的集群。
但是,惡意租戶(hù)會(huì)將相同的 tolerance 設(shè)置添加到 Pod 上來(lái)訪(fǎng)問(wèn)此節(jié)點(diǎn),因此,僅使用節(jié)點(diǎn) taint 和 tolerance 機(jī)制無(wú)法確保目標(biāo)節(jié)點(diǎn)在非信任多租戶(hù)集群中的安全性。
保護(hù)敏感信息—REST 的 secret 加密
在多租戶(hù)集群中,不同的租戶(hù)用戶(hù)共享一套相同的 etcd 存儲(chǔ)。當(dāng)最終用戶(hù)訪(fǎng)問(wèn) Kubernetes 控制平面時(shí),要保護(hù)好 secret 數(shù)據(jù),以避免訪(fǎng)問(wèn)控制策略配置不正確時(shí)導(dǎo)致敏感信息泄漏。
總結(jié)
在部署多租戶(hù)體系架構(gòu)時(shí),首先要確定相應(yīng)的應(yīng)用場(chǎng)景,包括租戶(hù)內(nèi)用戶(hù)和應(yīng)用程序的可信度和對(duì)應(yīng)的安全隔離程度。另外,為滿(mǎn)足基本的安全隔離要求,最好執(zhí)行以下幾點(diǎn):
啟用 Kubernetes 集群默認(rèn)安全配置 啟用 RBAC,禁止匿名用戶(hù)訪(fǎng)問(wèn) 啟用 secrets encryption,保護(hù)敏感信息 根據(jù) CIS Kubernetes 基準(zhǔn)執(zhí)行安全配置 啟用準(zhǔn)入控制器,例如 NodeRestriction、AlwaysPullImages 和 PodSecurityPolicy 使用 PSP 控制 Pod 部署的特權(quán)模式,并在 Pod 運(yùn)行時(shí)控制 Pod 的安全上下文 配置 NetworkPolicy Docker 運(yùn)行時(shí)啟用 Seccomp、AppArmor 和 SELinux 對(duì)監(jiān)控、日志記錄等服務(wù)進(jìn)行多租戶(hù)隔離
使用 OPA DENG 動(dòng)態(tài)策略引擎在網(wǎng)絡(luò)或?qū)ο蠹?jí)別進(jìn)行細(xì)粒度的訪(fǎng)問(wèn)控制 部署安全容器,在容器運(yùn)行時(shí)進(jìn)行內(nèi)核級(jí)隔離 對(duì)監(jiān)視、日志記錄、存儲(chǔ)和其他服務(wù)實(shí)施全面的多租戶(hù)隔離解決方案
https://medium.com/@Alibaba_Cloud/practices-of-kubernetes-multi-tenant-clusters-bde2b33fbd91
K8S 進(jìn)階訓(xùn)練營(yíng)
點(diǎn)擊屏末 | 閱讀原文 | 即刻學(xué)習(xí)

掃描二維碼獲取
更多云原生知識(shí)
k8s 技術(shù)圈

