RBAC 基于权限的访问控制 serviceaccount -- clusterRole clusterRoleBinding

1.Role , RoleBinding 的做用对象都是namespace。html

2.经过RoleRef,能够看到,RoleBinding对象经过名字,直接引用前面定义的Role,实现subject(user)和Role的绑定node


role -- namespace -- RoleBinding -- mynamespace
                                      |
                               roleRef -- subject -- user -- example-user
                                      |
                               role(mynamespace) -- example-roleshell

 

 

3.Service Account 是面向 namespace 的;json

而且这个 Service Account 只能访问该 namespace 的资源。Service Account 和 pod、service、deployment 同样是 kubernetes 集群中的一种资源.api

4.建立一个能够访问全部 namespace 的ServiceAccountjsonp

若是咱们如今建立一个新的 ServiceAccount,须要他操做的权限做用于全部的 namespace,这个时候咱们就须要使用到 ClusterRole 和 ClusterRoleBinding 这两种资源对象了spa

4.1 建立serviceaccount 对象code

[root@node1 tmp]# cat xiaowei-sa2.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: xiaowei-sa2
namespace: kube-systemhtm

4.2 而后建立一个 ClusterRoleBinding 对象对象

[root@node1 tmp]# cat xiaowei-clusterolebinding.yaml
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: xiaowei-sa2-clusterrolebinding
subjects:
- kind: ServiceAccount
name: xiaowei-sa2
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io

5.从上面咱们能够看到咱们没有为这个资源对象声明 namespace,由于这是一个 ClusterRoleBinding 资源对象,是做用于整个集群的,咱们也没有单独新建一个 ClusterRole 对象,而是使用的 cluster-admin 这个对象

6.获取token

$ kubectl get secret xiaowei-sa2-token-nxgqx -o jsonpath={.data.token} -n kube-system |base64 -d # 会生成一串很长的base64后的字符串参考: https://www.qikqiak.com/k8s-book/docs/30.RBAC.html