命名空间权限(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