1. 程式人生 > 其它 >|NO.Z.00219|——————————|CloudNative|——|KuberNetes&細粒度許可權控制.V03|------------------------------------------------|RBAC.v03|RoleBinding&ClusterRoleBinding|

|NO.Z.00219|——————————|CloudNative|——|KuberNetes&細粒度許可權控制.V03|------------------------------------------------|RBAC.v03|RoleBinding&ClusterRoleBinding|



[CloudNative:KuberNetes&細粒度許可權控制.V03]                                                    [Applications.KuberNetes] [|DevOps|k8s|細粒度許可權控制|RBAC|許可權管理概念|]








一、role和ClusterRole使用場景
### --- role和ClusterRole

~~~     # 該使用role還是該使用ClusterRole?    
~~~     當為某一個namespace去建立一個單獨的role的話是沒有去建立ClusterRole的,
~~~     若是有很多namespace,需要建立相同的許可權,這時候建立ClusterRole是比較合理的,
~~~     因為ClusterRole既可以作用於整個叢集也可以作用於單個叢集。
~~~     這個作用於誰呢?取決於RoleBinding和ClusterroleBingding
~~~     RoleBinding作用於名稱空間內,將ClusterRole繫結到user,group,ServiceAccount
~~~     # ClusterRoleBinding:
~~~     也是將ClusterRole繫結到user,group,ServiceAccount,只是作用於整個叢集。
二、RoleBinding的用途
### --- 檢視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)