RBAC角色访问控制
RBAC角色訪問控制
- user(用戶)
- ServiceAccount(服務賬戶)
- 創建ServiceAccount(服務賬戶)
- 刪除ServiceAccount(服務賬戶)
- role(角色--管理指定資源的用戶)
- 創建role(角色)
- 創建RoleBinding(綁定角色)
- 刪除RoleBinding
- ClusterRole(集群角色)
- 創建ClusterRole(集群角色)
- 創建clusterrolebinding(綁定集群角色)
- 刪除clusterrolebinding
- 查看RBAC權限常用命令
- 測試服務賬戶權限
- CKA考試RBAC授權題
參考: https://www.toutiao.com/i6942467217019666952/?wid=1643459986078
user(用戶)
user不能直接創建
ServiceAccount(服務賬戶)
參考: https://kubernetes.io/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens
ServiceAccount用的Secret類型是kubernetes.io/service-account-token
ServiceAccount創建完成,其對應的Secret信息由kube-controller-manager更新
ServiceAccount可以簡寫為sa
|--- Role --- RoleBinding #只在指定namespace中生效 ServiceAccount ---||--- ClusterRole --- ClusterRoleBinding #不受namespace限制,在整個K8s集群中生效創建ServiceAccount(服務賬戶)
參考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#一些命令行工具
https://blog.csdn.net/wangmiaoyan/article/details/102551390
https://www.cnblogs.com/zhaobowen/p/13562487.html#一生成賬號
# 在命名空間app-team1中創建服務賬戶cicd-token kubectl create sa cicd-token -n app-team1# 查看服務賬戶是否創建 kubectl get sa cicd-token -n app-team1 # 查看服務賬戶詳情 kubectl describe sa cicd-token -n app-team1刪除ServiceAccount(服務賬戶)
# 查看命名空間app-team1下的所有用戶 kubectl get sa -n app-team1 # 命名空間app-team1下的cicd-token用戶 kubectl delete sa cicd-token -n app-team1role(角色–管理指定資源的用戶)
對哪個指定的資源(作用域是命名空間)執行哪些權限,不能添加拒絕權限;
創建role作用域只限于這個指定的資源對象.
例如:
- 創建的服務賬戶只能操作指定的namespace
- 創建的服務賬戶只能操作指定的pod
- 創建的服務賬戶只能操作指定的deployment
- 等等----可以精準的授權
創建role(角色)
參考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#kubectl-create-role
# 創建名稱為 "pod-reader" 的 Role 對象,允許用戶對 Pods 執行 get、watch 和 list 操作 kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods創建RoleBinding(綁定角色)
https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding
將服務賬戶綁定到role(角色)(要指定命名空間),讓服務賬戶擁有role(角色)的權限。
也將服務賬戶綁定到clusterrole,(權限作用域只限于服務賬戶的命名空間),一般用來配置命名空間管理員權限;
角色綁定(Role Binding)是將角色中定義的權限賦予一個或者一組用戶。一個 RoleBinding 可以引用同一的名字空間中的任何 Role。
# 將集群角色綁定到服務賬戶 ## {binding_NAME}=用戶名-集群角色名-binding kubectl create rolebinding {binding_NAME} -- clusterrole={集群角色名} --serviceaccount={命名空間名}:{用戶名} -n {命名空間名}# 在命名空間app-team1中,將ClusterRole(集群角色)deployment-clusterrole綁定到服務賬戶cicd-token kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1刪除RoleBinding
# 查看命名空間app-team1下有哪些rolebinding kubectl get rolebinding -n app-team1# 刪除命名空間app-team1下名為cicd-token-deployment-clusterrole-binding的rolebinding kubectl delete rolebinding cicd-token-deployment-clusterrole-binding -n app-team1ClusterRole(集群角色)
ClusterRole的作用域是個整個集群下.
例如:
- 創建的服務賬戶只能查看該集群的信息
- 創建的服務賬戶可以修改該集群的信息
- 等等----可以非常精準的授權
創建ClusterRole(集群角色)
ClusterRole 有若干用法。你可以用它來:
- 定義對某命名空間域對象的訪問權限,并將在各個命名空間內完成授權;
- 為命名空間作用域的對象設置訪問權限,并跨所有命名空間執行授權;
- 為集群作用域的資源定義訪問權限。
創建clusterrolebinding(綁定集群角色)
# 將服務賬戶綁定到集群角色 ### {clusterrolebinding_NAME}=服務賬戶名-集群角色名-binding kubectl create clusterrolebinding {binding_NAME} --clusterrole=集群角色名--serviceaccount=kube-system:用戶名# 將服務賬戶tiller綁定到集群管理員cluster-admin角色 kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller刪除clusterrolebinding
# 查看集群中有哪些clusterrolebinding kubectl get clusterrolebinding |grep {clusterrolebinding_NAME}# 刪除指定clusterrolebinding kubectl delete clusterrolebinding {clusterrolebinding_NAME}查看RBAC權限常用命令
參考: https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B
# 查看服務賬戶 kubectl get sa 用戶名# 查看服務賬戶詳情 kubectl describe sa 用戶名# 查看集群角色 kubectl get ClusterRole 集群角色名# 查看集群角色詳情 kubectl describe ClusterRole 集群角色名# 查看role kubectl get role 角色名# 查看role詳情 kubectl describe role 角色名# 查看rolebindings kubectl get rolebinding 綁定名# 查看rolebindings詳情 kubectl describe rolebinding 綁定名# 刪除rolebindings kubectl delete rolebinding 綁定名測試服務賬戶權限
# 測試服務賬戶權限 kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1CKA考試RBAC授權題
# 切換到名為k8s的集群 kubectl config use-context k8s# 創建ClusterRole(集群角色)deployment-clusterrole,權限限定為:只允許創建deployments,daemonsets,statefulsets kubectl create clusterrole deployment-clusterrole --verb=create -- resource=deployments,statefulsets,daemonsets# 在命名空間app-team1中創建服務賬戶cicd-token kubectl create serviceaccount cicd-token -n app-team1# 在命名空間app-team1中,將ClusterRole(集群角色)deployment-clusterrole綁定到服務賬戶cicd-token kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1 ## 將集群角色綁定到服務賬戶 ## {binding_NAME}=用戶名-集群角色名-binding kubectl create rolebinding {binding_NAME} -- clusterrole={集群角色名} --serviceaccount={命名空間名}:{用戶名} -n {命名空間名}# 測試服務賬戶權限 kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1# 查看服務賬戶詳情 kubectl describe sa cicd-token -n app-team1 # 查看集群角色詳情 kubectl describe clusterrole deployment-clusterrole# 查看服務賬戶綁定成功,驗證rolebinding資源 kubectl describe rolebinding cicd-token-deployment-clusterrole-binding -n app-team1總結
以上是生活随笔為你收集整理的RBAC角色访问控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【多载波系统】基于多载波系统分析等比合并
- 下一篇: 基于matlab tcr fc 无功补偿