一、简介

基于角色的访问控制(“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. ETCD 单机安装

    由于测试的需要,有时需要搭建一个单机版的etcd 环境,为了方便以后搭建查看,现在对单机部署进行记录. 一.部署单机etcd 下载 指定版本的etcd下载地址 ftp://ftp.pbone.net/ ...

  2. 【嵌入式Linux+ARM】GPIO操作

    1.GPIO介绍 GPIO(general purpose i/o ports)意思为通用输入/输出端口,通俗的说就是一些引脚. 我们可以通过它们输出高低电平 或 读入引脚的状态. s3c2440中有 ...

  3. 如何推断一个P2P平台是否靠谱?

    推断一个站点,是否靠谱.是有规律可循的.P2P平台算是个新兴的电商类站点.   网上欺诈类的站点.不限于P2P,实在是太多了,真的有必要总结下最关键的几个靠谱指标.   最关键的2个   1.创始人和 ...

  4. hdu 1679 The Unique MST (克鲁斯卡尔)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24152   Accepted: 8587 D ...

  5. Python——正則表達式(2)

    本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...

  6. STL algorithm源代码:stl_algo.h

    <span style="font-size:18px;">// Algorithm implementation -*- C++ -*- // Copyright ( ...

  7. 源代码方式向openssl中加入新算法完整具体步骤(演示样例:摘要算法SM3)【非engine方式】

    openssl简单介绍 openssl是一个功能丰富且自包括的开源安全工具箱.它提供的主要功能有:SSL协议实现(包括SSLv2.SSLv3和TLSv1).大量软算法(对称/非对称/摘要).大数运算. ...

  8. [转载]JSONP跨域的原理解析

    JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于Java ...

  9. Ubuntu 16.04 LTS安装Eclipse配置Pydev

    原材料: 下载 jdk-8u121-linux-x64.tar.gz 下载 eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz 1.安装jdk sudo mkdir ...

  10. 让 Logo "飞" 出屏幕

    让 Logo "飞" 出屏幕   推荐序 本文介绍了一种思路,即利用矢量工具来生成动画的关键代码,然后进一步制作成完整的动画效果,感谢作者授权转载. 作者介绍:一缕殇流化隐半边冰霜 ...