首页 > 其他分享 >Kubernetes 为用户使用 Dashboard 创建 RBAC 权限

Kubernetes 为用户使用 Dashboard 创建 RBAC 权限

时间:2024-02-01 16:47:52浏览次数:32  
标签:rbac Kubernetes Namespace namespace RBAC role Dashboard 创建 权限

文章目录

目录


系统环境:

  • kubernetes 版本:1.16.3

参考地址:

博文简介:

在我们正常开发过程中,经常要有很多开发组,每个组的应用是属于不同的项目,要分别为他们设置不同的 Namespace,方便让他们资源互不影响。常用的做法是为每个组创建各自的 Namespace,然后给他们 Dashboard 地址和 Token,如何分配 Token 的 RBAC 权限大小,正是我们需要考虑的问题。

常用做法是归属于哪个组的 Namespace 就拥有这个 Namespace 的 Admin 权限,接下来将介绍下,如何分配一个只拥有管理他们自己 Namespace 的权限的 Token。

一、创建 Namespace

这里先创建一个新的 Namespace 空间,用于后面演示。

rbac-namespace.yaml

kind: Namespace
apiVersion: v1
metadata:
  name: rbac-namespace

创建 Namespace:

$ kubectl apply -f rbac-namespace.yaml

二、创建 ServiceAccount

创建一个属于上面新建 Namespace 的服务账户,后面对其绑定权限,再获取其 Token 给空间的管理人员,方便其登录 Dashboard 且拥有一定的权限。

rbac-service-account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: rbac-service-account
  namespace: rbac-namespace     #指定上面创建的 Namespace

创建 ServiceAccount:

$ kubectl apply -f rbac-service-account.yaml

获取 ServiceAccount 的 Token:

注意修改 grep 后面的 ServiceAccount 名称和 -n 后面的 Namespace 名称。

$ kubectl describe secret/$(kubectl get secret -n rbac-namespace | grep rbac-service-account | awk '{print $1}') -n rbac-namespace

然后就可与看到 Token 串,需要将这个保存,方便后面登录 Dashboard,Token 如下:

eyJhbGciOiJSUzI1NiIsImtpZCI6IlZBZWNPbTNaQ2hLUWRhRFFU......(略)

三、创建 Namespace 的 RBAC 权限

这里有两种方法来对上面创建的服务账户绑定角色,进而赋予账户权限。

  • 方式一: 使用系统提供角色分配 Namespace 权限,系统提供了 admin(读、写)、view(读)、edit(写) 三种角色,可以直接与服务账户绑定进行赋权。
  • 方式二: 使用自定义角色分配 Namespace 权限,这种是创建一个角色绑定一定权限,然后将角色绑定服务账户,进行赋权。

1、方式一:使用系统提供角色分配 Namespace 权限

这里创建一个 RoleBinding 来绑定系统提供的 ClusterRole,其中 Kubernetes 默认提供了三种集群角色:

  • edit: 能够提供对某个 Namespace 写权限。
  • view: 能够提供对某个 Namespace 读权限。
  • admin: 管理员权限,能够提供对某个 Namespace 读、写权限。

rbac-role-binding-system.yaml

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rbac-role-binding
  namespace: rbac-namespace     #指定创建的 Namespace
subjects:
  - kind: ServiceAccount
    name: rbac-service-account  #指定创建的 ServiceAccount
    namespace: rbac-namespace   #指定创建的 Namespac
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin                   #使用系统提供三种角色 admin、edit、view

注意:这里使用 RoleBinding 和系统提供的 ClusterRoleBinding 绑定,而不是 ClusterRoleBinding,如果想赋予服务账户集群权限(管理多个 Namespace)可以使用 ClusterRoleBinding。

创建 RoleBinding:

$ kubectl apply -f rbac-role-binding.yaml

2、方式二:使用自定义角色分配 Namespace 权限

创建一个角色,给角色分配一定的权限,然后创建还得添加一个角色绑定对象,将角色和绑定到服务账户上,内容如下:

具体权限分配,可以参考博客最上面的官方文档地址。

rbac-role-binding-custom.yaml

#role
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rbac-role
  namespace: rbac-namespace                 #指定 Namespace
rules:                                      #权限分配
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]
  - apiGroups: ["extensions", "apps"]
    resources: ["deployments","statefulsets"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] 
---
#role binding
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rbac-role-binding
  namespace: rbac-namespace                 #指定 Namespace
subjects:
  - kind: ServiceAccount
    name: rbac-service-account              #指定 ServiceAccount
    namespace: rbac-namespace               #指定 Namespace
roleRef:
  kind: Role
  name: rbac-role
  apiGroup: rbac.authorization.k8s.io

创建角色与角色绑定绑定对象:

$ kubectl apply -f rbac-role-binding.yaml

四、解决登录 Dashboard 不能选择 Namespace 问题

在访问 Dashboard 时,输入 token 后进入界面,但是会发现进入的是默认的 default 空间,然后想点击 Namespace 选择框来切换到自定义空间,但是发现点击后可选择的列表为空。

img

这个问题经过一番考虑,是由于配置的 ServiceAccount 没有集群 Namespace 列表的权限,所以无法进行选择。解决这个问题很简单,只需要这里需要给 ServiceAccount 分配一个拥有 Namespace 列表的 ClusterRole 进行绑定即可。

rbac-cluster-role-binding.yaml

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rbac-namespace-role 
rules:  
  - apiGroups: [""]                     #配置权限,配置其只用于 namespace 的 list 权限
    resources: ["namespaces"]
    verbs: ["list"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rbac-default-role-binding
subjects:
  - kind: ServiceAccount
    name: rbac-service-account          #配置为自定义的 ServiceAccount
    namespace: rbac-namespace			#指定为服务账户所在的 Namespace
roleRef:
  kind: ClusterRole
  name: rbac-namespace-role             #配置上面的 Role
  apiGroup: rbac.authorization.k8s.io

执行命令创建 rbac 权限:

$ kubectl apply -f rbac-cluster-role.yaml

然后再次进入 Dashboard 点击 Namespace 框,这时候应该就能看到 Namespace 列表了。

img


到这里差不多配置完成,接下来就是拿着 Token 登录 Dashboard,进入后选择新创建的 Namespace,然后执行一些需要权限才能操作的命令(例如,创建与查看 Secret)进行测试。

标签:rbac,Kubernetes,Namespace,namespace,RBAC,role,Dashboard,创建,权限
From: https://www.cnblogs.com/gshelldon/p/18001562

相关文章

  • Kubernetes:kube-scheduler 源码分析
    0.前言[译]kubernetes:kube-scheduler调度器代码结构概述介绍了kube-scheduler的代码结构。本文围绕代码结构,从源码角度出发,分析kube-scheduler的调度逻辑。1.启动kube-schedulerkube-scheduler使用Cobra框架初始化参数,配置和应用。//kubernetes/cmd/kube-sche......
  • kubernetes健康检查配置解析
    参考:https://zhuanlan.zhihu.com/p/542202680一,健康检查种类在kubernetes中,经常会看到健康检查相关的配置。一般有两种健康检查方式:存活性健康检查和可用性健康检查,也叫做存活探针(livenessProbe)或者就绪探针(readinessProbe)。livenessProbe探测应用是否处于健康状态,如果不健康......
  • kubeadm安装Kubernetes集群踩坑笔记
    目录背景步骤一安装DockerEngine步骤二:安装前配置步骤三:安装kubeadm步骤四:安装kubernetes的Master节点镜像准备开始安装安装Flannel网络插件步骤五:安装kubernetes的Worker节点总结思考背景最近在极客时间上跟Chrono大神学习Kubernetes基础,在实践过程中遇到一些运维、使用方面......
  • 如何修改Azure Kubernetes Services节点池VM Size
    如何修改AzureKubernetesServices节点池大小今天和大家聊聊AzureKubernetesServices(AKS)修改节点池VMSize的问题。这也是很多客户在使用AKS的过程中都会遇到的一个问题。随着AKS群集使用时间的增长,很多客户都会面临扩展或修改AKS节点池VMSize的问题,具体的原因大致如下:性能优化......
  • Kubernetes 学习整理(五)
    k8s-ConfigMapConfigureaPodtoUseaConfigMapCreateaConfigMapCreateaConfigMapfromadirectory读取configmap内容并以yaml格式输出createconfigmapfromsingleonefileormorefilescreateconfigmapfromaenvfile:--from-env-file也支持多个en......
  • Kubernetes 推荐学习资料 课程 视频
    以下是一些推荐的Kubernetes学习资料、课程和视频:学习资料:Kubernetes官方文档:https://kubernetes.io/docs/home/《Kubernetes操作指南》(KubernetesUp&Running)一书,由KelseyHightower、BrendanBurns、JoeBeda著。《KubernetesinAction》一书,由MarkoLuksa著。《Kuberne......
  • kubernetes 导出干净的 yaml内容
    从Kubernetes集群导出对象的完整清单很容易,但它会包含无关的会计字段,这不仅难以直观地评估和与其原始形式进行比较,而且还可能导致重新申请失败。结合使用jq和yq实用程序,我们可以使用以下语法导出干净的yaml清单。 安装yq jq sudoadd-apt-repositoryppa:rmescando......
  • 三、kubernetes 集群 YAML 文件详解
    1、YAML文件概述k8s集群中对资源管理和资源对象编排部署都可以通过声明样式(YAML)文件来解决,也就是可以把需要对资源对象操作编辑到YAML格式文件中,我们把这种文件叫做资源清单文件,通过kubectl命令直接使用资源清单文件就可以实现对大量的资源对象进行编排部署了。2、YA......
  • 四、kubernetes 核心技术-Pod
    1、Pod概述Pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod对象功能的,比如控制器对象是用来管控Pod对象的,Service或者Ingress资源对象是......
  • 五、kubernetes 核心技术-Controller
    使用deployment部署应用(yaml)kubectlcreatedeploymentweb--image=nginx--dry-run-oyaml>web.yamlvimweb.yaml根据web.yaml创建deploymentkubectlapply-fweb.yaml查看应用kubectlgetpods对外发布(暴露对外端口号)kubectlexposedeploymentweb--p......