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

 

最新文章

  1. Linux下Redis的安装和部署
  2. ORACLE10gRAC数据库迁移至10gRAC
  3. aBowman >>可以运用到自己博客上的小插件
  4. JavaScript小功能
  5. 解决msgfmt无法使用的问题
  6. hdu2093
  7. 线段树(倒序操作):POJ 2828 Buy Tickets
  8. windows设备驱动安装接口(自己仿写)
  9. How to get the file in a resource folder
  10. 使用ZeroBrane Studio调试Openresty lua脚本
  11. JavaScript JSON对象(一)
  12. BFS广度优先搜索 poj1915
  13. vue中moudles的作用及使用方法
  14. intellij idea 2016.3.5 控制台取消行数限制
  15. HDUOJ----4004The Frog's Games(二分+简单贪心)
  16. Python Web开发之路
  17. 网站使用 rel="noopener" 打开外部锚
  18. <摘录>linux signal 列表
  19. IntelliJ IDEA maven项目的基础配置
  20. php用explode,可以提供多个字符作为分割符来进行分割数组吗?

热门文章

  1. Repeater 控件的嵌套使用
  2. JavaScript中的递归
  3. canvas-0scale.html
  4. python爬虫实例--网易云音乐排行榜爬虫
  5. element-ui中table表头表格错误问题解决
  6. JS模拟实现数组的map方法
  7. Python实现排列组合
  8. Fiddler查看接口响应时间
  9. 洗礼灵魂,修炼python(49)--巩固篇—包
  10. 常用css字体英文写法