隨著容器技術(shù)的快速發(fā)展,原有的分布式任務(wù)調(diào)度模式正在被基于Kubernetes的技術(shù)架構(gòu)所取代。云容器引擎( Cloud Container Engine ,簡稱CCE)是華為云推出的高度可擴展的、高性能的企業(yè)級Kubernetes集群,支持社區(qū)原生應(yīng)用和工具。借助云容器引擎,您可以在華為云上輕松部署、管理和擴展容器化應(yīng)用程序,快速高效的將微服務(wù)部署在云端。
為方便企業(yè)中的管理人員對集群中的資源權(quán)限進行管理,CCE后臺提供了多種維度的細粒度權(quán)限策略和管理方式。CCE的權(quán)限管理包括“集群權(quán)限”和“命名空間權(quán)限”兩種能力,分別從集群和命名空間兩個層面對用戶組或用戶進行細粒度授權(quán),具體解釋如下:
- 
集群權(quán)限:是基于 IAM 系統(tǒng)策略的授權(quán),可以讓用戶組擁有“集群管理”、“節(jié)點管理”、“節(jié)點池管理”、“模板市場”、“插件管理”權(quán)限。
 
- 命名空間權(quán)限:是基于Kubernetes RBAC能力的授權(quán),可以讓用戶或用戶組擁有Kubernetes資源的權(quán)限,如“工作負載”、“網(wǎng)絡(luò)管理”、“存儲管理”、“命名空間”等的權(quán)限。
 
基于IAM系統(tǒng)策略的“集群權(quán)限”與基于Kubernetes RBAC能力的“命名空間權(quán)限”,兩者是完全獨立的,互不影響,但要配合使用。同時,為用戶組設(shè)置的權(quán)限將作用于用戶組下的全部用戶。當給用戶或用戶組添加多個權(quán)限時,多個權(quán)限會同時生效(取并集)。
下面我們以一個公司為例進行介紹。
通常一個公司中有多個部門或項目,每個部門又有多個成員,所以在配置權(quán)限前需要先進行詳細設(shè)計,下圖為某公司某部門的組織架構(gòu)圖和相關(guān)人員的權(quán)限設(shè)計,我們將按照該設(shè)計對每個角色的權(quán)限設(shè)置進行演示:

主管:DAVID
用戶“DAVID”為該公司某部門的主管,根據(jù)權(quán)限設(shè)計我們需要為其配置CCE服務(wù)的所有權(quán)限(包括集群權(quán)限和命名空間權(quán)限),因此需要在 統(tǒng)一身份認證 服務(wù) IAM中單獨為DAVID創(chuàng)建用戶組“cce-admin”,并配置所有項目的權(quán)限:“CCE Administrator”,這樣主管DAVID的權(quán)限就配置好了。
溫馨提示:
- 
CCE Administrator:CCE的管理員權(quán)限,擁有該服務(wù)的所有權(quán)限,不需要再賦予其他權(quán)限。
 - 
CCE FullAccess、CCE ReadOnlyAccess:CCE的集群管理權(quán)限,僅針對與集群相關(guān)的資源(如集群、節(jié)點)有效,您必須確保同時配置了“命名空間權(quán)限”,才能有操作Kubernetes資源(如工作負載、Service等)的權(quán)限。
 

運維組長:JAMES
用戶“JAMES”為該部門的運維組長,需要設(shè)置所有項目的集群權(quán)限和所有命名空間的只讀權(quán)限。
我們需要在統(tǒng)一身份認證服務(wù) IAM中先為用戶“JAMES”單獨創(chuàng)建用戶組“cce-sre”并將其添加到用戶組“cce-sre”中,然后為用戶組“cce-sre”配置所有項目的集群權(quán)限:“CCE FullAccess”,用戶組“cce-sre”便擁有了所有項目的集群管理權(quán)限,接下來還需要為其設(shè)置命名空間的只讀權(quán)限。

由于所有組長和工程師均需要命名空間的只讀權(quán)限,因此用戶“JAMES”的命名空間權(quán)限我們將與其他開發(fā)人員一起添加。
為所有組長和工程師添加所有集群和命名空間的只讀權(quán)限
我們可以在統(tǒng)一身份認證服務(wù) IAM中再創(chuàng)建一個只讀用戶組“read_only”,然后將相關(guān)用戶都添加到此用戶組中。
- 
兩個開發(fā)工程師雖然他們不需要配置集群的管理權(quán)限,但也需要查看CCE控制臺,因此需要有集群的只讀權(quán)限才能滿足需求。
 - 
運維工程師需要北京四集群的管理權(quán)限,為方便管理,這里我們先為其賦予集群的只讀權(quán)限。
 - 
運維組長已經(jīng)擁有了所有集群的管理權(quán)限,為方便管理,我們也可以將其添加到“read_only”用戶組中,為其賦予集群的只讀權(quán)限。
 
如下圖,我們將JAMES、ROBERT、WILLIAM、LINDA、PETER五個用戶都添加到用戶組“read_only”中:

接下來為用戶組“read_only”賦予集群的只讀權(quán)限。

然后返回CCE控制臺,為這五個用戶所在的用戶組增加命名空間的只讀權(quán)限,單擊左側(cè)欄目樹中的“權(quán)限管理 > 命名空間權(quán)限”,為用戶組“read_only”逐個賦予所有集群的“view”權(quán)限。

設(shè)置完成后,運維組長“JAMES”就擁有了所有項目的集群管理權(quán)限和所有命名空間的只讀權(quán)限,而開發(fā)組長“ROBERT”、運維工程師“WILLIAM”以及兩位開發(fā)工程師“LINDA”和“PRTER”則擁有了所有集群和命名空間的只讀權(quán)限。
開發(fā)組長:ROBERT
用戶“ROBERT”作為開發(fā)組的組長,雖然在上一步中已經(jīng)為其設(shè)置了所有集群和命名空間的只讀權(quán)限,但顯然還不夠,還需要為其設(shè)置所有命名空間的管理權(quán)限。
因此需要再在CCE控制臺的“權(quán)限管理 > 命名空間權(quán)限”中單獨為其賦予所有集群下全部命名空間的管理員權(quán)限。

運維工程師:WILLIAM
運維工程師“WILLIAM”雖然也有了所有集群和命名空間的只讀權(quán)限,但還需要在統(tǒng)一身份認證服務(wù) IAM中為其設(shè)置北京四的集群管理權(quán)限,因此我們單獨為其創(chuàng)建一個用戶組“cce-sre-b4”,然后配置北京四項目的“CCE FullAccess”。

由于之前已經(jīng)為其設(shè)置過所有命名空間的只讀權(quán)限,所以運維工程師“WILLIAM”現(xiàn)在就擁有了北京四的集群管理權(quán)限和所有命名空間的只讀權(quán)限。
開發(fā)工程師:LINDA、PETER
“LINDA”和“PETER”是開發(fā)工程師,由于前面已經(jīng)在用戶組“read-only”中為兩位工程師配置了集群和命名空間的只讀權(quán)限,這里只需要在CCE控制臺的“權(quán)限管理 > 命名空間權(quán)限”中再另外配置相應(yīng)命名空間的編輯權(quán)限即可。

至此,該部門的所有權(quán)限就設(shè)置完成了,你看明白了嗎?
小問題:
1、能否只配置命名空間權(quán)限,不配置集群管理權(quán)限?
答:由于界面權(quán)限是由IAM系統(tǒng)策略進行判斷,所以,如果未配置集群管理權(quán)限,就沒有打開界面的權(quán)限。
2、那不配置集群管理權(quán)限的情況下,是否可以使用API呢?
答:答案也是否定的,因為API都需要進行IAM的token認證。
3、那不配置集群管理權(quán)限時,是否可以使用kubectl命令呢?
答:答案是肯定的。但前提是要先從界面上下載kubectl配置文件。所以,如果先配置了集群權(quán)限,然后再界面下載認證文件。后面再刪除集群管理權(quán)限(保留命名空間權(quán)限),依然可以使用kubectl來操作k8s集群。