博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过set-context 控制namespace 进行隔离
阅读量:5108 次
发布时间:2019-06-13

本文共 2661 字,大约阅读时间需要 8 分钟。

 

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                                                                  209dcluster-admin                                                          209dedit                                                                   209dview                                                                   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": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "devops",      "OU": "System"    }  ]}

 

 

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

kubectl create namespace  longkubectl 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=longkubectl config use-context longkubectl get podError 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 kuberneteskubectl create rolebinding long  --clusterrole=admin --user=long -n longkubectl config use-context longkubectl 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

 

 

转载于:https://www.cnblogs.com/fengjian2016/p/10331225.html

你可能感兴趣的文章
JS 中的跨域请求
查看>>
JAVA开发环境搭建
查看>>
mysql基础语句
查看>>
Oracle中的rownum不能使用大于>的问题
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
遍历Map对象
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
SDN第四次作业
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
yii 跳转页面
查看>>
洛谷 1449——后缀表达式(线性数据结构)
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
Dirichlet分布深入理解
查看>>
(转)Android之发送短信的两种方式
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>