k8s基於RBAC的訪問控制(用戶受權)

kubernetes的API Server經常使用的受權插件有:
   Node、ABAC、RBAC、Webhook
咱們重點說一下RBAC的訪問控制邏輯
RBAC(Role base access control)基於角色的訪問控制

涉及到的資源類型:
 Role                  #角色,基於名稱空間下的資源
 RoleBinding           #角色綁定,基於名稱空間下的資源
 ClusterRole           #集羣角色,基於集羣級別下的資源
 ClusterRoleBinding    #集羣角色綁定,基於集羣級別下的資源
其中,Role和Role是針對於名稱空間級別,授予其所在名稱空間範圍內的許可權限。
而ClusterRole和ClusterRoleBinding是針對於集羣級別,授予其所在集羣範圍內的許可權限。

原理如圖:
html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 1.將user1經過rolebinding綁定到role,則該用戶將擁有role定義的權限,但操做範圍只能是role所在的名稱空間。
  2.將user2經過clusterrolebinding綁定到clusterrole,則該用戶擁有clusterrole定義的權限,操做範圍是clusterrole所在集羣。
  3.將user3經過rolebinding綁定到clusterrole,則該用戶擁有clusterrole定義的權限,但操做範圍只能是rolebinding所在名稱空間。

使用 k8s資源配置清單的書寫格式(yaml文件)的便捷方法,快速獲取資源清單的基本框架:
 api

1   建立角色:kubectl ceate role ROLE_NAME --verb=ACTION --resource=KIND --dry-run -o yaml >role-damo.yaml 2   建立角色綁定:kubectl create rolebinding ROLEBINDING_NAME --role=ROLE_NAME --user=USER_NAME --dry-run -o yaml > rolebinding.yaml 3   建立集羣角色:kubectl create clusterrole CLUSTERROLE_NAME --verb=ACTION --resource=KIND --dry-run -o yaml > cluster-role.yaml 4   建立集羣角色綁定:kubectl create clusterrolebinding CLUSTERROLEBINDING_NAEM --clusterrole=CLUSTERROLE_NAME --user=USER_NAME --dry-run -o yaml > cluster-binding.yaml

 

注:這些資源對象的修改會當即生效的
    --verb:是動做名稱如:get,list,watch等。
    --resource:是資源類型如:pods,deploy,svc等;注意這裏若是寫入namespaces是無用的,由於role就是在namespace級別的,而namespaces選項是集羣級別的。
    --dry-run:運行這條命令,但不生效,經常使用於測試。
    --role:是集羣中現已存在的role資源對象。
    --user:填寫集羣中現已存在的用戶。或建立完rolebinding後建立這個用戶。
    --clusterrole:是集羣中現已存在的clusterrole資源對象。

資源清單書寫格式
role\clusterrole(兩個role寫法差很少):框架

 1 apiVersion: rbac.authorization.k8s.io/v1  2 kind: ClusterRole  3 metadata:  4   name: smbands-cluster-role  5 rules:  6 - apiGroups: #apigroups是包含資源的apigroup的名稱。若是指定了多個API組,對其中一個將容許任何API組中的枚舉資源。  7   - ""
 8  resources: #寫資源類型  9   - pods 10   - services 11   - namespaces 12  verbs: #寫受權動做 13   - get
14   - list 15   - watch 16 - apiGroups: 17   - extensions 18  resources: 19   - deployments 20  verbs: 21   - get
22   - list 23   - watch

rolebinding\clusterrolebinding(兩個binding寫法差很少):測試

 1 apiVersion: rbac.authorization.k8s.io/v1  2 kind: RoleBinding  3 metadata:  4   name: smbands-binding  5 roleRef:  6  apiGroup: rbac.authorization.k8s.io #apigroup是被引用資源的組。  7  kind: ClusterRole #正在引用的資源類型(role或clusterrole)。  8   name: smbands-cluster-role #定義role或clusterrole時定義的資源名稱。  9 subjects: 10 - apiGroup: rbac.authorization.k8s.io #這個apiGroup是參考類,默認對於ServiceAccount是"",默認對於用戶或組是"rbac.authorization.k8s.io"
11  kind: User #用戶類型:User,Group,ServiceAccount. 12   name: smbands                       #用於綁定的集羣中的用戶名。