摘要
隨著容器技術(shù)的火熱,不能免俗,我們也嘗試引入容器技術(shù)搭建私有容器云平臺,然后在容器云的基礎(chǔ)上逐步實現(xiàn)公司的PaaS平臺,以提供給各團隊?wèi)?yīng)用托管、應(yīng)用開發(fā)、應(yīng)用運維的能力,同時希望實現(xiàn)開發(fā)測試環(huán)境一致性,實現(xiàn)互聯(lián)網(wǎng)應(yīng)用或類互聯(lián)網(wǎng)應(yīng)用的彈性伸縮,實現(xiàn)手機應(yīng)用的灰度發(fā)布,實現(xiàn)持續(xù)集成持續(xù)交付的敏捷流程,實現(xiàn)運維自動化等能力。
我們前后接觸了10多家容器云廠商,從交流過程中,隨著理解的深入,也發(fā)現(xiàn)基本上所有的廠商都是基于開源社區(qū)版本的功能,很少有自己的想法,難以滿足我們的需求,特別是多租戶的設(shè)計,基本上都是開發(fā)人員一廂情愿的想法,沒有理解多租戶功能。所以這里我們就拋磚引玉討論下如何看待多租戶及多租戶權(quán)限訪問控制的設(shè)計實現(xiàn)。
容器云多租戶
多租戶,顧名思義,就是很多人來租用容器云平臺的資源來實現(xiàn)自己的應(yīng)用托管運維需求。那么資源管理與分配就是我們首先需要面對的問題。那么容器云中什么是資源?資源該由誰來管理?如何分配?誰來運維這些資源?誰來使用這些資源? 是不是一個admin就可以眉毛胡子一把抓,干所有事情?
資源概念很廣,對于容器云平臺來說,租戶是不是一種資源?當(dāng)然是。但這里我們討論的只是容器云平臺提供的基礎(chǔ)資源:計算資源、存儲資源、網(wǎng)絡(luò)資源。
有了資源,那么誰來管理運維分配使用這些資源?目前幾乎所有的容器廠商都是由一個容器平臺管理員來做所有的事情,這很不合理!
多租戶很重要的一點是資源隔離,安全。即便是私有云,也需要考慮相應(yīng)的安全和業(yè)務(wù)隔離需求,特別做一個產(chǎn)品時。
從多租戶的角度考慮,租戶租用容器云平臺的資源來托管、開發(fā)、部署運維自己的應(yīng)用、服務(wù)。容器云平臺需要提供、維護保障租戶能正常使用這些資源,同時給租戶托管的應(yīng)用提供服務(wù)注冊、服務(wù)發(fā)現(xiàn)、服務(wù)配置、日志、監(jiān)控、預(yù)警告警、彈性伸縮、負載均衡、安全等能力。我們要明白的是租戶只是租用這些能力,他并不運維這些能力。租戶關(guān)注的是其托管的應(yīng)用和服務(wù),他需要做的是利用平臺提供的這些能力來無縫的運維他們的應(yīng)用和服務(wù)。
到此,我們就理解清楚了上面的幾個問題。租戶只是使用/租用資源;容器云平臺管理運維這些資源。租戶側(cè)重于對自由的應(yīng)用或服務(wù)進行運維。資源由租戶申請,容器云平臺來分配管理資源。
我們再來討論下容器云中多租戶的可能的案例需求:
多租戶可能需求
- 案例需求一
不同組織架構(gòu)支持。租戶可能是一個公司、一個部門、一個團隊、一個項目組或者簡單一個人等。一個公司可能有不同的部門,一個部門有子部門,一個團隊可能有多個項目組,一個人可能屬于不同的團隊不同的項目組……有點頭大,是不是?多租戶中需要支持不同的組織架構(gòu)形式,并且這個組織架構(gòu)是租戶自己定義管理的。
圖表 1需要支持的租戶的不同組織架構(gòu)需求
- 案例需求二
權(quán)限定義。容器云為租戶提供不同的功能,不同功能組件可能面臨著不同權(quán)限定義的問題。對于租戶來說,可以完全控制其下的賬戶管理,賬戶管理可能有增刪改查等權(quán)限;但對資源,只能申請、使用分配到的資源,或者再分配資源給其他用戶或角色。而對租戶自己的應(yīng)用可能有查詢、部署、運維(配置更新停止啟動等)、刪除等權(quán)限。
圖表 2不同功能不同權(quán)限定義需求
- 案例需求三
角色定義、授權(quán)。對于部署的應(yīng)用A, 可能的需求是分配一個用戶UserA僅 有應(yīng)用A運維的角色,用戶UserA只有運維應(yīng)用A的權(quán)限。當(dāng)然用戶UserA需要有從鏡像倉庫更新對應(yīng)的應(yīng)用鏡像的權(quán)限,需要有在日志中心查詢應(yīng)用A的日志的權(quán)限,在監(jiān)控告警中心配置應(yīng)用A監(jiān)控告警規(guī)則的權(quán)限等。當(dāng)然也可以不賦予用戶A此權(quán)限。
圖表 3角色定義,授權(quán)
- 案例需求四
多租戶用戶登錄。前面提到不同租戶下可能有同名用戶或同賬號用戶。同一用戶/同一賬號也可能屬于不同的租戶,那么登錄的時候如何通過租戶賬號來區(qū)分?
- 案例需求五
對應(yīng)用不同資源需求的支持。租戶開發(fā)的應(yīng)用可能需要不同的資源類型來支撐,比如某應(yīng)用B需要內(nèi)存優(yōu)化的資源,某應(yīng)用C需要IO優(yōu)化和高CPU計算的資源,應(yīng)用D可能只通用資源就可以,應(yīng)用E需要GPU資源,等等。這就需要根據(jù)不同的應(yīng)用需求,提供不同的資源支撐。
- 案例需求六
充分利用現(xiàn)有資源。我們知道容器不占用很多資源,那么為充分有效利用可用的資源,公司內(nèi)可能有虛擬化資源,也可能有一些淘汰的物理機。是不是可以利用起來部署容器?這些設(shè)備配置各異,即便是新購買主機,不同批次配置也可能不一樣,這些資源如何能更好的管理和使用?
- 案例需求七
都把容器列到菜單最顯著位置,生怕沒人知道他們采用了容器技術(shù)。但對于租戶來說關(guān)心的重點應(yīng)該是應(yīng)用,用不用容器,用什么容器,應(yīng)用部署在哪臺主機哪個集群都應(yīng)該是透明的,都不重要。只要保證資源有效可用,在資源異常情況下能順利實現(xiàn)應(yīng)用遷移即可。
回到應(yīng)用。這里的應(yīng)用我們指業(yè)務(wù)應(yīng)用。一個業(yè)務(wù)應(yīng)用可以看作是一個系統(tǒng),也可以是系統(tǒng)的一個模塊,或者組件。一個業(yè)務(wù)應(yīng)用可能由多個服務(wù)組成,這里就涉及到了服務(wù)的編排。每個服務(wù)可能需要部署一到多個服務(wù)實例,每個服務(wù)實例運行在Pods或容器中。Pods或容器和主機、存儲、網(wǎng)絡(luò)等資源相關(guān),主機上有CPU、Memory等資源。我們希望我們運維一個應(yīng)用時,不同層次的對象可以有效平滑的關(guān)聯(lián)起來,就像一個人,有骨架,有血肉,是一個整體。而不是點這里一下,再點那里一下,跳來跳去。
圖表 4應(yīng)用管理
- 案例需求八
同時業(yè)務(wù)服務(wù)涉及到鏡像倉庫、服務(wù)的注冊發(fā)現(xiàn)、服務(wù)配置、服務(wù)部署策略、服務(wù)運行監(jiān)控、服務(wù)彈性伸縮、服務(wù)負載均衡、異常遷移、自動恢復(fù)等。每個租戶登錄時可能只希望看到鏡像倉庫、日志、監(jiān)控告警、配置等中自己相關(guān)的信息,不希望其他租戶看到自己的信息。
- 案例需求九
多租戶還有重要的一點就是安全和資源隔離。租戶用戶不需要連接登錄遠程容器云資源主機或容器引擎。我們說了,容器資源由容器平臺來運維,租戶只是使用資源。不管私有云或公有云,理念要一致,不能隨意而為。否則安全就無法保證。
基于上面提到的需求,我們看下怎么實現(xiàn)?雌饋硗(fù)雜,其實也很簡單。只有想不到,沒有做不到。
多租戶和權(quán)限中心實現(xiàn)
從目前國內(nèi)各廠商的實現(xiàn)來看,沒有能滿足以上需求的, 也沒有廠商認真考慮上面的問題。
多租戶設(shè)計,需要考慮到租戶的權(quán)限訪問控制,這涉及到容器云平臺整體的權(quán)限控制架構(gòu),所以這里我們提出了一個權(quán)限中心的概念,實現(xiàn)一個權(quán)限中心,由權(quán)限中心來實現(xiàn)對容器云各組件及各功能的動態(tài)控制,以適應(yīng)靈活的不同的場景需求?
一、 組織結(jié)構(gòu)的實現(xiàn)可采用類似論壇的層次結(jié)構(gòu)方法,無論多少層多少級,只標(biāo)注其父結(jié)點ID,樹型結(jié)構(gòu)遍歷可以獲得所有的結(jié)點。這也是我們下面權(quán)限訪問控制實現(xiàn)的基礎(chǔ)。
二、由于每項功能可以提供不同的操作,所以定義權(quán)限時很難用統(tǒng)一的權(quán)限名稱來定義,這里可以借助Oracle數(shù)據(jù)庫的權(quán)限定義,比如應(yīng)用管理,有部署、查看、運維、刪除等權(quán)限;租戶資源管理,有申請、使用、再分配等權(quán)限。
三、角色定義,就需要基于用戶及用戶組織結(jié)構(gòu),權(quán)限和容器云提供給租戶的功能列表來實現(xiàn)?梢圆捎肙racle 數(shù)據(jù)庫的用戶角色權(quán)限定義方式來定義。容器云平臺初始化時可以預(yù)定義角色,比如租戶管理員角色、應(yīng)用管理員角色等。
四、用戶登錄我們借用Windows domain的概念,一個租戶就是一個domain。租戶賬號就是domain name。 登錄時指定domainName\useraccount的方式登錄。根據(jù)定義的角色權(quán)限展示不同用戶視圖。以租戶賬號登錄時,可以不用指定domain登錄。 租戶/用戶賬號是有效的Email Address。租戶賬號是超級用戶賬號。
五、資源管理需要容器云平臺來支撐,簡單的方式是通過標(biāo)簽來進行資源分類。 一方面可以方便的充分有效的利用公司內(nèi)資源,另一方面也有針對性的對應(yīng)用不同資源需求提供支持。再者也可以簡單實現(xiàn)資源隔離。
這樣組織結(jié)構(gòu)可支持不同的需求變化,每用戶(人員)有從屬于租戶(domain)下的自己的賬號。租戶可定義不同的角色,角色賦予用戶,用戶可有多種角色、角色權(quán)限可繼承。用戶使用資源重點關(guān)注應(yīng)用的運維。
之所以把權(quán)限訪問控制提取出來實現(xiàn)一個統(tǒng)一的權(quán)限中心組件,是因為整個容器云平臺,各個組件都面臨著權(quán)限訪問控制需求。從云計算的理念來說,松耦合,插件式的組件或模塊設(shè)計更靈活和適用快速變化的需求。對一個客戶來說,一個組件可能需要也可能不需要,每個組件都可以以插拔的方式來控制,根據(jù)客戶需求來部署相應(yīng)的組件,實現(xiàn)相應(yīng)的權(quán)限訪問控制,將會更靈活和便利。