一、简介

基于角色的访问控制(“RBAC”)

http://docs.kubernetes.org.cn/80.html

(1)

Kubernetes的授权是基于插件形式的,常用的授权插件有以下几种:

  1. Node:node节点授权
  2. ABAC:基于属性的访问控制
  3. RBAC:基于角色的访问控制
  4. Webhook:自定义http回调方法

RBAC:http://docs.kubernetes.org.cn/148.html

  

基于角色的访问控制:如图,先让一个用户(Users)扮演一个角色(Role),让角色(Role)拥有权限,从而让用户拥有这样的权限,然后在授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问控制;

(2)Role和ClusterRole 

  Role是一系列的权限的集合,例如一个Role可以包含读取 Pod 的权限和列出 Pod 的权限, ClusterRole 跟 Role 类似,但是可以在集群中全局使用。

  Role只能授予单个namespace 中资源的访问权限。

  ClusterRole授权 >= Role授予(与Role类似),但ClusterRole属于集群级别对象:

    • 集群范围(cluster-scoped)的资源访问控制(如:节点访问权限)
    • 非资源类型(如“/ healthz”)
    • 所有namespaces 中的namespaced 资源(如 pod)

(3)RoleBinding和ClusterRoleBinding

RoleBinding是将Role中定义的权限授予给用户或用户组。它包含一个subjects列表(users,groups ,service accounts),并引用该Role,Role有了权限,用户也就有了权限。RoleBinding在某个namespace 内授权,ClusterRoleBinding适用在集群范围内使用。

  RoleBinding可以引用相同namespace下定义的Role。

  Role和ClusterRole、RoleBinding和ClusterRoleBinding关系如下图:

  

(4)

使用RoleBinding去绑定ClusterRole:

如果有10个名称空间,每个名称空间都需要一个管理员,而这些管理员的权限都是一致的。那么此时需要去定义这样的管理员,使用RoleBinding就需要创建10个Role,这样显得很麻烦。为此当使用RoleBinding去绑定一个ClusterRole时,该User仅仅拥有对当前名称空间的集群操作权限,此时只需要创建一个ClusterRole就解决了以上的需求。

 二、RBAC应用

 (1)Role --> User -->Rolebinding 

  用法:

  

  使用kubectl create进行创建角色(role),指定角色名称,--verb指定权限,--resource指定资源或者资源组,--dry-run:此模式不会真的创建;

  a、

  [root@master ~]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml  #先用--dry-run模式看一下role的定义

  

  b、生成资源定义清单

  [root@master ~]# cd manifests/

  #导出yaml文件,稍微编辑一下就能用了
  [root@master manifests]# kubectl create role pods-reader --verb=get,list,watch --resource=pods --dry-run -o yaml >role-demo.yaml

  [root@master manifests]# vim role-demo.yaml

  

  c、创建

  

(2)RoleBinding角色绑定  

创建方法:

使用kubectl create进行创建角色绑定,指定角色绑定的名称,--role|--clusterrole指定绑定哪个角色,--user指定哪个用户;  

  a、导出rolebinding资源定义清单文件

  [root@master manifests]# kubectl explain role  #查看资源定义清单字段

  [root@master manifests]# kubectl explain rolebinding  #查看资源定义清单字段

  [root@master manifests]# kubectl create rolebinding magedu-read-pods --role=pods-reader --user=magedu --dry-run -o yaml > rolebinding-demo.yaml

  

  b、创建,将权限授权给用户magedu

  [root@master manifests]# kubectl apply -f rolebinding-demo.yaml

  

  c、可见magedu已经绑定到了pods-reader角色上了;

  

  d、切换用户访问

  

  现在magedu已经有权限访问了;

  以上操作role和rolebinding都是只对当前名称空间生效;

  [root@master ~]# kubectl config use-context kubernetes-admin@kubernetes  #切换回kubernetes-admin用户

(2)ClusterRole-->ClusterRoleBinding-->User

  [root@master manifests]# kubectl explain clusterrole  #查看资源定义清单字段

  [root@master manifests]# kubectl explain clusterrolebinding  #查看资源定义清单字段

  a、导出clusterrole的资源定义清单文件

  [root@master manifests]# kubectl create clusterrole cluster-read --verb=get,list,watch --resource=pods -o yaml >clusterrole-demo.yaml

  [root@master manifests]# vim clusterrole-demo.yaml

  

  b、创建clusterrole

  [root@master manifests]# kubectl apply -f clusterrole-demo.yaml

  此时我们可以新建一个Linux系统账户,然后在这个系统账户下,将kubernetes的用户切换到magedu下,随后对magedu赋予clusterrole的权限;

  

  

  c、此时我们删除之前创建的rolebinding 解除magedu的权限;

  

  可见此时magedu已经没有了权限;

  

  d、创建clusterrolebinding

  导出yaml资源定义清单文件:

  [root@master ~]# kubectl create clusterrolebinding magedu-read-all-pods --clusterrole=cluster-read --user=magedu --dry-run -o yaml >manifests/clusterrolebinding-demo.yaml

  [root@master manifests]# vim clusterrolebinding-demo.yaml

  

  创建,将magedu绑定到clusterrole:

  [root@master manifests]# kubectl apply -f clusterrolebinding-demo.yaml

  

  查看,可见已经绑定到集群角色:

  

  

  e、此时我们切换到系统用户为ik8s的窗口,并且kubernetes的用户为maedu

  

  查看其他namespace的pod, 也是可以的:

  

  但是,现在是不能删pod的,因为没有授权:

  

以上可见,对用户magedu进行集群角色绑定,用户magedu将会获取对集群内所有资源的(namespace)对应权限。

(3)clusterrole --> rolebinding --> user

  将maedu通过rolebinding到集群角色clusterrole中,此时,magedu仅作用于当前名称空间的所有pods资源的权限;

  a、删除之前的clusterrolebinding

  

  b、导出yaml资源定义清单文件

  [root@master manifests]# kubectl create rolebinding magedu-read-pods --clusterrole=cluster-read --user=magedu --dry-run -o yaml >rolebinding-clusterrole-dmeo.yaml

  [root@master manifests]# vim rolebinding-clusterrole-dmeo.yaml

  

  c、创建rolebinding,将magedu绑定到clusterrole

  

  查看rolebinding

  

  可见magedu已经绑定到集群角色clusterrole上了;

  d、此时切换到系统用户ik8s的窗口

  可见magedu可以访问当前namespace的pod,但是不能访问其他namespace的pod;

  因为这种绑定方式,clusterrole是被降级的;

  

 (4)RBAC的三种授权访问方式

RBAC不仅可以对user进行访问权限的控制,还可以通过group和serviceaccount进行访问权限控制。user即单个用户,group是对一个组内的user进行授权;

上一节学习了Pod可以通过 spec.serviceAccountName来定义其是以某个serviceaccount的身份进行运行,当我们通过RBAC对serviceaccount进行访问授权时,即可以实现Pod对其他资源的访问权限进行控制。也就是说,当我们对serviceaccount进行rolebinding或clusterrolebinding,会使创建Pod拥有对应角色的权限和apiserver进行通信。

             

k8s-RBAC授权-十六的更多相关文章

  1. Kubernetes 基于 RBAC 的授权(十六)

    目录 一.RBAC介绍 1.1.角色和集群角色 1.2.RoleBinding 和 ClusterRoleBinding 1.3.资源 1.4.主体 二.命令行工具 2.1.kubectl creat ...

  2. 使用Typescript重构axios(二十六)——添加HTTP授权auth属性

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  3. 容器编排系统K8s之访问控制--RBAC授权

    前文我们了解了k8s上的访问控制机制,主要对访问控制中的第一关用户认证做了相关说明以及常规用户的配置文件的制作,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/ ...

  4. k8s之RBAC授权模式

    导读 上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用 RBAC授权模式 基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授 ...

  5. VMware vSphere 服务器虚拟化之十六 桌面虚拟化之VMware Horizon View

       VMware vSphere服务器虚拟化之十六 桌面虚拟化之VMware Horizon View  VMware Horizon View (原VMware View的升级版现在版本5.2)是 ...

  6. Service Account和RBAC授权

    一.介绍 Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它服务.Service Accou ...

  7. Spring Boot(十六):使用Jenkins部署Spring Boot

    Spring Boot(十六):使用Jenkins部署Spring Boot jenkins是devops神器,介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署 ...

  8. SpringBoot | 第二十六章:邮件发送

    前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息.而且基本上邮件的内容都是模版 ...

  9. 附006.Kubernetes RBAC授权

    一 RBAC 1.1 RBAC授权 基于角色的访问控制(RBAC)是一种基于个人用户的角色来管理对计算机或网络资源的访问的方法. RBAC使用rbac.authorization.k8s.io API ...

随机推荐

  1. BUPT 2012复试机考 1T

    题目描述 大家都知道,数据在计算机里中存储是以二进制的形式存储的. 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的. 你能帮帮 ...

  2. Dynamics CRM 2015/2016 Web API:新的数据查询方式

    今天我们来看看Web API的数据查询功能,尽管之前介绍CRUD的文章里面提到过怎么去Read数据,可是并没有详细的去深究那些细节,今天我们就来详细看看吧.事实上呢,Web API的数据查询接口也是基 ...

  3. 安卓APK瘦身

    之前打包的时候直接就用eclipse或者android studio直接生成签名文件,并没有关心大小问题,近期有人问我有没有对APK进行瘦身.对这方面内容一致没有关注过,今天试用了各种方式把项目签名a ...

  4. 2.6.2 用NPOI操作EXCEL--设置密码才可以修改单元格内容

    2.6.2 用NPOI操作EXCEL--设置密码       有时,我们可能需要某些单元格只读,如在做模板时,模板中的数据是不能随意让别人改的.在Excel中,可以通过“审阅->保护工作表”来完 ...

  5. 【手势交互】4. Kinect for XBox

    "You are the Controller",Kinect for Xbox的广告词.明白说明了Kinect体感的交互方式.作为一款集成了诸多先进视觉技术的自然交互设备,Kin ...

  6. 关于MP4视频拖动的原理与分析(一)

    本来想说说关于mp4和一些常见视频文件格式方面的历史. 如今想想没啥必要.毕竟本文是在讲关于mp4点播拖动方面的技术细节. 绪论,前言神马的显得有点多余. 说起MP4.不得不提"Digita ...

  7. java设计模式----复合模式

    复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题 要点: 1.MVC是复合模式,结合了观察者模式.策略模式和组合模式 2.模型使用观察者模式,以便观察者更新,同时保持 ...

  8. LeetCode(28)题解:Implement strStr()

    https://leetcode.com/problems/implement-strstr/ 题目: Implement strStr(). Returns the index of the fir ...

  9. Linux fork函数具体图解-同一时候分析一道腾讯笔试题

    原创blog.转载请注明出处 头文件: #include<unistd.h> #include<sys/types.h> 函数原型: pid_t fork( void); (p ...

  10. SEO搜索引擎基础原理