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的更多相关文章

  1. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  2. [转贴]CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群

    CentOS7.5 Kubernetes V1.13(最新版)二进制部署集群 http://blog.51cto.com/10880347/2326146   一.概述 kubernetes 1.13 ...

  3. Kubernetes V1.15 二进制部署集群

    1. 架构篇 1.1 kubernetes 架构说明              1.2 Flannel网络架构图 1.3 Kubernetes工作流程             2. 组件介绍 2.1 ...

  4. kubernetes V1.16 Ingress-nginx部署

    Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePo ...

  5. Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)

    Kubernetes平台环境规划 操作环境 rbac 划分(HA高可用双master部署实例) 本文穿插了ha 高可用部署的实例,当前章节设计的是ha部署双master 部署 内网ip 角色 安装软件 ...

  6. kubeadm安装kubernetes V1.11.1 集群

    之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...

  7. Kubernetes v1.10.x HA 全手动安装教程(TL;DR)

    转自 https://www.kubernetes.org.cn/3814.html 本篇延续过往手动安装方式来部署 Kubernetes v1.10.x 版本的 High Availability ...

  8. Kubernetes v1.10----部署kubernetes-dashboard v1.83

    Kubernetes v1.10----部署kubernetes-dashboard v1.83 1.下载 kubernetes-dashboard  yaml文件 #因为文件中的image指定的是谷 ...

  9. Kubernetes v1.16 发布 | 云原生生态周报 Vol. 20

    作者:心贵.进超.元毅.心水.衷源.洗兵 业界要闻 Kubernetes v1.16 发布 在这次发布中值得关注的一些特性和 Feature: CRD 正式进入 GA 阶段: Admission We ...

随机推荐

  1. Who's in the Middle

    FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median' ...

  2. js功能代码大全

    1.日期格式化 //化为2017-08-14 function formatDate (date) { var y = date.getFullYear(); var m = date.getMont ...

  3. ElasticSearch 学习记录之ES如何操作Lucene段

    近实时搜索 提交(Commiting)一个新的段到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据.但是每次提交的一个新的段都fsync 这样操作代价过大.可以使用 ...

  4. Nginx完整配置配置样例【官方版】

    我们主要参考nginx官方给出的完整配置的样例: https://www.nginx.com/resources/wiki/start/topics/examples/full/# 完整摘录如下: n ...

  5. VOOC还真算是OPPO的核心技术

    经常电视看到OPPO打广告说它的VOOC,觉得好奇怪,就一个手机充电讲个不完,尽是骗3.4线城市的人,不过今天研究了一下,还VOOC真算是它的核心技术了. 现在选手机,电池和充电速度是非常重要的,首先 ...

  6. 物联网细分领域-车联网(OBD)市场分析

    前言: 这段时间在跟一个车联网的项目,所以做了一些研究. OBD概述 OBD是英文On-Board Diagnostic的缩写,中文翻译为"车载诊断系统".这个系统随时监控发动机的 ...

  7. 通过pyenv和virtualenv创建多版本Python虚拟环境

    虚拟环境使用第三方工具virtualenv创建,首先输入以下命令检查系统是否已经安装virtualenv. $ virtualenv --version 如果显示virtualenv版本号,则说明已经 ...

  8. 教育改革——国家认证 “网红” 编程语言 Python

     特大消息!!!  不止是上海计算机二级考试 ,全国计算机考试等级考试也有要求 如果你正打算考计算机等级,那你需要学习以下知识 要求学习的知识太多了,我就不一一在这里展示了! 一.考试改革的目标 据悉 ...

  9. java的Xmx是设置什么的?

    我们使用java -X可以看到java的-X系列的参数,Xmx和Xms是相对应的.一个是memory max(Xmx) 一个是memory start (Xms). Xmx代表程序最大可以从操作系统中 ...

  10. 进程管理工具Supervisor(二)Events

    supervisor可以当做一个简单的进程启动.重启.控制工具使用,也可以作为一个进程监控框架使用,作为后者,需要使用supervisor的Events机制. Event Listeners supe ...