Kubernetes中的RBAC
Kubernetes中,授权有ABAC(基于属性的访问控制)、RBAC(基于角色的访问控制)、Webhook、Node、AlwaysDeny(一直拒绝)和AlwaysAllow(一直允许)这6种模式。需要在kube-apiserver设置–authorization-mode=RBAC参数,启用RABC模式,下面的操作版本为v1.10.1;
当应用没有指定serviceAccountName,它将使用default服务帐户。
在RABC API中,通过如下的步骤进行授权:
1)定义角色:定义角色时会指定此角色对于资源的访问控制的规则;
2)定义主体:用户、组和服务帐户
3)绑定角色:将主体与角色进行绑定,对主体进行访问授权。

RBAC API中的对象关系图
Kubernetes中角色包含代表权限集合的规则,权限只有被授予,没有被拒绝的设置。
在Kubernetes中有两类角色:普通角色和集群角色。
可以通过Role定义在一个命名空间中的角色,或是使用ClusterRole定义集群范围的角色。
普通角色只能被授予访问单一命令空间中的资源。
集群角色(ClusterRole)能够被授予资源权限有:集群范围资源(Node、NameSpace)、非资源端点(/healthz)、集群所有命名空间资源(跨名称空间);
角色绑定和集群角色绑定
角色绑定用于将角色与一个主体进行绑定,从而实现将对主体授权的目的,主体分为用户、组和服务帐户。
角色绑定分为:普通角色绑定和集群角色绑定
角色绑定中不同主体定义有:
名称为 demo 用户:
subjects:
- kind:User
name:"demo"
apiGroup:rbac.authorization.k8s.io
名称为 demo 组:
subjects:
- kind:Group
name:"demo-group"
apiGroup:rbac.authorization.k8s.io
kube-system命名空间中,名称为default的服务帐户
subjects:
- kind:ServiceAccount
name:default
namespace:kube-system
so命名空间中,所有的服务帐户:
subjects:
- kind:Group
name:system:serviceaccounts:so
apiGroup:rbac.authorization.k8s.io
所有的服务帐户:
subjects:
- kind:Group
name:system:serviceaccounts
apiGroup:rbac.authorization.k8s.io
所有用户:
subjects:
- kind:Group
name:system:authenticated #授权用户
apiGroup:rbac.authorization.k8s.io
- kind:Group
name:system:unauthenticated #未授权用户
apiGroup:rbac.authorization.k8s.io
授予cluster-admin集群角色给admin用户:
kubectl create clusterrolebinding admin-cluster-admin-binding --clusterrole=cluster-admin --user=admin
授予cluster-admin集群角色给so名称空间中的app服务帐户:
kubectl create clusterrolebinding app-admin-binding --clusterrole=cluster-admin --serviceaccount=so:app
RBAC实例demo下面创建solinx-service-account.yml文件包含以下内容:
# 服务账号
apiVersion: v1
kind: ServiceAccount
metadata:
name: solinx
# 角色
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: solinx
rules: #规则
- apiGroups: [""] # 所有核心api
resources: ["pods"] # 资源
verbs: ["create","delete","get","list","patch","update","watch"] #操作
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["create","delete","get","list","patch","update","watch"]
# 角色绑定
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: solinx
roleRef: # 上面定义的角色
apiGroup: rbac.authorization.k8s.io
kind: Role
name: solinx
subjects: # 上面定义的服务账户
- kind: ServiceAccount
name: solinx
namespace: default
上面定义了一个服务账户solinx、普通角色solinx,并将该服务账户与角色进行绑定,该角色定义了对了pod的增删查改等操作,所以该服务账户也具备了该权限;
这里使用solinx服务账户对资源进行操作:
kubectl get po --as system:serviceaccount:default:solinx

由于只授予了pod的操作权限,当访问service资源时被拒绝:
kubectl get svc --as system:serviceaccount:default:solinx
Error from server (Forbidden): services is forbidden: User "system:serviceaccount:default:solinx" cannot list services in the namespace "default"

该角色为普通角色Role,当访问集群资源NameSpace时同样被拒绝:
kubectl get ns --as system:serviceaccount:default:solinx
Error from server (Forbidden): namespaces is forbidden: User "system:serviceaccount:default:solinx" cannot list namespaces at the cluster scope

此时把角色改为集群角色:ClusterRole,并重新绑定服务账户:

此时该服务账户已经具备集群角色权限,访问集群资源:NameSpace
kubectl get ns --as system:serviceaccount:default:solinx

参考资料:
https://kubernetes.io/docs/reference/access-authn-authz/rbac/
文章首发地址:Solinx
http://www.solinx.co/archives/1233
Kubernetes中的RBAC的更多相关文章
- Kubernetes中的网络
一.引子 既然Kubernetes中将容器的联网通过插件的方式来实现,那么该如何解决这个的联网问题呢? 如果你在本地单台机器上运行docker容器的话注意到所有容器都会处在docker0网桥自动分配的 ...
- kubernetes 1.6 RBAC访问控制
一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...
- [转帖]Kubernetes中安装Helm及使用
Kubernetes中安装Helm及使用 2018年07月02日 17:41:09 灬勿忘丶心安 阅读数 3699更多 分类专栏: K8S 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
- Kubernetes中予许及限制(PodSecurityPolicy)使用宿主机资源
1.在pod中使用宿主机命名空间.端口等资源 pod中的容器通常在分开的Linux命名空间中运行.这些命名空间将容器中的进程与其他容器中,或者宿主机默认命名空间中的进程隔离开来. 例如,每一个pod有 ...
- 浅析kubernetes中client-go structure01
Prepare Introduction 从2016年8月起,Kubernetes官方提取了与Kubernetes相关的核心源代码,形成了一个独立的项目,即client-go,作为官方提供的go客户端 ...
- Kubernetes 中部署 NFS-Subdir-External-Provisioner 为 NFS 提供动态分配卷
文章转载自:http://www.mydlq.club/article/109/ 系统环境: 操作系统: CentOS 7.9 Docker 版本: 19.03.13 Kubernetes 版本: 1 ...
- phpcms中的RBAC权限系统
PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...
- [Yii][RBAC]Yii中应用RBAC完全指南
开端筹办 Yii供给了强大的设备机制和很多现成的类库.在Yii中应用RBAC是很简单的,完全不须要再写RBAC代码.所以筹办工作就是,打开编辑器,跟我来. 设置参数.建树数据库 在设备数组中,增长以下 ...
- 前后端分离Web项目中,RBAC实现的研究
在前后端分离Web项目中,RBAC实现的研究 最近手头公司的网站项目终于渐渐走出混沌,走上正轨,任务也轻松了一些,终于有时间整理和总结一下之前做的东西. 以往的项目一般使用模板引擎(如ejs)渲染 ...
随机推荐
- github 远程库
一.在 Github 创建 django 项目时:先在本地创建项目,然后设置为本地仓库,再与远程仓库关联 在 Git Bash 进入django项目目录,输入命令git init,此时这个目录变成Gi ...
- 主成分分析算法(PCA)
通过数据压缩(降维)可以减少特征数量,可以降低硬盘和内存的存储,加快算法的训练. 还可以把高维的数据压缩成二维或三维,这样方便做数据可视化. 数据压缩是通过相似或者相关度很高的特征来生成新的特征,减少 ...
- CentOS搭建GIT服务器
安装git # 请确保您切换到了root账户 $ su root $ yum install -y git # 验证是否安装成功 $ git --version # 输出如下内容表示成功: git v ...
- 机器学习基石10-Logistic Regression
注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课介绍了Linear Regression线性回归,用均方误差来寻找最佳 ...
- python安装过程中的一些问题
因为看到大神的教程是基于python V2.7,下载该版本且安装成功. 安装目录: https://www.python.org/download/releases/2.7/ 根据系统进行安装包下载 ...
- 【easy】278. First Bad Version
有一系列产品,从某个开始其后都不合格,给定一个判断是否合格的函数,找出N个产品中第一个不合格的产品. 正确答案: // Forward declaration of isBadVersion API. ...
- Oracle 数据库监听无法连接上、监听HANG住、监听无响应、TNS-12560
环境: Windows server 2003 Oracle 11.2.0.1 问题: 一套老数据库在运行了很久后,突然就连接不上了,提示监听异常. 处理: 1.CMD命令行检查监听状态:无监听 2. ...
- vue中展示数据
1.v-bind,直接把数据绑定进去了.*100是因为传过来的数据为数字0.3这样子,要转换成百分比 2.整个的数据再data中定义之后,就能在页面直接绑定,v-for,v-if等单独再设置.
- The import javax.servlet.jsp.JspException cannot be resolved
问题描述 重新更换了 Apache Tomcat 的版本,在 Eclipse 中项目报错信息:The import javax.servlet.jsp.JspException cannot be ...
- Loadrunner测试数据库性能,测试SQL语句的脚本例子
Loadrunner与SQL Server的操作可以通过录制的方式来实现,但本文还是通过直接调用loadrunner本身的function来实现sql语句的操作, 主要用到的是lr_db_connec ...