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