命名空間權限(kubernetes RBAC授權)
命名空間權限是基于Kubernetes RBAC能力的授權,通過權限設置可以讓不同的用戶或用戶組擁有操作不同Kubernetes資源的權限。Kubernetes RBAC API定義了四種類型:Role、ClusterRole、RoleBinding與ClusterRoleBinding,這四種類型之間的關系和簡要說明如下:
- Role:角色,其實是定義一組對Kubernetes資源(命名空間級別)的訪問規則。
- RoleBinding:角色綁定,定義了用戶和角色的關系。
- ClusterRole:集群角色,其實是定義一組對Kubernetes資源(集群級別,包含全部命名空間)的訪問規則。
- ClusterRoleBinding:集群角色綁定,定義了用戶和集群角色的關系。
Role和ClusterRole指定了可以對哪些資源做哪些動作,RoleBinding和ClusterRoleBinding將角色綁定到特定的用戶、用戶組或ServiceAccount上。如下圖所示。
圖 角色綁定

在CCE控制臺可以授予用戶或用戶組命名空間權限,可以對某一個命名空間或全部命名空間授權,CCE控制臺默認提供如下ClusterRole。
- view(只讀權限):對全部或所選命名空間下大多數資源的只讀權限。
- edit(開發權限):對全部或所選命名空間下多數資源的讀寫權限。當配置在全部命名空間時能力與運維權限一致。
- admin(運維權限):對全部命名空間下大多數資源的讀寫權限,對節點、存儲卷,命名空間和配額管理的只讀權限。
- cluster-admin(管理員權限):對全部命名空間下所有資源的讀寫權限。
集群權限(IAM授權)與命名空間權限(Kubernetes RBAC授權)的關系
擁有不同集群權限(IAM授權)的用戶,其擁有的命名空間權限(Kubernetes RBAC授權)不同。下表給出了不同用戶擁有的命名空間權限詳情。
表 不同用戶擁有的命名空間權限
| 用戶類型 | 1.13及以上版本的集群 |
|---|---|
| 擁有Tenant Administrator權限的用戶(例如賬號) | 全部命名空間權限 |
| 擁有CCE Administrator權限的IAM用戶 | 全部命名空間權限 |
| 擁有CCE FullAccess或者CCE ReadOnlyAccess權限的IAM用戶 | 按Kubernetes RBAC授權 |
| 擁有Tenant Guest權限的IAM用戶 | 按Kubernetes RBAC授權 |
注意事項
- Kubernetes RBAC的授權能力支持1.11.7-r2及以上版本集群。若需使用RBAC功能請將集群升級至1.11.7-r2或以上版本。
- 任何用戶創建1.11.7-r2或以上版本集群后,CCE會自動為該用戶添加該集群的所有命名空間的cluster-admin權限,也就是說該用戶允許對集群以及所有命名空間中的全部資源進行完全控制。
- 擁有Security Administrator(IAM除切換角色外所有權限)權限的用戶(如賬號所在的admin用戶組默認擁有此權限),才能在CCE控制臺命名空間權限頁面進行授權操作。
配置命名空間權限(控制臺)
CCE中的命名空間權限是基于Kubernetes RBAC能力的授權,通過權限設置可以讓不同的用戶或用戶組擁有操作不同Kubernetes資源的權限。
步驟 1 登錄CCE控制臺,在左側導航欄中選擇“權限管理”。
步驟 2 在右邊下拉列表中選擇要添加權限的集群。
步驟 3 在右上角單擊“添加權限”,進入添加授權頁面。
步驟 4 在添加權限頁面,確認集群名稱,選擇該集群下要授權使用的命名空間,例如選擇“全部命名空間”,選擇要授權的用戶或用戶組,再選擇具體權限。
說明
對于沒有IAM權限的用戶,給其他用戶和用戶組配置權限時,無法選擇用戶和用戶組,此時支持填寫用戶ID或用戶組ID進行配置。
圖 配置命名空間權限

其中自定義權限可以根據需要自定義,選擇自定義權限后,在自定義權限一行右側單擊新建自定義權限,在彈出的窗口中填寫名稱并選擇規則。創建完成后,在添加權限的自定義權限下拉框中可以選擇。
圖 自定義權限

步驟 4 單擊“確定”。
示例:授予集群全部權限(cluster-admin)
集群全部權限可以使用cluster-admin權限,cluster-admin包含集群級別資源(PV、StorageClass等)的權限。
圖 授予集群全部權限(cluster-admin)

如果使用kubectl查看可以看到創建了一個ClusterRoleBinding,將cluster-admin和cce-role-group這個用戶組綁定了起來。
# kubectl get clusterrolebinding
NAME ROLE AGE
clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 ClusterRole/cluster-admin 61s
# kubectl get clusterrolebinding clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7 -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
CCE.com/IAM: "true"
creationTimestamp: "2021-06-23T09:15:22Z"
name: clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7
resourceVersion: "36659058"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/clusterrole_cluster-admin_group0c96fad22880f32a3f84c009862af6f7
uid: d6cd43e9-b4ca-4b56-bc52-e36346fc1320
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: 0c96fad22880f32a3f84c009862af6f7
使用被授予用戶連接用戶連接集群,如果能正常查詢PV、StorageClass的信息,則說明權限配置正常。
# kubectl get pv
No resources found
# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-disk everest-csi-provisioner Delete Immediate true 75d
csi-disk-topology everest-csi-provisioner Delete WaitForFirstConsumer true 75d
csi-nas everest-csi-provisioner Delete Immediate true 75d
csi-obs everest-csi-provisioner Delete Immediate false 75d
csi-sfsturbo everest-csi-provisioner Delete Immediate true 75d