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                       #用于绑定的集群中的用户名。
相关文章
相关标签/搜索