1. 程式人生 > 其它 >|NO.Z.00224|——————————|CloudNative|——|KuberNetes&細粒度許可權控制.V08|------------------------------------------------|RBAC.v04|命令列操作|

|NO.Z.00224|——————————|CloudNative|——|KuberNetes&細粒度許可權控制.V08|------------------------------------------------|RBAC.v04|命令列操作|



[CloudNative:KuberNetes&細粒度許可權控制.V08]                                                    [Applications.KuberNetes] [|DevOps|k8s|細粒度許可權控制|RBAC|許可權管理應用|]








一、命令列操作:kubectl create role 
### --- 建立 Role 物件,定義在某一名字空間中的許可權。例如:
~~~     # 建立名稱為 "pod-reader" 的 Role 物件,允許使用者對 Pods 執行 get、watch 和 list 操作:

kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
~~~     # 建立名稱為 "pod-reader" 的 Role 物件並指定 resourceNames:
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod

~~~     # 建立名為 "foo" 的 Role 物件並指定 apiGroups:
kubectl create role foo --verb=get,list,watch --resource=replicasets.apps
~~~     # 建立名為 "foo" 的 Role 物件並指定子資源許可權:
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status

~~~     # 建立名為 "my-component-lease-holder" 的 Role 物件,使其具有對特定名稱的 資源執行 get/update 的許可權:
kubectl create role my-component-lease-holder --verb=get,list,watch,update --resource=lease --resource-name=my-component
二、kubectl create clusterrole 
### --- 建立 ClusterRole 物件。例如:

~~~     # 建立名稱為 "pod-reader" 的 ClusterRole物件,允許使用者對 Pods 物件執行 get、watch和list 操作:
kubectl create clusterrole pod-reader --verb=get,list,watch --resource=pods

~~~     # 建立名為 "pod-reader" 的 ClusterRole 物件並指定 resourceNames:
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
~~~     # 建立名為 "foo" 的 ClusterRole 物件並指定 apiGroups:
kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps

~~~     # 建立名為 "foo" 的 ClusterRole 物件並指定子資源:
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status
~~~     # 建立名為 "foo" 的 ClusterRole 物件並指定 nonResourceURL:
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*

~~~     # 建立名為 "monitoring" 的 ClusterRole 物件並指定 aggregationRule:
kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"
三、kubectl create rolebinding 
### --- 在特定的名稱空間下對 Role 或 ClusterRole 授權。例如:

~~~     # 在名稱空間 "acme" 中,將名為 admin 的 ClusterRole 中的許可權授予名稱 "bob" 的使用者:
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
~~~     # 在名稱空間 "acme" 中,將名為 view 的 ClusterRole 中的許可權授予名字空間 "acme" 中名為 myapp 的服務賬戶:
kubectl create rolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp --namespace=acme

~~~     # 在名稱空間 "acme" 中,將名為 view 的 ClusterRole 物件中的許可權授予名字空間 "myappnamespace" 中名稱為 myapp 的服務賬戶:
kubectl create rolebinding myappnamespace-myapp-view-binding --clusterrole=view --serviceaccount=myappnamespace:myapp --namespace=acme
四、kubectl create ClusterRoleBinding
### --- 在整個叢集(所有名字空間)中用 ClusterRole 授權。例如:
~~~     # 在整個叢集範圍,將名為 cluster-admin 的 ClusterRole 中定義的許可權授予名為 "root" 使用者:

kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
~~~     # 在整個叢集範圍內,將名為 system:node-proxier 的 ClusterRole 的許可權授予名為 "system:kube-proxy" 的使用者:
kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy

~~~     # 在整個叢集範圍內,將名為 view 的 ClusterRole 中定義的許可權授予 "acme" 名字空間中 名為 "myapp" 的服務賬戶:
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
五、kubectl auth reconcile
### --- 使用清單檔案來建立或者更新 rbac.authorization.k8s.io/v1 API 物件。
~~~     尚不存在的物件會被建立,如果對應的名字空間也不存在,必要的話也會被建立。 已經存在的角色會被更新,使之包含輸入物件中所給的許可權。如果指定了 --remove-extra-permissions,可以刪除額外的許可權。
~~~     已經存在的繫結也會被更新,使之包含輸入物件中所給的主體。如果指定了 --remove-extra-permissions,則可以刪除多餘的主體。

~~~     # 測試應用 RBAC 物件的清單檔案,顯示將要進行的更改:
kubectl auth reconcile -f my-rbac-rules.yaml --dry-run
~~~     # 應用 RBAC 物件的清單檔案,保留角色中的額外許可權和繫結中的其他主體:
kubectl auth reconcile -f my-rbac-rules.yaml

~~~     # 應用 RBAC 物件的清單檔案, 刪除角色中的額外許可權和繫結中的其他主體:
kubectl auth reconcile -f my-rbac-rules.yaml --remove-extra-subjects --remove-extra-permissions
六、建立許可權認證
### --- 檢視dashboard是否啟動

[root@k8s-master01 ~]# kubectl get po -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7645f69d8c-7dd2b   1/1     Running   2          23d
kubernetes-dashboard-78cb679857-mqccg        1/1     Running   33         23d
[root@k8s-master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.103.18.41    <none>        8000/TCP        23d
kubernetes-dashboard        NodePort    10.104.232.53   <none>        443:30008/TCP   23d
### --- 開啟dashboard的Basic-auth-file認證許可權

[root@k8s-master01 ~]# kubectl edit deploy kubernetes-dashboard -n kubernetes-dashboard
    spec:
      containers:
      - args:
        - --auto-generate-certificates      // 此行下面新增如下引數
        - --authentication-mode=basic,token // 開啟Basic-auth-file認證許可權引數
        - --token-ttl=86400     
        - --namespace=kubernetes-dashboard  // 此行之上新增如上引數








===============================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)