kubernetes实战篇之Dashboard的访问权限限制
前面我们的示例中,我们创建的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的访问权限限制相关推荐
- kubernetes实战篇之通过api-server访问dashboard
系列目录 前面一节我们介绍了如何使用kube-proxy搭建代理访问dashboard,这样做缺点非常明显,第一可以通过http访问,第二是这种方式要启动一个后台进程,如果进程关闭了则不能够访问了,还 ...
- kubernetes实战篇之dashboard搭建
系列目录 kubernetes dashboard是kubernetes官方提供的web管理界面,通过dashboard可以很方便地查看集群的各种资源.以及修改资源编排文件,对集群进行扩容操作,查看日 ...
- kubernetes实战篇之helm示例yaml文件文件详细介绍
前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm Chart ...
- kubernetes实战篇之创建密钥自动拉取私服镜像
系列目录 前面我们讲解了如何搭建nexus服务器,以及如何使用nexus搭建docker私有镜像仓库,示例中我们都是手动docker login登陆私服,然后通过命令拉取镜像然后运行容器.然而这种做法 ...
- kubernetes实战篇之windows添加自签ca证书信任
系列目录 由于服务端设置了https访问,因此如果通过浏览器访问时会提示证书不被信任,但是仍然可以通过处理继续访问.但是在自动化环境中,都是通过命令来请求的,这样不受信任的https就会报错误,这样我 ...
- Vue 人资 实战篇八 权限设计 重点!!!路由访问权限,左侧导航栏显示等等,还有 mixin 混入方法
1.0 权限设计-RBAC的权限设计思想 传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为每个人都要单独去设置权限 基于此,RBAC的权限模型就应 ...
- 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(上)
目录 一.k8s 安全管理:认证.授权.准入控制概述 1.1 认证 认证基本介绍 授权基本介绍 准入控制基本介绍 为什么需要准入控制器呢? k8s 客户端访问 apiserver 的几种认证方式 ku ...
- 【云原生 | Kubernetes 实战】01、K8s-v1.25集群搭建和部署基于网页的 K8s 用户界面 Dashboard
目录 一.K8s 概述 可以查看官方文档:概述 | Kubernetes 组件交互逻辑: 二.kubeadm 安装 K8s-v1.25高可用集群 k8s 环境规划: 1.初始化环境 2.安装 Dock ...
- 【云原生 | Kubernetes 实战】18、K8s 安全实战篇之 RBAC 认证授权(下)
目录 一.常见角色(role)授权的案例 1.1 允许读取核心 API 组的 Pod 资源 1.2 允许读写 apps API 组中的 deployment 资源 1.3 允许读取 Pod 以及读写 ...
最新文章
- ASP.NET文件下载
- android xml: xliff:g
- (转载)python多行注释
- webapi文档描述-swagger
- mysql 磁盘组_第15期:索引设计(索引组织方式 B+ 树)
- HighCharts:plotLines基准线与数据相差过大不显示
- Linux kernel路由机制分析(上)
- 采用python的pyquery引擎做网页爬虫,进行数据分析
- mysql有关时间教程_MySQL教程21-日期和时间类型
- C# 修改Config文件,增删查改
- 折腾linux随笔 之 关闭Budgie默认自动隐藏应用的菜单栏 与 Gnome系桌面应用菜单无内容解决...
- PHP更换网页背景,更换网页的背景图
- Elasticsearch密码设置及其后续问题解决
- CVE-2017-0199漏洞分析
- Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】
- 【python】python代码实现多张图片合成视频
- 鼠标测试cps软件,人最多鼠标cps是多少?
- kubelet参数解释about kubelet gc image and evict pod.
- 详解企业内部即时通讯工具特点
- hdu 1496 QQpet exploratory park 水概率dp