kubernetes RBAC  需要了解 rules  roles  subjects  rolebindings(role绑定)

rules 是一组操作 verbs 、资源 、 api组。

如果只允许创建对象并检索他们的信息, 那么可是使用 verbs 的  get list create, 一个verbs可以是 (*), 表示允许所有的操作。

规则的最后一个元素是 API 组 (apiGroup) , RBAC 使用 rbac.authorization.k8s.io 组

角色是规则的结合,它定义了一个或者多个规则, 这些规则可以绑定到用户 或者 用户组, 角色(role)的重要方面是,它们被应用到一个namespace中。 如果要创建一个指向整个集群的角色,可以使用clusterrole。 role 和 clusterrole 两者都是以相同的方式定义,唯一的区别在于范围(namespace 和  整个集群)

授权机制的下一个部分是subjects,它定义了正在执行操作的实体, 一个主题可以是一个用户, 一个组,一个serviceaccount, 用户是驻留在集群之外的人或者进程, serviceaccount 用于在想使用api的 pods内运行的进程。

rolebindings 它是主体与角色绑定在一起,由于主体定义用户,role绑定有效的用户(组或者serviceaccount),从而赋予他们对命名空间的特定对象执行某些操作的权限,rolebinding作用在namespace上, clusterrolebinding 作用在整个集群。

k8s 默认的预定义的集群角色

[root@master2 ssl]# kubectl get clusterrole | grep -E "view|admin|cluster-admin|edit" |grep -v "system"
admin 209d
cluster-admin 209d
edit 209d
view 209d

在设置admin的权限时, O(组) 是 system:masters,  是管理员。

CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
O:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
kube-apiserver 将提取的 User、Group 作为 RBAC 授权的用户标识;

[root@master2 ssl]# cat long-csr.json
{
"CN": "long",
"hosts": [],
"key": {
"algo": "rsa",
"size":
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "devops",
"OU": "System"
}
]
}

创建long的运行环境, long的运行环境绑定了 用户long,并且具有 namespace: long 的 admin权限。

kubectl create namespace  long
kubectl config set-credentials long --client-certificate=/etc/kubernetes/ssl/long.pem --embed-certs=true --client-key=/etc/kubernetes/ssl/long-key.pem
kubectl config set-context long --cluster=kubernetes --user=long --namespace=long
kubectl config use-context long kubectl get pod
Error from server (Forbidden): pods is forbidden: User "long" cannot list resource "pods" in API group "" in the namespace "default" #切换成 kubernetes运行环境,对long账户进行权限绑定,授予admin权限,那么可以在 这个namespace下 进行任何操作。
kubectl config use-context kubernetes
kubectl create rolebinding long --clusterrole=admin --user=long -n long kubectl config use-context long
kubectl get pod

用组替换用户

在证书中有 O : devops 组

kubectl create rolebinding long --clusterrole=admin --group=devops -n long
kubectl config use-context long
kubectl get pod

[root@master2 fengjian]# kubectl get pod
  NAME                  READY    STATUS    RESTARTS    AGE
  nginxlong-5cd9f7c58-2ff5j     1/1      Running    0         32m

 

通过set-context 控制namespace 进行隔离的更多相关文章

  1. Go 记录一次groutine通信与context控制

    需求背景: 项目中需要定期执行任务A来做一些辅助的工作,A的执行需要在超时时间内完成,如果本次执行超时了,那就不对本次的执行结果进行处理(即放弃这次执行).同时A又依赖B,C两个子任务的执行结果.B, ...

  2. docker理论 Cgroup namespace 各种隔离

    耦合 是指两个或两个以上的体系或者两种运动形式间通过相互作用而批次影响以至联合起来的现象. Nginx与apache 在同一台服务器运行都占用80端口,起冲突这是我们修改其中一个端口为8080 半解耦 ...

  3. springmvc 事务控制与数据库隔离级别

    springmvc 事物传播与数据库隔离控制 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html 一.Propagation ...

  4. 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)

    [编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...

  5. 主键生成器效率提升方案|基于雪花算法和Redis控制进程隔离

    背景 主键生成效率用数据库自增效率也是比较高的,为什么要用主键生成器呢?是因为需要insert主表和明细表时,明细表有个字段是主表的主键作为关联.所以就需要先生成主键填好主表明细表的信息后再一次过在一 ...

  6. 使用独立PID namespace防止误杀进程

    一段错误的代码 首先看一段错误的代码: #!/bin/bash SLICE=100; slppid=1; pidfile=/var/run/vpnrulematch.pid # 停止之前的sleep ...

  7. Docker 基础技术之 Linux namespace 详解

    Docker 是"新瓶装旧酒"的产物,依赖于 Linux 内核技术 chroot .namespace 和 cgroup.本篇先来看 namespace 技术. Docker 和虚 ...

  8. Docker 容器的隔离性

    Docker 容器的隔离性 就是 使用Linux namespace 来隔离运行环境和成 cgroup 限制容器使用的资源.  namespace 可以顾名思义 命名空间:所以可以理解为每个独立的容器 ...

  9. [转帖]linux namespace 和cgroup lxc

    https://blog.csdn.net/xiaoliuliu2050/article/details/53443863 5.1 linux namespace 和cgroup lxc 2016年1 ...

随机推荐

  1. 菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道

    中间件:是汇集到以处理请求和响应的一个应用程序管道的软件. 每个组件: 可以选择是否要将请求传递到管道中的下一个组件. 之前和之后调用管道中的下一个组件,可以执行工作. 使用请求委托来生成请求管道.  ...

  2. foreach 引发的值类型与引用类型思考

    用都知道的一句话概括:“引用类型在堆上,栈上只保存引用:值类型即可存放于栈上也可存放于堆上,值类型变量直接存储值本身”. class Program { static void Main(string ...

  3. UML速记

    依赖:虚线箭头 关联:实线箭头 接口:虚线三角 父类:实线三角 聚合:空心菱形 组合:实心菱形 顺着箭头方向: 依赖于和什么关联是什么的子类是什么的接口的实现是什么的聚合是什么的组合

  4. anaconda更新库命令

    输入y更新库

  5. [PHP] 算法-快速排序的PHP实现

    快速排序: 1.基于二分的思想 2.第一个作为基准数,左右各一个指针,同时扫描,右边先走,找到比基准数小的停下 左边再走,找到比基准数大的停下,左右交换 3.当左右相遇的时候,把当前的和基准数调换,递 ...

  6. ios -- 成员变量、实例变量与属性的区别

      最近打开手机就会被胡歌主演的<猎场>刷屏,这剧我也一直在追,剧中的郑秋冬,因为传销入狱五年,却在狱中拜得名师孙漂亮(孙红雷),苦学HR,并学习了心理学,成功收获两样法宝.出狱后因为怕受 ...

  7. cordova极光推送插件使用

    首先是在极光官网注册登录账号,然后创建推送应用,创建完应用之后,点击打开应用,设置应用的包名,保存: 然后回到应用主界面,看到AppKey,以及MasterSecret,这时候MasterSecret ...

  8. Go开发之路 -- Go语言基本语法 - 作业

    1. 判断101 - 200之间有多少个素数,并输出所有素数. package main import ( "fmt" ) var count = 0 func prime(a, ...

  9. linux学习笔记-安装配置使用clamav杀毒软件

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.安装clamav 2.更新病毒库 # freshclam 如果更新不了,或者更新特别慢,可以手动下载病毒库文件,放到/var ...

  10. php向数据库插入数据

    <?php header("Content-type: text/html;charset=utf-8"); $con = mysql_connect("local ...