kubernetes RBAC 须要了解 rules roles subjects rolebindings(role绑定)
rules 是一组操做 verbs 、资源 、 api组。nginx
若是只容许建立对象并检索他们的信息, 那么但是使用 verbs 的 get list create, 一个verbs能够是 (*), 表示容许全部的操做。json
规则的最后一个元素是 API 组 (apiGroup) , RBAC 使用 rbac.authorization.k8s.io 组
角色是规则的结合,它定义了一个或者多个规则, 这些规则能够绑定到用户 或者 用户组, 角色(role)的重要方面是,它们被应用到一个namespace中。 若是要建立一个指向整个集群的角色,可使用clusterrole。 role 和 clusterrole 二者都是以相同的方式定义,惟一的区别在于范围(namespace 和 整个集群)api
受权机制的下一个部分是subjects,它定义了正在执行操做的实体, 一个主题能够是一个用户, 一个组,一个serviceaccount, 用户是驻留在集群以外的人或者进程, serviceaccount 用于在想使用api的 pods内运行的进程。浏览器
rolebindings 它是主体与角色绑定在一块儿,因为主体定义用户,role绑定有效的用户(组或者serviceaccount),从而赋予他们对命名空间的特定对象执行某些操做的权限,rolebinding做用在namespace上, clusterrolebinding 做用在整个集群。网站
k8s 默认的预约义的集群角色spa
[root@master2 ssl]# kubectl get clusterrole | grep -E "view|admin|cluster-admin|edit" |grep -v "system" admin 209d cluster-admin 209d edit 209d view 209d
在设置admin的权限时, O(组) 是 system:masters, 是管理员。
3d
CN:Common Name,kube-apiserver 从证书中提取该字段做为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
O:Organization,kube-apiserver 从证书中提取该字段做为请求用户所属的组 (Group);
kube-apiserver 将提取的 User、Group 做为 RBAC 受权的用户标识;code
[root@master2 ssl]# cat long-csr.json { "CN": "long", "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "devops", "OU": "System" } ] }
建立long的运行环境, long的运行环境绑定了 用户long,而且具备 namespace: long 的 admin权限。server
kubectl create namespace long kubectl config set-credentials long --client-certificate=/etc/kubernetes/ssl/long.pem --embed-certs=true --client-key=/etc/kubernetes/ssl/long-key.pem kubectl config set-context long --cluster=kubernetes --user=long --namespace=long kubectl config use-context long kubectl get pod Error from server (Forbidden): pods is forbidden: User "long" cannot list resource "pods" in API group "" in the namespace "default" #切换成 kubernetes运行环境,对long帐户进行权限绑定,授予admin权限,那么能够在 这个namespace下 进行任何操做。 kubectl config use-context kubernetes kubectl create rolebinding long --clusterrole=admin --user=long -n long kubectl config use-context long kubectl get pod
用组替换用户对象
在证书中有 O : devops 组
kubectl create rolebinding long --clusterrole=admin --group=devops -n long
kubectl config use-context long
kubectl get pod
[root@master2 fengjian]# kubectl get pod NAME READY STATUS RESTARTS AGE nginxlong-5cd9f7c58-2ff5j 1/1 Running 0 32m