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

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
posted @ 2018-11-12 23:36  littlevigra  阅读(3578)  评论(0编辑  收藏  举报