Kubernetes v1.6开始支持RBAC
Kubernetes v1.6的一个亮点就是RBAC认证特性成为了beta版本。RBAC,基于角色的访问控制(Role-Based Access Control),是用于管理Kubernetes资源访问权限的认证机制。RBAC支持灵活的认证策略配置,使得集群在不重启的情况下就可以升级权限。
本文重点聚焦在一些有趣的新特性和实践上。
RBAC vs ABAC
当前Kubernetes已经支持多种认证模式。认证器是一种机制,可以决定用户是否被允许通过Kubernetes API对集群做出一些修改。这会影响到kubectl、系统组件、还有运行在集群中和操纵集群状态的某些应用,如Jenkins的Kubernetes插件,或者是运行在集群中的Helm,它使用Kubernetes API在集群中部署应用。在可用的授权机制中,ABAC和RBAC都是Kubernetes集群的本地机制,都可以对访问策略进行配置。
ABAC,基于属性的访问控制(Attribute Based Access Control),是一种很强大的概念。然而在Kubernetes的实现中,ABAC难以管理和理解。要改变授权策略,要求有集群master节点的ssh和根文件系统的访问权限。而且,只有在集群的API server重启后,权限变更才会生效。
RBAC权限策略通过kubectl或者直接使用Kubernetes API来配置。可以通过RBAC来授权用户,从而在不给予用户集群master的ssh访问权限情况下,可以进行资源管理。RBAC策略能够轻松地映射资源和Kubernetes API中使用的操作。
基于Kubernetes社区的开发力度,未来RBAC应该会取代ABAC。
基本概念
要理解RBAC,这里有一些基本理念。最核心的,RBAC是一种授权用户对Kubernetes API资源进行不同粒度访问的方式。

用户和资源的连接是使用RBAC的下面两个对象来定义的。
角色(Roles)
角色是一系列权限的集合。比如,角色可以被定义为包含pod的读权限和列表(list)权限。ClusterRole(集群角色)和角色很像,但它可以被使用在集群中的任何位置。
角色绑定(Role Bindings)
角色绑定将角色映射到一个用户或者一组用户,把角色在命名空间中对资源的权限授权给这些用户。ClusterRoleBinding(集群角色绑定)允许授权用户ClusterRole的在整个集群中的授权访问。

此外,还需要考虑集群角色和集群角色绑定。集群角色和集群角色绑定功能就像角色和角色绑定一样,只是有着更宽的使用范围。集群用户、集群用户绑定和用户、用户绑定之间的准确区别,详见Kubernetes doc。
Kubernetes中的RBAC
RBAC现在已经被深度集成在Kubernetes中,并使用它授权给系统组件使用。系统角色以system为前缀,因此可以轻易地识别出来。
$ kubectl get clusterroles --namespace=kube-system
NAME KIND
admin ClusterRole.v1beta1.rbac.authorization.k8s.io
cluster-admin ClusterRole.v1beta1.rbac.authorization.k8s.io
edit ClusterRole.v1beta1.rbac.authorization.k8s.io
kubelet-api-admin ClusterRole.v1beta1.rbac.authorization.k8s.io
system:auth-delegator ClusterRole.v1beta1.rbac.authorization.k8s.io
system:basic-user ClusterRole.v1beta1.rbac.authorization.k8s.io
system:controller:attachdetach-controller ClusterRole.v1beta1.rbac.authorization.k8s.io
system:controller:certificate-controller ClusterRole.v1beta1.rbac.authorization.k8s.io
...
扩充了RBAC的系统角色,仅使用RBAC就能管理运行Kubernetes集群所需的权限。
在从ABAC到RBAC的权限迁移期间,一些在ABAC授权的deployment中默认使能的权限,在RBAC中被识别为是没有必要的,权限会在RBAC中被降级。可能会影响到服务帐户的权限的负载。在ABAC配置下,使用pod映射token来授权API server的pod请求有着很高的权限。一个具体的例子,当使能ABAC时,下面的curl命令会返回一个JSON格式的正确结果,而只使能RBAC时则会返一个错误。
$ kubectl run nginx --image=nginx:latest
$ kubectl exec -it $(kubectl get pods -o jsonpath='{.items[0].metadata.name}') bash
$ apt-get update && apt-get install -y curl
$ curl -ik \
-H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" \
https://kubernetes/api/v1/namespaces/default/pods
在从ABAC迁移为RBAC的过程中,Kubernetes集群中运行的任何应用,只要和Kubernetes API交互,都可能被权限迁移所影响。
为了使ABAC到RBAC的迁移尽量平滑,你可以在创建Kubernetes v1.6集群时,同时使能ABAC和RBAC授权。当同时使能ABAC和RBAC时,如果任一授权策略授以访问权限,则都被会授予资源权限。然而,然而在这种配置下,被赋予了太宽容的权限,在完全的RBAC环境下可能无法工作。
现在,RBAC完全足够,ABAC的支持未来应该考虑被弃用。在可预见的未来,它应该还会保存在Kubernetes中,不过开发主要集中在RBAC上了。
在Google Cloud Next会议上,有两篇涉及到Kubernetes v1.6中BRAC相关改变的演讲,可通过这里和这里来查看相关部分。如果要查看更多关于Kubernetes v1.6使用RBAC的详细信息,阅读完整的RBAC文档。
Kubernetes v1.6开始支持RBAC的更多相关文章
- K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群
0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...
- [转贴]CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群
CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群 http://blog.51cto.com/10880347/2326146 一.概述 kubernetes 1.13 ...
- Kubernetes V1.15 二进制部署集群
1. 架构篇 1.1 kubernetes 架构说明 1.2 Flannel网络架构图 1.3 Kubernetes工作流程 2. 组件介绍 2.1 ...
- kubernetes V1.16 Ingress-nginx部署
Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePo ...
- Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)
Kubernetes平台环境规划 操作环境 rbac 划分(HA高可用双master部署实例) 本文穿插了ha 高可用部署的实例,当前章节设计的是ha部署双master 部署 内网ip 角色 安装软件 ...
- kubeadm安装kubernetes V1.11.1 集群
之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...
- Kubernetes v1.10.x HA 全手动安装教程(TL;DR)
转自 https://www.kubernetes.org.cn/3814.html 本篇延续过往手动安装方式来部署 Kubernetes v1.10.x 版本的 High Availability ...
- Kubernetes v1.10----部署kubernetes-dashboard v1.83
Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下载 kubernetes-dashboard yaml文件 #因为文件中的image指定的是谷 ...
- Kubernetes v1.16 发布 | 云原生生态周报 Vol. 20
作者:心贵.进超.元毅.心水.衷源.洗兵 业界要闻 Kubernetes v1.16 发布 在这次发布中值得关注的一些特性和 Feature: CRD 正式进入 GA 阶段: Admission We ...
随机推荐
- ArcGIS 网络分析[8.5] 资料5 网络分析拓展模块及各种接口说明
说完了网络数据集如何用AO来创建,接下来就说说如何用另一个类库--NetworkAnalyst来做网络分析. 区别于NetworkAnalysis,这个是几何网络分析用的类库. 本篇先做类库和有关接口 ...
- 【WebGL】《WebGL编程指南》读书笔记——第2章
一.前言 最近看了<WebGL编程指南>这本书,发现还是很有意思的,故每章阅读后做个笔记. 二.正文 Example1:在canvas中绘制矩形 <!DOCTYPE html> ...
- 搭建PHP本地服务器(XAMPP)
1.下载XAMPP集成包 https://www.apachefriends.org/download.html2.启动前修改配置文件httpd.conf的端口号,例如:Listen 80803.启动 ...
- java多线程(三)-Executors实现的几种线程池以及Callable
从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
- UWP 手绘视频创作工具技术分享系列 - 文字的解析和绘制
本篇作为技术分享系列的第二篇,详细讲一下文字的解析和绘制,这部分功能的研究和最终实现由团队共同完成,目前还在寻找更理想的实现方式. 首先看一下文字绘制在手绘视频中的应用场景 文字是手绘视频中很重要的表 ...
- 一张图,理解JAVA体系结构、运行机制、JVN运行机制、Java平台(初学)
初学JAVA,学一门语言不仅仅是学其语法,逻辑思维能力,还有每一门语言都有自己独特的一方面,所以才有那么多语言要学啊 = =,所以想要真的学好语言,其编译机制,运行机制多少也要涉猎一些啊.这是初学JA ...
- 分布式监控系统Zabbix3.2添加自动发现磁盘IO并注册监控
zabbix并没有给我们提供这么一个模板来完成在Linux中磁盘IO的监控,所以我们需要自己来创建一个,在此还是在Linux OS中添加. 由于一台服务器中磁盘众多,如果只一两台可以手动添加,但服务 ...
- webstorm方向键与电脑快捷键冲突
1.桌面上,单击鼠标右键,选择"图形属性" 2.单击"选项和支持" 3.在图示框框中,修改电脑上的快捷键
- 怎样在Win7系统建立并开启Wifi热点
怎样在Win7系统建立并开启Wifi热点 步骤/方法: 1.首先,确定你的笔记本已经开启了无线. 点击电脑左下角的开始,在搜索程序和文件栏输入cmd. 2.在上图中找到Windows命令处理程序cmd ...
- mysql加锁读
Locking Reads 在同一个事务中,如果你先查询数据,随后对相关数据进行插入或修改,那么在标准的SLELECT中不会给出足够的保护.在你查询期间另一个事务可以更新或者删除相同的行.InnoDB ...