|NO.Z.00219|——————————|CloudNative|——|KuberNetes&細粒度許可權控制.V03|------------------------------------------------|RBAC.v03|RoleBinding&ClusterRoleBinding|
阿新 • • 發佈:2022-03-31
[CloudNative:KuberNetes&細粒度許可權控制.V03] [Applications.KuberNetes] [|DevOps|k8s|細粒度許可權控制|RBAC|許可權管理概念|]
一、role和ClusterRole使用場景
二、RoleBinding的用途### --- role和ClusterRole ~~~ # 該使用role還是該使用ClusterRole? ~~~ 當為某一個namespace去建立一個單獨的role的話是沒有去建立ClusterRole的, ~~~ 若是有很多namespace,需要建立相同的許可權,這時候建立ClusterRole是比較合理的, ~~~ 因為ClusterRole既可以作用於整個叢集也可以作用於單個叢集。 ~~~ 這個作用於誰呢?取決於RoleBinding和ClusterroleBingding ~~~ RoleBinding作用於名稱空間內,將ClusterRole繫結到user,group,ServiceAccount ~~~ # ClusterRoleBinding: ~~~ 也是將ClusterRole繫結到user,group,ServiceAccount,只是作用於整個叢集。
### --- 檢視ingress-nginx的RoleBinding [root@k8s-master01 ~]# kubectl get rolebinding --all-namespaces NAMESPACE NAME ROLE AGE ingress-nginx ingress-nginx Role/ingress-nginx 10d
~~~ # 這個serviceaccount會經常會用到的,它會把一些許可權定義到serviceaccount上, ~~~ 這個ServiceAccount可以直接給pod去用, ~~~ 就是啟動pod的時候可以直接指定用哪個ServiceAccount去啟用 [root@k8s-master01 ~]# kubectl get rolebinding ingress-nginx -n ingress-nginx -oyaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding // 檢視到RoleBinding作用於ingress-nginx這個namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: Role // 它把這個role繫結到了ingress-nginx的這個角色上面 name: ingress-nginx subjects: - kind: ServiceAccount // 這個serviceaccount所在的namespace所在是在ingree-nginx的namespace下 name: ingress-nginx // 它把這個role繫結到了ingress-nginx的這個角色上面 namespace: ingress-nginx
### --- 檢視ingress-nginx的ServiceAccount的許可權
[root@k8s-master01 ~]# kubectl edit ds -n ingress-nginx
securityContext: {}
serviceAccount: ingress-nginx // 指定了執行容器的serviceaccount是誰,
serviceAccountName: ingress-nginx // 就會以這個serviceaccount去執行這個容器,這個容器就會有ServiceAccount這個許可權,也就是說,它有了這個名字為ingress-nginx的ServiceAccount的許可權。
terminationGracePeriodSeconds: 300
三、建立一個RoleBinding並繫結使用者### --- 就是首先建立了一個role,
[root@k8s-master01 ~]# kubectl get role -n ingress-nginx
NAME CREATED AT
ingress-nginx 2021-04-21T16:09:29Z
### --- 這個role定義了一些許可權
[root@k8s-master01 ~]# kubectl get role -n ingress-nginx -oyaml
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
manager: Go-http-client
operation: Update
time: "2021-04-21T16:09:29Z"
name: ingress-nginx // 這個角色具有了下面的許可權
namespace: ingress-nginx
rules: // 許可權列表
- apiGroups:
- ""
resources:
- namespaces
verbs:
- get
### --- 把這個角色的許可權繫結到一個叫ingress-nginx的ServiceAccount上面,
[root@k8s-master01 ~]# kubectl get rolebinding -n ingress-nginx -oyaml
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ingress-nginx
subjects:
- kind: ServiceAccount // 這個serviceaccount就有了上面建立的role所有的許可權
name: ingress-nginx // 把這個角色的許可權繫結到一個叫ingress-nginx的ServiceAccount上面,
namespace: ingress-nginx
### --- 又在ds的serviceaccount裡面,設定了serviceaccountname的名字叫ubgress-nginx,
~~~ 就是繫結許可權的ServiceAccount
~~~ 注:所以說這個pod就是以這個身份去啟動的然後這個pod就具有了這個ServiceAccount:
~~~ ingress-nginx 的所有的許可權
~~~ 若是不指定這個serviceacount的許可權,就是以預設的的default去啟動。
~~~ default是沒有什麼許可權的。
[root@k8s-master01 ~]# kubectl edit ds -n ingress-nginx
securityContext: {}
serviceAccount: ingress-nginx
serviceAccountName: ingress-nginx // 又在ds的serviceaccount裡面,設定了serviceaccountname的名字叫ubgress-nginx,就是繫結許可權的ServiceAccount
四、ClusterRoleBinding用途
### --- 查詢一個具有ClusterRoleBinding許可權的容器
~~~ 注:在建立dashboard的時候有一個步驟是建立admin使用者,
[root@k8s-master01 ~]# kubectl get clusterrolebinding
NAME ROLE AGE
kubernetes-dashboard ClusterRole/kubernetes-dashboard
### --- admin使用者具有許可權的操作:
~~~ 檢視ClusterRoleBinding配置的許可權
[root@k8s-master01 ~]# kubectl get clusterrolebinding kubernetes-dashboard -oyaml
### --- 建立管理員使用者的時候建立了一個admin-user的角色
~~~ 檢視admin-user使用者
[root@k8s-master01 ~]# kubectl get clusterrolebinding admin-user -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding //ClusterRoleBinding叢集角色繫結
*****省略部分內容***********
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin //把cluser-admin的clusterrole繫結到admin-user的serviceaccount上面
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)