k8s-RBAC-16
Posted weiyiming007
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s-RBAC-16相关的知识,希望对你有一定的参考价值。
一、简介
基于角色的访问控制(“RBAC”)
http://docs.kubernetes.org.cn/80.html
(1)
Kubernetes的授权是基于插件形式的,常用的授权插件有以下几种:
- Node:node节点授权
- ABAC:基于属性的访问控制
- RBAC:基于角色的访问控制
- Webhook:自定义http回调方法
RBAC:http://docs.kubernetes.org.cn/148.html
基于角色的访问控制:如图,先让一个用户(Users)扮演一个角色(Role),让角色(Role)拥有权限,从而让用户拥有这样的权限,然后在授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问控制;
(2)Role和ClusterRole
Role是一系列的权限的集合,例如一个Role可以包含读取 Pod 的权限和列出 Pod 的权限, ClusterRole 跟 Role 类似,但是可以在集群中全局使用。
Role只能授予单个namespace 中资源的访问权限。
ClusterRole授权 >= Role授予(与Role类似),但ClusterRole属于集群级别对象:
-
- 集群范围(cluster-scoped)的资源访问控制(如:节点访问权限)
- 非资源类型(如“/ healthz”)
- 所有namespaces 中的namespaced 资源(如 pod)
(3)RoleBinding和ClusterRoleBinding
RoleBinding是将Role中定义的权限授予给用户或用户组。它包含一个subjects列表(users,groups ,service accounts),并引用该Role,Role有了权限,用户也就有了权限。RoleBinding在某个namespace 内授权,ClusterRoleBinding适用在集群范围内使用。
RoleBinding可以引用相同namespace下定义的Role。
Role和ClusterRole、RoleBinding和ClusterRoleBinding关系如下图:
(4)
使用RoleBinding去绑定ClusterRole:
如果有10个名称空间,每个名称空间都需要一个管理员,而这些管理员的权限都是一致的。那么此时需要去定义这样的管理员,使用RoleBinding就需要创建10个Role,这样显得很麻烦。为此当使用RoleBinding去绑定一个ClusterRole时,该User仅仅拥有对当前名称空间的集群操作权限,此时只需要创建一个ClusterRole就解决了以上的需求。
二、RBAC应用
(1)Role --> User -->Rolebinding
用法:
使用kubectl create进行创建角色(role),指定角色名称,--verb指定权限,--resource指定资源或者资源组,--dry-run:此模式不会真的创建;
a、
[[email protected] ~]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml #先用--dry-run模式看一下role的定义
b、生成资源定义清单
[[email protected] ~]# cd manifests/
#导出yaml文件,稍微编辑一下就能用了
[[email protected] manifests]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml >role-demo.yaml
[[email protected] manifests]# vim role-demo.yaml
c、创建
(2)RoleBinding角色绑定
创建方法:
使用kubectl create进行创建角色绑定,指定角色绑定的名称,--role|--clusterrole指定绑定哪个角色,--user指定哪个用户;
a、导出rolebinding资源定义清单文件
[[email protected] manifests]# kubectl create rolebinding magedu-read-pods --role=pods-reader --user=magedu --dry-run -o yaml > rolebinding-demo.yaml
b、创建
[[email protected] manifests]# kubectl apply -f rolebinding-demo.yaml
c、
以上是关于k8s-RBAC-16的主要内容,如果未能解决你的问题,请参考以下文章
1.6 JeeGit 3.0 系统核心模块jeegit-module-sys 数据库设计 RBAC RBAC96(RBAC0+RBAC1+RBAC2+RBAC3) ARBAC97