kubernetes之RBAC介绍
一.RBAC简单说明
在kubernetes中,授权有6种模式:
- ABAC(基于属性的访问控制)
- RBAC(基于角色的访问控制)
- Webhook
- Node
- AlwaysDeny(一直拒绝)
- AlwaysAllow(一直允许)
从1.6版本起,kubenetes默认启用RBAC访问控制策略,从1.8开始,RBAC已作为稳定的功能,通过设置-authorization-mode=RBA,启用RBAC。在RBAC API中,可以通过如下的步骤进行授权:
1)定义角色:在定义角色时,会指定此角色对于资源的访问控制的规则。
2)绑定角色:将主体与角色进行绑定,对角色进行访问授权。

二.详细介绍
2.1 角色和集群角色
在RBAC API中,角色包含代表权限集合的规则。在这里,权限只有被授予,没有被拒绝的设置。在kubernetes集群中有两种角色,即:
- 普通角色
可以通过Role定义一个在命名空间的角色。一个角色只能被用来授予访问单一命名空间中的资源。具体可以参考如下:kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: pod-role-read
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "watch", "list"]
- 集群角色
使用ClusterRole定义集群范围的角色。集群角色(ClusterRole)能够被授予如下资源的权限:
1.集群范围的资源(类似于Node)
2.非资源端点(类似于"/healthz")
3.集群中所有命名空间的资源(类似Pod)
下面是授予集群角色读取秘钥字典文件访问权限示例:kind:ClusterRole
apiVersion:rbac.authorization.k8s.io/v1
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name:secret-read
rules:
- apiGroups:[""]
resources:["secrets"] #明确资源类型
verbs:["get","watch","list"]
2.2 角色绑定和集群角色绑定
角色绑定用于将角色与一个或一组用户进行绑定,从而实现对用户进行授权的目的。主体分为用户、组和服务账户。
角色绑定分为:
普通角色绑定
角色绑定只能引用同一个命名空间下的角色。
示例:下面的例子中,在default的命名空间中角色绑定将"yuhaohao"用户和"pod-role-read"角色进行了绑定,这就授予了"yuhaohao"访问"default"命名空间下的Pod:kind:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-pods
namespace:default
subjects: #主体
- kind:User
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef: #引用的角色
kind:Role
name:pod-role-read
apiGroup:rbac.authorization.k8s.io
角色绑定也可以通过引用集群角色授予访问权限,但主体对资源的访问权限仅限于本命名空间。这就允许管理员定义整个集群的公共角色集合,然后在多个命名空间中进行复用。
示例:下面的角色绑定引用了集群角色,但是"yuhaohao"用户只能读取"business"命名空间下的secret资源:kind:RoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-secrets
namespace:business# This only grants permissions within the "business" namespace.
subjects:
- kind:User
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef:
kind:ClusterRole
name:secret-read
apiGroup:rbac.authorization.k8s.io
集群角色绑定
集群角色可以用来在集群层面和整个命名空间下进行授权。
示例:下面的例子可以允许在"yuhaohao"组的用户能够访问到所有命名空间下的秘钥资源:kind:ClusterRoleBinding
apiVersion:rbac.authorization.k8s.io/v1
metadata:
name:read-secrets-global
subjects:
- kind:Group
name:yuhaohao
apiGroup:rbac.authorization.k8s.io
roleRef:
kind:ClusterRole
name:secret-read
apiGroup:rbac.authorization.k8s.io
2.3 资源
在kubernetes集群中,主要包含:Pod、Node、Service、Deployment、Namespace、Secret、Configmap等资源。另外有些资源下面存在子资源,例如Pod下就存在log子资源:```
GET /api/v1/namespaces/{namespace}/pods/{name}/log
下面的示例中,pod-and-log-role角色能够对"pods"和"pods/log"进行访问:
kind:Role
apiVersion:rbac.authorization.k8s.io/v1
metadata:
namespace:default
name:pod-and-pod-role
rules:
- apiGroups:[""]
resources:["pods","pods/log"]
verbs:["get","list"]
这里还可以通过resourceNames指定特定的资源实例,以限制角色对实例的访问控制:
kind:Role
apiVersion:rbac.authorization.k8s.io/v1
metadata:
namespace:default
name:configmap-updater
rules:
- apiGroups:[""]
resources:["configmaps"]
resourceNames:["my-configmap"]
verbs:["update","get"]
2.4 主体
RBAC授权的主机可以是组、用户或服务账户。用户通过字符串标识,例如"yuhaohao"等,具体的形式取决于管理员在认证模块中所配置的用户名。
"system:"被保留作为用于kubernetes系统使用,因此不能作为用户的前缀,组也有认证模块提供,格式与用户类似。
在角色绑定主体的例子:
名称为"yuhaohao"用户:
subjects:
- kind:User
name:"yuhaohao"
apiGroup:rbac.authorization.k8s.io
名称为"yuhao"的组:
subjects:
- kind:Group
name:"yuhao"
apiGroup:rbac.authorization.k8s.io
在kube-system命名空间中,名称为"default"的服务账户
subjects:
- kind:ServiceAccount
name:default
namespace:kube-system
在business命名空间中,所有的服务账户
subjects:
- kind:Group
name:system:serviceaccounts:business
apiGroup:rbac.authorization.k8s.io
所有的服务账户
subjects:
- kind:Group
name:system:serviceaccounts
apiGroup:rbac.authorization.k8s.io
所有被认证的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:authenticated
apiGroup:rbac.authorization.k8s.io
所有未被认证的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:unauthenticated
apiGroup:rbac.authorization.k8s.io
所有的用户(K8S 1.5+)
subjects:
- kind:Group
name:system:authenticated
apiGroup:rbac.authorization.k8s.io
- kind:Group
name:system:unauthenticated
apiGroup:rbac.authorization.k8s.io
本文参考链接:https://www.kubernetes.org.cn/4062.html
官网链接:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/
其它优秀博客链接:https://juejin.cn/post/7116104973644988446
kubernetes之RBAC介绍的更多相关文章
- Kubernetes 基于 RBAC 的授权(十六)
目录 一.RBAC介绍 1.1.角色和集群角色 1.2.RoleBinding 和 ClusterRoleBinding 1.3.资源 1.4.主体 二.命令行工具 2.1.kubectl creat ...
- RBAC 介绍 (权限)
RBAC是什么? RBAC是基于角色的访问控制(Role-Based Access Control )在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权 ...
- Kubernetes中StatefulSet介绍
StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...
- Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616738 本文出自方志朋的博客 RBAC介绍 RBAC(Role-Based Acce ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
- 16.kubernetes的RBAC
role 分为clsterrole和role 我们从普通的role 开始理解起 [root@master ~]# kubectl create role pod-read --verb=get,lis ...
- Kubernetes之RBAC
API Server的授权管理 API Server 内部通过用户认证后,然后进入授权流程.对合法用户进行授权并且随后在用户访问时进行鉴权,是权限管理的重要环节.API Server 目前支持一下几种 ...
- 一、Kubernetes系列之介绍篇
•Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什 ...
- kubernetes资源类别介绍
类别 名称 资源对象 Pod.ReplicaSet.ReplicationController.Deployment.StatefulSet.DaemonSet.Job.CronJob.Horizon ...
- Django的Rbac介绍2
上一篇博客我们记录了一下Django中使用Rbac,但是上一篇博客中的方法有一点不好,就是,因为我要在html文件中控制:如果用户有某个权限,则显示这个权限所代表的按钮,但是我现在只有1张表的增删改查 ...
随机推荐
- Mysql 8.0 创建用户、授权用户、更改密码、撤销用户权限、删除用户
一. 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username: 你将创建的用户名 host: 指定该用户在哪 ...
- 如何在 PostgreSQL 中运行 TLS 回归测试
概述 本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试. Postgres 回归测试 每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL ...
- 掌握 K8s Pod 基础应用 (二)
Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程: pod创建过程 运行初始化容器(init container)过程 运行主容器(main co ...
- linux命令提示符高亮
说明 \033 或 \e :两者是等价的,表示转义字符(ASCII escape character),即键盘左上角的ESC键.033是ESC的八进制ASCII码.注意,在"老式" ...
- cURL 工具库基本使用
cURL(Client URL)是一个功能强大的工具和库,用于与各种网络协议进行交互,cURL常用的一些参数和示例代码: -X, --request :指定HTTP请求方法(GET.POST.PUT等 ...
- Redis 应用场景之短信验证码
应用场景 以 OSChina 账号注册 为例...讲错了请留言批评指正... 逻辑场景 用户操作: 用户输入手机号, 然后点击获取验证码. 前端逻辑: ajax 发起请求, 参数带上手机号. 后端逻辑 ...
- Spring框架中的单例bean是线程安全的吗?
1.介绍两个概念 有状态的bean:对象中有实例变量(成员变量),可以保存数据,是非线程安全的 无状态的bean:对象中没有实例变量(成员变量),不能保存数据,可以在多线程环境下共享,是线程安全的 2 ...
- 🎀MySQL-关键字执行顺序
简介 在MySQL中,SQL查询语句的执行遵循一定的逻辑顺序,即使这些关键字在SQL语句中的物理排列可能有所不同. 语句顺序 (8) SELECT (9) DISTINCT<select_lis ...
- SparkSql 写 Es
官方文档 key 备注 es.write.operation index(默认)添加新数据,旧数据被替换,重新索引;create添加新数据,数据存在抛出异常;update 更新现有数据,不存在抛出异常 ...
- access 类对象使用
类模块代码如下: Option Explicit '定义按钮对象和onclick 触发内容 Private WithEvents m_Closebtn As Access.CommandButton ...