1.Role , RoleBinding 的作用对象都是namespace。
2.通过RoleRef,可以看到,RoleBinding对象通过名字,直接引用前面定义的Role,实现subject(user)和Role的绑定
role -- namespace -- RoleBinding -- mynamespace
|
roleRef -- subject -- user -- example-user
|
role(mynamespace) -- example-role
3.Service Account 是面向 namespace 的;
并且这个 Service Account 只能访问该 namespace 的资源。Service Account 和 pod、service、deployment 一样是 kubernetes 集群中的一种资源.
4.创建一个可以访问所有 namespace 的ServiceAccount
如果我们现在创建一个新的 ServiceAccount,需要他操作的权限作用于所有的 namespace,这个时候我们就需要使用到 ClusterRole 和 ClusterRoleBinding 这两种资源对象了
4.1 创建serviceaccount 对象
[root@node1 tmp]# cat xiaowei-sa2.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: xiaowei-sa2
namespace: kube-system
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