命名空间权限 命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。Kubernetes RBAC API定义了四种类型:Role、ClusterRole、RoleBinding与ClusterRoleBinding,这四种类型之间的关系和简要说明如下: Role 和ClusterRole :描述角色和权限的关系。在Kubernetes的RBAC API中,一个角色定义了一组特定权限的规则。命名空间范围内的角色由Role对象定义,而整个Kubernetes集群范围内有效的角色则通过ClusterRole对象实现。 RoleBinding 和ClusterRoleBinding :描述 subjects (包含users, groups, service accounts)和角色的关系。角色绑定将一个角色中定义的各种权限授予一个或者一组用户,则该用户或用户组则具有对应绑定的Role或ClusterRole定义的权限。 表RBAC API所定义的四种类型 类型名称 说明 Role Role对象只能用于授予对某一namespace中资源的访问权限。 ClusterRole ClusterRole对象可以授予整个集群范围内资源访问权限, 也可以对以下几种资源的授予访问权限: l 集群范围资源(例如节点,即node)。 l 非资源类型endpoint(例如”/healthz”)。 l 跨所有namespaces的范围资源(例如pod,需要运行命令kubectl get pods allnamespaces来查询集群中所有的pod)。 RoleBinding RoleBinding可以将同一namespace中的subject(用户)绑定到某个具有特定权限的Role下,则此subject即具有该Role定义的权限。 ClusterRoleBinding ClusterRoleBinding在整个集群级别和所有namespaces将特定的subject与ClusterRole绑定,授予权限。 CCE命名空间权限 CCE中的命名空间权限是基于Kubernetes RBAC能力的授权,通过权限设置可以让不同的用户或用户组拥有操作不同Kubernetes资源的权限。 CCE的kubernetes资源通过命名空间进行权限设置,目前包含clusteradmin 、admin 、edit 、view四种角色,详见下表。 用户/用户组角色说明 默认ClusterRole 描述 clusteradmin 允许超级用户在平台上的任何资源的所有操作。允许对集群中以及所有命名空间中的全部资源进行完全控制。 admin 允许管理员访问权限。允许对命名空间中大多数资源进行读/写操作,包含创建角色和角色绑定(RoleBinding)的能力。但不允许对资源配额或者命名空间本身进行写操作。 edit 允许对命名空间内的大多数对象进行读/写操作,不允许查看或修改角色(Roles)或者角色绑定(RoleBinding)。 view 允许对命名空间的大多数对象进行只读操作,但不允许查看角色(Roles)或者角色绑定(RoleBinding),不允许查看Secrets,因为这类操作属于越权。 注意: 除默认ClusterRole(clusteradmin、admin、edit、view)以外的其他角色为系统组件所使用的角色,请根据您的业务需要进行选择。 更多Kubernetes RBAC授权的内容可以参考Kubernetes RBAC官方文档。 CCE命名空间权限的增强 支持绑定IAM用户或用户组到Kubernetes的User和Group,以支持对应用户的IAM Token直接访问Kubernetes API并支持Kubernetes RBAC权限控制。 API curl H "Authorization:Bearer $token" k kubectl // 使用用户信息配置 kubeconfig 后即可正常使用 kubectl { "apiVersion": "v1", "clusters": [ { "cluster": { "server": " "insecureskiptlsverify": true }, "name": "myCluster" } ], "contexts": [ { "context": { "cluster": "myCluster", "user": "user" }, "name": "myContext" } ], "currentcontext": "myContext", "kind": "Config", "preferences": {}, "users": [ { "name": "user", "user": { "token": "$token" } } ] } 通过Console、APIGW访问Kubernetes API,CCE针对list namespace,permission进行了特殊处理,将支持获取当前子用户有权限的NameSpace列表,而非Kubernetes原生的403,提供更好的前端显示体验。