經過set-context 控制namespace 進行隔離

 

kubernetes RBAC  須要瞭解 rules  roles  subjects  rolebindings(role綁定)

rules 是一組操做 verbs 、資源 、 api組。nginx

 

 

若是隻容許建立對象並檢索他們的信息, 那麼但是使用 verbs 的  get list create, 一個verbs能夠是 (*), 表示容許全部的操做。json

規則的最後一個元素是 API 組 (apiGroup) , RBAC 使用 rbac.authorization.k8s.io 組 

角色是規則的結合,它定義了一個或者多個規則, 這些規則能夠綁定到用戶 或者 用戶組, 角色(role)的重要方面是,它們被應用到一個namespace中。 若是要建立一個指向整個集羣的角色,可使用clusterrole。 role 和 clusterrole 二者都是以相同的方式定義,惟一的區別在於範圍(namespace 和  整個集羣)api

受權機制的下一個部分是subjects,它定義了正在執行操做的實體, 一個主題能夠是一個用戶, 一個組,一個serviceaccount, 用戶是駐留在集羣以外的人或者進程, serviceaccount 用於在想使用api的 pods內運行的進程。瀏覽器

rolebindings 它是主體與角色綁定在一塊兒,因爲主體定義用戶,role綁定有效的用戶(組或者serviceaccount),從而賦予他們對命名空間的特定對象執行某些操做的權限,rolebinding做用在namespace上, clusterrolebinding 做用在整個集羣。網站

 

 

 

k8s 默認的預約義的集羣角色spa

[root@master2 ssl]# kubectl get clusterrole | grep -E "view|admin|cluster-admin|edit" |grep -v "system"
admin                                                                  209d
cluster-admin                                                          209d
edit                                                                   209d
view                                                                   209d

 

在設置admin的權限時, O(組) 是 system:masters,  是管理員。

3d

CN:Common Name,kube-apiserver 從證書中提取該字段做爲請求的用戶名 (User Name),瀏覽器使用該字段驗證網站是否合法;
O:Organization,kube-apiserver 從證書中提取該字段做爲請求用戶所屬的組 (Group);
kube-apiserver 將提取的 User、Group 做爲 RBAC 受權的用戶標識;code

 

[root@master2 ssl]# cat long-csr.json 
{
  "CN": "long",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "devops",
      "OU": "System"
    }
  ]
}

 

 

建立long的運行環境, long的運行環境綁定了 用戶long,而且具備 namespace: long 的 admin權限。server

kubectl create namespace  long
kubectl config set-credentials long --client-certificate=/etc/kubernetes/ssl/long.pem  --embed-certs=true  --client-key=/etc/kubernetes/ssl/long-key.pem 
kubectl config set-context long --cluster=kubernetes --user=long --namespace=long
kubectl config use-context long

kubectl get pod
Error from server (Forbidden): pods is forbidden: User "long" cannot list resource "pods" in API group "" in the namespace "default"

#切換成 kubernetes運行環境,對long帳戶進行權限綁定,授予admin權限,那麼能夠在 這個namespace下 進行任何操做。
kubectl config use-context kubernetes
kubectl create rolebinding long  --clusterrole=admin --user=long -n long

kubectl config use-context long
kubectl get pod

 

用組替換用戶對象

在證書中有 O : devops 組

kubectl create rolebinding long --clusterrole=admin --group=devops -n long
kubectl config use-context long
kubectl get pod
 
 

 [root@master2 fengjian]# kubectl get pod  NAME                  READY    STATUS    RESTARTS    AGE  nginxlong-5cd9f7c58-2ff5j     1/1      Running    0         32m

相關文章
相關標籤/搜索