下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
在 Kubernetes 中,RBAC(Role-Based Access Control,基于角色的访问控制)是一种权限管理机制,用于控制用户、系统进程或系统组件对 Kubernetes 资源的访问权限。
RBAC 的主要作用如下:
RBAC 的核心思想是通过「角色」控制资源的操作权限,应用场景如下:
使用 kubeadm 安装的集群默认开启了 RBAC,对应配置位于 Master 节点上静态 Pod 的资源清单中:
/etc/kubernetes/manifests/kube-apiserver.yaml:- --authorization-mode=Node,RBAC
RBAC 对象类型
1、Role 与 ClusterRole
2、RoleBinding 与 ClusterRoleBinding
RBAC 对象属性
1、Rule
2、RoleRef
roleRef:
apiGroup: rbac.authorization.k8s.io # 默认,且不是 rbac.authorization.k8s.io/v1
kind: Role / ClusterRole
name: xxx
3、Subject
subjects:
- kind: ServiceAccount
name: xxx
namespace: xxx
RBAC 常用命令
# 创建 Role / ClusterRole
* kubectl create role demo --resource=nodes,pods --verb=get,list -n <namespace>
* kubectl create clusterrole demo --resource=nodes,pods --verb=get,list,create,delete
# 创建 RoleBinding / ClusterRoleBinding
* kubectl create rolebinding demo --role=demo --serviceaccount=xxx -n <namespace>
* kubectl create clusterrolebinding demo --clusterrole=demo --serviceaccount=xxx
🔔 --serviceaccount=xxx,--user=xxx,--group=xxx
# 查看 RBAC 对象
* kubectl get role / rolebinding -n <namespace>
* kubectl get clusterrole / clusterrolebinding
# 删除 RBAC 对象
* kubectl delete role / rolebinding demo -n <namespace>
* kubectl get clusterrole / clusterrolebinding demo
RBAC 资源清单(示例)
apiVersion: v1
kind: ServiceAccount
metadata:
name: demo-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: demo-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- services
- endpoints
- pods
- nodes/proxy
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- configmap
- nodes/proxy
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: demo
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: demo-clusterrole
subjects:
- kind: ServiceAccount
name: demo-admin
namespace: kube-system