命名空間權限是基于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定義的權限。
。
支持綁定IAM用戶或用戶組到Kubernetes的User和Group,以支持對應用戶的IAM Token直接訪問Kubernetes API并支持Kubernetes RBAC權限控制。
API
curl //{master-IP}:5443/api/v1/namespaces/default/pods -H "Authorization:Bearer $token" -k
kubectl
// 使用用戶信息配置 kubeconfig 后即可正常使用 kubectl
{
"apiVersion": "v1",
"clusters": [
{
"cluster": {
"server": "//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,提供更好的前端顯示體驗。