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                       #用于绑定的集群中的用户名。


    
   

猜你喜欢

转载自www.cnblogs.com/Smbands/p/10907568.html