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


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

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

原理如圖:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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                       #用於綁定的集群中的用戶名。

 


    
   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM