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 ...
随机推荐
- shell 踩坑记
变量赋值时,等号两边不能有空格: 在判断表达式中,不论是 [ -n "$1" ] 还是 [ -f "$1" ] 都要在变量两侧加上双引号: 在使用与或非判断式 ...
- 对 Java 集合的巧妙利用
我们直接切入正题.首先大致介绍一下 Java 三大集合的一些特征: ①.ArrayList:底层采用数组结构,里面添加的元素有序可以重复. ②.HashSet:底层采用哈希表算法,里面添加的元素无序不 ...
- react看这篇就够了(react+webpack+redux+reactRouter+sass)
本帖将对一下内容进行分享: 1.webpack环境搭建: 2.如何使用react-router: 3.引入sass预编译: 4.react 性能优化方案: 5.redux结合react使用: 6.fe ...
- requireJS教程
目录[-] 使用 RequireJS 优化 Web 应用前端 AMD 简介 传统 JavaScript 代码的问题 AMD 的引入 清单 1. AMD 规范 RequireJS 简介 实战 Requi ...
- python打开一个本地目录文件路径
os.path.abspath()os 模块为 python 语言标准库中的 os 模块包含普遍的操作系统功能.主要用于操作本地目录文件.path.abspath()方法用于获取当前路径下的文件. 比 ...
- [SharePoint]解决用户权限被无缘无故自动删除的问题
前几天在维护公司内网的时候接到了一个case, 说是某个用户的权限无缘无故的就会被SharePoint自动去掉. 刚开始我还不愿意相信这个用户的说法,认为可能是权限赋的方法不对,有可能是被其他人误删了 ...
- ES6 Generators的异步应用
ES6 Generators系列: ES6 Generators基本概念 深入研究ES6 Generators ES6 Generators的异步应用 ES6 Generators并发 通过前面两篇文 ...
- hive问题: For direct MetaStore DB connections, we don't support retries at the client level
已经配置好hive,mysql作为元数据的数据库.在hive中执行drop语句出错: drop table mytest; 错误提示如下: FAILED: SemanticException Unab ...
- js 拼接table 的方法
<html> <head> <title>test page</title> <script type='text/javascript'> ...
- 分享html5的一个拖拽手法
就是这样的效果:拖拽之前 之后: 上代码: <!DOCTYPE html> <html lang="en"> <head> <meta c ...