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. Uboot 引导内核时加载地址与入口地址问题

    如果使用 mkimage 生成内核镜像文件的话,会在内核的前头加上了 64 bytes 的信息头,供建立 tag 之用.bootm 命令会首先判断 bootm xxx 这个指定的地址 xxx 与 -a ...

  2. Ubuntu安装与配置

    四.ubuntu下生成ngrok服务器主程序 4.1.步骤与先决条件 如果你只是临时穿透或调试用,到第三步基本就可以了,但如果想作为稳定的商业服务,用别人的服务器还是受制于人,这里我们准备搭建自己的n ...

  3. .NET JSON 转换 Error ” Self referencing loop detected for type“

    在进行实体转换为Json格式报错如下图: Self referencing loop detected for property 'md_agent' with type 'System.Data.E ...

  4. Linux免密码登录设置

    Linux免密码登录设置 假设要登录的机器为192.168.1.100,当前登录的机器为192.168.1.101. 首先在101的机器上生成密钥(如果已经生成可以跳过): $ ssh-keygen ...

  5. Swagger2限定接口范围

    前面在使用Swagger2时遇到的坑中简单介绍了Swagger的使用. 不过默认情况下,Swagger2会把项目中的所有接口都展示在列表里,特别是你用了Springboot/SpringCloud之后 ...

  6. 微信服务号 redirect_uri域名与后台配置不一致,错误代码10003

    微信服务号开发获取用户openid时一直提示 redirect_uri域名与后台配置不一致,错误代码10003:后台也配置了域名 原因: 结果:获取到了openid

  7. lfs(systemd版本)学习笔记-第4页

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! lfs(systemd版本)学习笔记-第3页 的地址:https://www.cnblogs.com/renren-study- ...

  8. 纯css抖动效果

    HTML: <button class="shake">按钮</button> CSS: .shake{ width: 120px; height: 33p ...

  9. element-ui中table表头表格错误问题解决

    我用的是element-ui v1.4.3 在iframe关闭和切换导航会引起有table的表格错位,解决办法: handleAdminNavTab: function(tab) { var admi ...

  10. Bootstrap里的文件分别代表什么意思及其引用方法

    关于Bootstrap打包的文件分别代表什么意思,官网也没有给出一个明确的解释,在网上查了一些资料,总价归纳了如下: bootstrap/ <!--主目录--> ├── css/ < ...