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