实战:RBAC(基于角色的权限控制)-2021.11.28
目录
文章目录
- 目录
- 实验环境
- 实验软件(无)
- 1、RBAC(基于角色的权限控制)
- 2、API 对象
- 3、RBAC
- :cupid:1.演示:只能访问某个 namespace 的普通用户
- (1)创建用户凭证
- (2)创建角色
- (3)创建角色权限绑定
- (4)测试
- :cupid:2.演示:只能访问某个 namespace 的 ServiceAccount
- :cupid:3.演示:可以全局访问的 ServiceAccount
- 4、注意事项
- 1.`noResources概念`
- 2.这个`cluster-admin`clusterrole的权限是无敌的哈哈
- 3.2种方式访问k8s集群
- 4.RBAC流程
- 5.Role资源清单文件里`rules`字段可以按如下方式编写
- 6.`Forbidden`字段报错更大可能性要想到的可能是权限问题
- 7.我们可以去分析系统自带的 `clusterrole`、`clusterrolebinding` 这些资源对象的编写方法
- 8.如何确定某个资源对象属于哪个apiGroup呢?
- 关于我
- 最后
实验环境
实验环境:
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点k8s version:v1.22.2containerd://1.5.5
实验软件(无)
1、RBAC(基于角色的权限控制)
前面我们已经学习一些常用的资源对象的使用,我们知道对于资源对象的操作都是通过 APIServer 进行的,那么集群是怎样知道我们的请求就是合法的请求呢?这个就需要了解 Kubernetes 中另外一个非常重要的知识点了:RBAC
(基于角色的权限控制)。
管理员可以通过 Kubernetes API 动态配置策略来启用RBAC
,需要在 kube-apiserver 中添加参数--authorization-mode=RBAC
,如果使用的 kubeadm 安装的集群那么是默认开启了 RBAC
的,可以通过查看 Master 节点上 apiserver 的静态 Pod 定义文件:
[root@master1 ~]#cat /etc/kubernetes/manifests/kube-apiserver.yaml |grep mode- --authorization-mode=Node,RBAC
[root@master1 ~]#
⚠️如果是二进制的方式搭建的集群,添加这个参数过后,记得要重启 kube-apiserver 服务。(如何重启?是删除pod吗??)
2、API 对象
在学习 RBAC 之前,我们还需要再去理解下 Kubernetes 集群中的对象,我们知道,**在 Kubernetes 集群中,Kubernetes 对象是我们持久化的实体,就是最终存入 etcd 中的数据,集群中通过这些实体来表示整个集群的状态。**前面我们都直接编写的 YAML 文件,通过 kubectl 来提交的资源清单文件,然后创建的对应的资源对象,那么它究竟是如何将我们的 YAML 文件转换成集群中的一个 API 对象的呢?
这个就需要去了解下声明式 API的设计,Kubernetes API 是一个以 JSON 为主要序列化方式的 HTTP 服务(可以理解为一个web server),除此之外也支持 Protocol Buffers 序列化方式,主要用于集群内部组件间的通信。为了可扩展性,Kubernetes 在不同的 API 路径(比如/api/v1
或者 /apis/batch
)下面支持了多个 API 版本,不同的 API 版本意味着不同级别的稳定性和支持:
- Alpha 级别,例如
v1alpha1
默认情况下是被禁用的,可以随时删除对功能的支持,所以要慎用 - Beta 级别,例如
v2beta1
默认情况下是启用的,表示代码已经经过了很好的测试,但是对象的语义可能会在随后的版本中以不兼容的方式更改 - 稳定级别,比如
v1
表示已经是稳定版本了,也会出现在后续的很多版本中。
在 Kubernetes 集群中,一个 API 对象在 Etcd 里的完整资源路径,是由:Group(API 组)
、Version(API 版本)
和 Resource(API 资源类型)
三个部分组成的。通过这样的结构,整个 Kubernetes 里的所有 API 对象,实际上就可以用如下的树形结构表示出来:
从上图中我们也可以看出 Kubernetes 的 API 对象的组织方式,在顶层,我们可以看到有一个核心组(由于历史原因,是 /api/v1
下的所有内容而不是在 /apis/core/v1
下面)和命名组(路径 /apis/$NAME/$VERSION
)和系统范围内的实体,比如 /metrics
。
⚠️我们也可以用下面的命令来查看集群中的 API 组织形式:
[root@master1 ~]#kubectl get --raw /
{"paths": ["/.well-known/openid-configuration","/api","/api/v1","/apis","/apis/","/apis/admissionregistration.k8s.io","/apis/admissionregistration.k8s.io/v1","/apis/apiextensions.k8s.io","/apis/apiextensions.k8s.io/v1","/apis/apiregistration.k8s.io","/apis/apiregistration.k8s.io/v1","/apis/apps","/apis/apps/v1","/apis/authentication.k8s.io","/apis/authentication.k8s.io/v1","/apis/authorization.k8s.io","/apis/authorization.k8s.io/v1","/apis/autoscaling","/apis/autoscaling/v1","/apis/autoscaling/v2beta1","/apis/autoscaling/v2beta2","/apis/batch","/apis/batch/v1","/apis/batch/v1beta1","/apis/certificates.k8s.io","/apis/certificates.k8s.io/v1","/apis/coordination.k8s.io","/apis/coordination.k8s.io/v1","/apis/discovery.k8s.io","/apis/discovery.k8s.io/v1","/apis/discovery.k8s.io/v1beta1","/apis/events.k8s.io","/apis/events.k8s.io/v1","/apis/events.k8s.io/v1beta1","/apis/flowcontrol.apiserver.k8s.io","/apis/flowcontrol.apiserver.k8s.io/v1beta1","/apis/metrics.k8s.io","/apis/metrics.k8s.io/v1beta1","/apis/networking.k8s.io","/apis/networking.k8s.io/v1","/apis/node.k8s.io","/apis/node.k8s.io/v1","/apis/node.k8s.io/v1beta1","/apis/policy","/apis/policy/v1","/apis/policy/v1beta1","/apis/rbac.authorization.k8s.io","/apis/rbac.authorization.k8s.io/v1","/apis/scheduling.k8s.io","/apis/scheduling.k8s.io/v1","/apis/storage.k8s.io","/apis/storage.k8s.io/v1","/apis/storage.k8s.io/v1beta1","/healthz","/healthz/autoregister-completion","/healthz/etcd","/healthz/log","/healthz/ping","/healthz/poststarthook/aggregator-reload-proxy-client-cert","/healthz/poststarthook/apiservice-openapi-controller","/healthz/poststarthook/apiservice-registration-controller","/healthz/poststarthook/apiservice-status-available-controller","/healthz/poststarthook/bootstrap-controller","/healthz/poststarthook/crd-informer-synced","/healthz/poststarthook/generic-apiserver-start-informers","/healthz/poststarthook/kube-apiserver-autoregistration","/healthz/poststarthook/priority-and-fairness-config-consumer","/healthz/poststarthook/priority-and-fairness-config-producer","/healthz/poststarthook/priority-and-fairness-filter","/healthz/poststarthook/rbac/bootstrap-roles","/healthz/poststarthook/scheduling/bootstrap-system-priority-classes","/healthz/poststarthook/start-apiextensions-controllers","/healthz/poststarthook/start-apiextensions-informers","/healthz/poststarthook/start-cluster-authentication-info-controller","/healthz/poststarthook/start-kube-aggregator-informers","/healthz/poststarthook/start-kube-apiserver-admission-initializer","/livez","/livez/autoregister-completion","/livez/etcd","/livez/log","/livez/ping","/livez/poststarthook/aggregator-reload-proxy-client-cert","/livez/poststarthook/apiservice-openapi-controller","/livez/poststarthook/apiservice-registration-controller","/livez/poststarthook/apiservice-status-available-controller","/livez/poststarthook/bootstrap-controller","/livez/poststarthook/crd-informer-synced","/livez/poststarthook/generic-apiserver-start-informers","/livez/poststarthook/kube-apiserver-autoregistration","/livez/poststarthook/priority-and-fairness-config-consumer","/livez/poststarthook/priority-and-fairness-config-producer","/livez/poststarthook/priority-and-fairness-filter","/livez/poststarthook/rbac/bootstrap-roles","/livez/poststarthook/scheduling/bootstrap-system-priority-classes","/livez/poststarthook/start-apiextensions-controllers","/livez/poststarthook/start-apiextensions-informers","/livez/poststarthook/start-cluster-authentication-info-controller","/livez/poststarthook/start-kube-aggregator-informers","/livez/poststarthook/start-kube-apiserver-admission-initializer","/logs","/metrics","/openapi/v2","/openid/v1/jwks","/readyz","/readyz/autoregister-completion","/readyz/etcd","/readyz/informer-sync","/readyz/log","/readyz/ping","/readyz/poststarthook/aggregator-reload-proxy-client-cert","/readyz/poststarthook/apiservice-openapi-controller","/readyz/poststarthook/apiservice-registration-controller","/readyz/poststarthook/apiservice-status-available-controller","/readyz/poststarthook/bootstrap-controller","/readyz/poststarthook/crd-informer-synced","/readyz/poststarthook/generic-apiserver-start-informers","/readyz/poststarthook/kube-apiserver-autoregistration","/readyz/poststarthook/priority-and-fairness-config-consumer","/readyz/poststarthook/priority-and-fairness-config-producer","/readyz/poststarthook/priority-and-fairness-filter","/readyz/poststarthook/rbac/bootstrap-roles","/readyz/poststarthook/scheduling/bootstrap-system-priority-classes","/readyz/poststarthook/start-apiextensions-controllers","/readyz/poststarthook/start-apiextensions-informers","/readyz/poststarthook/start-cluster-authentication-info-controller","/readyz/poststarthook/start-kube-aggregator-informers","/readyz/poststarthook/start-kube-apiserver-admission-initializer","/readyz/shutdown","/version"]
}
[root@master1 ~]#
比如我们来查看批处理这个操作,在我们当前这个版本中存在两个版本的操作:/apis/batch/v1
和 /apis/batch/v1beta1
,分别暴露了可以查询和操作的不同实体集合.
实战:RBAC(基于角色的权限控制)-2021.11.28相关推荐
- 基于角色的权限控制模型RBAC
本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...
- 图文详解基于角色的权限控制模型RBAC
我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问.操作.数据权限.形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control).强制 ...
- AspNetForums中基于角色的权限控制
AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...
- RBAC(基于角色的权限访问控制)
第一节.RBAC简介 英文全称(Role-Based Access Control) 中文全称:基于角色的权限访问控制 rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制. 经 ...
- 部门角色权限rbac_k8s十 | 一文读懂基于角色的权限控制RBAC
一.ServiceAccount . 1. ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务 ...
- IdentityServer4实战 - 基于角色的权限控制及Claim详解
一.前言 大家好,许久没有更新博客了,最近从重庆来到了成都,换了个工作环境,前面都比较忙没有什么时间,这次趁着清明假期有时间,又可以分享一些知识给大家.在QQ群里有许多人都问过IdentityServ ...
- Django 基于角色的权限控制
有一种场景, 要求为用户赋予一个角色, 基于角色(比如后管理员,总编, 编辑), 用户拥有相应的权限(比如管理员拥有所有权限, 总编可以增删改查, 编辑只能增改, 有些页面的按钮也只有某些角色才能查看 ...
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
来源:http://hi.baidu.com/seamcker/blog/item/efcdad58f9cd3cdd9d82042f.html RBAC(基于角色的权限控制)是一个老话题了,但是这两天 ...
- 版本管理:Subversion Edge:角色与权限控制
这篇文章介绍一下Subverison Edge中内置的角色和权限控制方式和Edge所提供的页面操作功能. 环境和事前准备 Subversion Edge环境准备和仓库创建的操作可参看如下文章: htt ...
- 一个基于角色的权限控制系统
基于角色的权限控制也就是说通过角色,来控制用户访问的模块,不同的用户拥有不同的角色,将具有不同的访问权限. 系统截图 菜单管理,菜单也就是权限,拥有什么样的菜单就表示拥有什么样的权限,为了降低复杂性, ...
最新文章
- 总结jenkins Android自动打包遇到的坑
- BitmapFactory: inSampleSize 的一些思考
- 给你的Mr.Right画张择偶地图像
- think in java - 第一章 学习笔记
- 《信息学奥赛一本通》1283:登山
- Hive中外部表的alter与drop操作的最低权限要求
- js获取验证码倒计时60s(超简单)
- opencart china 书籍主题
- SQL语言入坑—1.数据的检索、排序、过滤、分组
- 2月20日 阻尼牛顿法,拟牛顿法(Quasi-Newton Methods)及各种具体实现方法,共轭梯度法(Conjugate Gradient)
- 将Spring Boot Web应用部署到Tomcat服务器
- 基于杂化材料银-氨基硅烷氧化石墨烯的化学战剂的电化学传感
- 国产8K摄像机记录中国航展的飞速发展
- 如果你是CEO,你打算给自己开多少工资?
- Flutter 快速上手定时器/倒计时及实战讲解
- Flink Table 和 DataStream 转换
- fedora14安装出错
- JAVA XML转对象 对象转XML
- 华为鸿蒙os3.0评测,华为鸿蒙OS威力初显!实测体验比EMUI更好 功耗却更低 惊喜还有很多...
- 电信运营商瓶颈凸显,期寄区块链带来新增长