前面我们的示例中,我们创建的ServiceAccount是与cluster-admin 绑定的,这个用户默认有最高的权限,实际生产环境中,往往需要对不同运维人员赋预不同的权限.而根据实际情况也可能会赋予开发人员只读的权限.这一节我们将介绍如何创建不同权限的用户.
  
  在开始之前,我们先了解一些关于kubernetes RABA的一些基本概念.
  
  Role
  
  Role表示是一组规则权限,只能累加,Role可以定义在一个namespace中,只能用于授予对单个命名空间中的资源访问的权限。比如我们新建一个对默认命名空间中Pods具有访问权限的角色:
  
  kind: Role
  
  apiVersion: rbac.authorization.k8s.io/v1beta1
  
  metadata:
  
  namespace: default
  
  name: pod-reader
  
  rules:
  
  - apiGroups: [""] # "" indicates the core API group
  
  resources: ["pods"]
  
  verbs: ["get", "watch", "list"]
  
  ClusterRole
  
  ClusterRole具有与Role相同的权限角色控制能力,不同的是ClusterRole是集群级别的,可以用于:
  
  集群级别的资源控制(例如 node 访问权限)
  
  非资源型 endpoints(例如 /healthz 访问)
  
  所有命名空间资源控制(例如 pods)
  
  比如我们要创建一个授权某个特定命名空间或全部命名空间(取决于绑定方式)访问secrets的集群角色:
  
  kind: ClusterRole
  
  apiVersion: rbac.authorization.k8s.io/v1beta1
  
  metadata:
  
  # "namespace" omitted since ClusterRoles are not namespaced
  
  name: secret-reader
  
  rules:
  
  - apiGroups: [""]
  
  resources: ["secrets"]
  
  verbs: ["get", "watch", "list"]
  
  RoleBinding和ClusterRoleBinding
  
  RoloBinding可以将角色中定义的权限授予用户或用户组,RoleBinding包含一组权限列表(subjects),权限列表中包含有不同形式的待授予权限资源类型(users、groups、service accounts),RoleBinding适用于某个命名空间内授权,而 ClusterRoleBinding适用于集群范围内的授权。
  
  比如我们将默认命名空间的pod-reader角色授予用户jane,这样以后该用户在默认命名空间中将具有pod-reader的权限:
  
  # This role binding allows "jane" to read pods in the "default" namespace.
  
  kind: RoleBinding
  
  apiVersion: rbac.authorization.k8s.io/v1beta1
  
  metadata:
  
  name: read-pods
  
  namespace: default
  
  subjects:
  
  - kind: User
  
  name: jane
  
  apiGroup: rbac.authorization.k8s.io
  
  roleRef:
  
  kind: Role
  
  name: pod-reader
  
  apiGroup: rbac.authorization.k8s.io
  
  RoleBinding同样可以引用ClusterRole来对当前 namespace 内用户、用户组或 ServiceAccount 进行授权,这种操作允许集群管理员在整个集群内定义一些通用的 ClusterRole,然后在不同的 namespace 中使用 RoleBinding 来引用
  
  例如,以下 RoleBinding 引用了一个 ClusterRole,这个 ClusterRole 具有整个集群内对 secrets 的访问权限;但是其授权用户 dave 只能访问 development 空间中的 secrets(因为 RoleBinding 定义在 development 命名空间)
  
  # This role binding allows www.huichengtxgw.com dave"www.wanhongzpt.com to read secrets in the "development" namespace.
  
  kind: RoleBinding
  
  apiVersion: rbac.authorization.k8s.io/v1beta1
  
  metadata:
  
  name: read-secrets
  
  namespace: development # This only www.baitengpt.com  grants permissions within the "development" namespace.
  
  subjects:
  
  - kind: User
  
  name: dave
  
  apiGroup: rbac.authorization.k8s.io
  
  roleRef:
  
  kind: ClusterRole
  
  name: secret-reader
  
  apiGroup: rbac.authorization.k8s.io
  
  使用 ClusterRoleBinding 可以对整个集群中的所有命名空间资源权限进行授权;以下 ClusterRoleBinding 示例展示了授权 manager 组内所有用户在全部命名空间中对 secrets 进行访问
  
  # This cluster role binding allows anyone in the www.yongshiyule178.com"manager" group to read secrets in any namespace.
  
  kind: ClusterRoleBinding
  
  apiVersion: rbac.authorization.k8s.io/v1beta1
  
  metadata:
  
  name: read-secrets-global
  
  subjects:
  
  - kind: Group
  
  name: manager
  
  apiGroup: rbac.authorization.k8s.io
  
  roleRef:
  
  kind: ClusterRole
  
  name: secret-reader
  
  apiGroup: rbac.authorization.k8s.io
  
  限制dashboard 用户权限
  
  有了上面的理论基础,我们就可以来新建一个用户,为该用户指定特定的访问权限了,比如我们要实现以下功能:
  
  新增一个新的用户tyler(tyler.yml)
  
  该用户只能对命名空间kube-system下面的pods和deployments进行管理
  
  首先,我们先创建这个ServiceAccount
  
  kubectl create sa tyler -n kube-system
  
  然后我们新建一个角色role-tyler(role-tyler.yml)
  
  kind: Role
  
  apiVersion: rbac.authorization.k8s.io/v1
  
  metadata:
  
  namespace: kube-system
  
  name: role-tyler
  
  rules:
  
  - apiGroups: [""]
  
  resources: ["pods"www.xingtuyLgw.com]
  
  verbs: ["get",www.changjianyl.com "watch", "list"]
  
  - apiGroups: ["extensions", "apps"]
  
  resources: ["deployments"]
  
  verbs: ["get", "list"www.yifayule2d.com, "watch", "create", www.yifa5yl.com"update", "patch", "delete"]
  
  注意上面的rules规则:管理pods和deployments的权限。
  
  然后我们创建一个角色绑定,将tyler用户绑定到role-tyler角色,这样用户就拥有了角色的权限.
  
  执行命令创建文件
  
  $ kubect create -f tyler.yml
  
  $ kubect create -f role-tyler.yml
  
  前面一节我们使用的是命令来创建角色和已有的role绑定,这做方法简单快捷,但是不便于像这里一样进行复杂的权限编排操作,也不便于版本管理.更为复杂的权限编排建议使用yml声明式的方式创建.
  
  使用创建的token登陆
  
  我们前面说过,某一用户的secret名称为用户名-token-随机字符串格式.我们可以使用kubectl describe secret secret名称 -n=kube-system的方式查看secret,然后把token复制到dashboard登陆页的token里就可以登陆了.

转载于:https://my.oschina.net/u/3386278/blog/3068814

kubernetes实战篇之Dashboard的访问权限限制相关推荐

  1. kubernetes实战篇之通过api-server访问dashboard

    系列目录 前面一节我们介绍了如何使用kube-proxy搭建代理访问dashboard,这样做缺点非常明显,第一可以通过http访问,第二是这种方式要启动一个后台进程,如果进程关闭了则不能够访问了,还 ...

  2. kubernetes实战篇之dashboard搭建

    系列目录 kubernetes dashboard是kubernetes官方提供的web管理界面,通过dashboard可以很方便地查看集群的各种资源.以及修改资源编排文件,对集群进行扩容操作,查看日 ...

  3. kubernetes实战篇之helm示例yaml文件文件详细介绍

    前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm Chart ...

  4. kubernetes实战篇之创建密钥自动拉取私服镜像

    系列目录 前面我们讲解了如何搭建nexus服务器,以及如何使用nexus搭建docker私有镜像仓库,示例中我们都是手动docker login登陆私服,然后通过命令拉取镜像然后运行容器.然而这种做法 ...

  5. kubernetes实战篇之windows添加自签ca证书信任

    系列目录 由于服务端设置了https访问,因此如果通过浏览器访问时会提示证书不被信任,但是仍然可以通过处理继续访问.但是在自动化环境中,都是通过命令来请求的,这样不受信任的https就会报错误,这样我 ...

  6. Vue 人资 实战篇八 权限设计 重点!!!路由访问权限,左侧导航栏显示等等,还有 mixin 混入方法

    1.0 权限设计-RBAC的权限设计思想 传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为每个人都要单独去设置权限 基于此,RBAC的权限模型就应 ...

  7. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)

    目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...

  8. 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard

    目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...

  9. 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)

    目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...

最新文章

  1. ASP.NET文件下载
  2. android xml: xliff:g
  3. (转载)python多行注释
  4. webapi文档描述-swagger
  5. mysql 磁盘组_第15期:索引设计(索引组织方式 B+ 树)
  6. HighCharts:plotLines基准线与数据相差过大不显示
  7. Linux kernel路由机制分析(上)
  8. 采用python的pyquery引擎做网页爬虫,进行数据分析
  9. mysql有关时间教程_MySQL教程21-日期和时间类型
  10. C# 修改Config文件,增删查改
  11. 折腾linux随笔 之 关闭Budgie默认自动隐藏应用的菜单栏 与 Gnome系桌面应用菜单无内容解决...
  12. PHP更换网页背景,更换网页的背景图
  13. Elasticsearch密码设置及其后续问题解决
  14. CVE-2017-0199漏洞分析
  15. Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】
  16. 【python】python代码实现多张图片合成视频
  17. 鼠标测试cps软件,人最多鼠标cps是多少?
  18. kubelet参数解释about kubelet gc image and evict pod.
  19. 详解企业内部即时通讯工具特点
  20. hdu 1496 QQpet exploratory park 水概率dp

热门文章

  1. 用python实现给女朋友自动发微信
  2. 前端实现文件下载功能
  3. 在eclipse上配置tomcat出现8080端口被占用问题
  4. 数据解读 | FPX轻松夺冠,但英雄联盟还能有下一个10年吗?
  5. Windows修改hosts文件的方法
  6. MSRA TD-500数据集
  7. 今日头条与网易新闻客户端内容详情页对比
  8. 【win10小技巧】解决windows 10睡眠后再唤醒,就会自动关机并重启的问题(仅限Dell)
  9. SIMATIC S7-300 Profibus通讯——(3)DP/DP Coupler使用
  10. 漫画研发之十:小白兔钓鱼