k8s Dashboard 2.7 使用EIP和多权限角色token的解决方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 原创自定义角色权限解决方案

dashboard 2. 7 使用EIP和多权限角色token的解决方案

v3.0当前是alpha版本,不建议使用。

下文均是关于v2.7版本的配置和介绍。

1 配置文件修改

Kubernetes-dashboard.yaml

## 首先是配置文件,因为我的环境中,现在有metelLB可以自动给LB类型的port分配IP地址,所以修改下svc的port类型。
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: LoadBalancer   ## 主要就是增加这里。
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

2 安装

 kubectl apply -f Kubernetes-dashboard.yaml

3 权限配置

dashboard有很多种配置权限的方法。具体参考access-control

我们选用官方推荐的Bearer Token的方式。这种方式的权限,完全是基于k8s的RBAC认证体系,简单的说,就是通过serviceaccount(相当于用户名),role(角色权限定义),rolebinding(用户和权限的关联关系)来配置的。最后通过create token的方式,生成一个密钥。

我这里针对两种大的类型,举个例子,比官方readme,要完善的多,特别是定义在特定名字空间具有特定权限的情况。

5.3.1 cluster 管理员

apiVersion: v1
kind: ServiceAccount
metadata:
  name: dborad-admin
  namespace: kubernetes-dashboard

---
## 给dborad-admin角色添加权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:   ##就是用户名
- kind: ServiceAccount
  name: dborad-admin
  namespace: kubernetes-dashboard

## cluster-admin是系统预定义的管理员角色,所以不用单独定义。

apply以后,

kubectl -n kubernetes-dashboard create token dboard-admin

就可以获得token值。

5.3.2 特定用户

下面这一段,我认为是写的比较完善的,网上没有类似的参考材料。

在两个名字空间定义了相同的serviceaccount,这是没问题的,因为在不同的名字空间重名没关系。

定义了一个cluster都可以适用的权限定义,但是不用担心用户会越权,因为rolebinding里,限制了namespace,这里不能用clusterrolebinding,原因就是clusterrolebinding是全cluster层次都有用,namespace就无效了。

## 给dashboard定义普通用户名
##相当于定义用户名
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dboard-user
  namespace: testcloud-dev-a
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dboard-user
  namespace: testcloud-dev-b
---
## 定义全局权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-dev-admin
rules:
- apiGroups: [""]
  resources: ["pods","services", "pods/log", "endpoints", "namespaces","secrets","events","serviceaccounts"]
  verbs: ["get","watch","list","create","update","patch","delete"]
- apiGroups: [""]
  resources: ["persistentvolumes","persistentvolumeclaims","configmaps","ingressclasses","ingresses","replicationcontrollers"]
  verbs: ["get","watch","list","create","update","patch","delete"]
- apiGroups: ["extensions", "apps","batch"]
  resources: ["deployments","ingresses","daemonsets","replicasets","jobs","cronjobs","statefulsets"]
  verbs: ["get", "list", "watch"]  
- apiGroups: ["rbac.authorization.k8s.io"]
  resources: ["roles","RoleBinding","clusterroles"]
  verbs: ["get", "list", "watch"]  
- apiGroups: ["networking.k8s.io"]
  resources: ["ingresses","networkpolicies"]
  verbs: ["get", "list", "watch"]    


---
## 绑定,一定是rolebinding,不然会越权。
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: testcloud-dev-a
  name: dev-a-admin-binding
roleRef:
  kind: ClusterRole
  name: cluster-dev-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: dboard-user   # 用户名
  namespace: testcloud-dev-a

---
## 绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: testcloud-dev-b
  name: dev-b-admin-binding
roleRef:
  kind: ClusterRole
  name: cluster-dev-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: dboard-user   # 用户名
  namespace: testcloud-dev-b

这里的role定义,有个小技巧,就是对确定需要分配的权限,如果点击,在dashboard的消息里会有提示,根据其中的api group和 resources属性,增加对应rules。

也可以用命令,获取所有可以配置选择的resources名字,最左面的NAME一列就是,切记是name一列,不是KIND那列,实测。

[root@master dashboard]# kubectl api-resources --sort-by=nameuser@k8s-master:~$  kubectl api-resources --sort-by=name
NAME                              SHORTNAMES   APIVERSION                             NAMESPACED   KIND
addresspools                                   metallb.io/v1beta1                     true         AddressPool
alertmanagerconfigs               amcfg        monitoring.coreos.com/v1alpha1         true         AlertmanagerConfig
alertmanagers                     am           monitoring.coreos.com/v1               true         Alertmanager
apdoslogconfs                                  appprotectdos.f5.com/v1beta1           true         APDosLogConf
apdospolicies                                  appprotectdos.f5.com/v1beta1           true         APDosPolicy
apiservices                                    apiregistration.k8s.io/v1              false        APIService
aplogconfs                                     appprotect.f5.com/v1beta1              true         APLogConf
appolicies                                     appprotect.f5.com/v1beta1              true         APPolicy
apusersigs                                     appprotect.f5.com/v1beta1              true         APUserSig
bfdprofiles                                    metallb.io/v1beta1                     true         BFDProfile
bgpadvertisements                              metallb.io/v1beta1                     true         BGPAdvertisement
## 增加了有效期,--ttl duration     Default: 24h0m0s
The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire
kubectl -n testcloud-dev-a create token dboard-user  --duration=1440h
user@k8s-master:~$ kubectl -n testcloud-dev-a create token dboard-user
eyJ______________________________
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
存储 Kubernetes 网络协议
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
|
2月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
128 1
K8S的Service的LoadBanlance之Metallb解决方案
|
2月前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
306 4
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
6月前
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
374 8
|
2月前
|
Kubernetes 容器
Kubernetes附加组件Dashboard部署实战篇
关于如何在Kubernetes集群中部署和配置Dashboard组件的详细实战指南,涵盖了从创建证书、部署Dashboard、设置服务访问到登录认证的完整流程。
403 0
Kubernetes附加组件Dashboard部署实战篇
|
3月前
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
3月前
|
运维 Kubernetes 监控
云原生时代的运维革新:Kubernetes 在现代 IT 架构中的角色
随着云计算的不断演进,传统的运维模式已逐渐不能满足快速迭代和弹性伸缩的需求。本文将深入探讨 Kubernetes 作为容器编排工具如何引领运维领域的变革,并展示其在现代 IT 架构中的应用价值。通过实例分析,我们将了解 Kubernetes 如何优化资源管理、自动化部署和提高系统可靠性,同时指出实践中可能遇到的挑战及应对策略。
|
3月前
|
运维 Kubernetes 监控
自动化运维:使用Python脚本实现系统监控云原生技术实践:Kubernetes在现代应用部署中的角色
【8月更文挑战第31天】在现代IT运维管理中,自动化已成为提高效率和准确性的关键。本文将通过一个Python脚本示例,展示如何实现对服务器的自动监控,包括CPU使用率、内存占用以及磁盘空间的实时监测。这不仅帮助运维人员快速定位问题,也减轻了日常监控工作的负担。文章以通俗易懂的语言,逐步引导读者理解并实践自动化监控的设置过程。 【8月更文挑战第31天】本文旨在探索云原生技术的核心—Kubernetes,如何革新现代应用的开发与部署。通过浅显易懂的语言和实例,我们将一窥Kubernetes的强大功能及其对DevOps文化的影响。你将学会如何利用Kubernetes进行容器编排,以及它如何帮助你的
|
4月前
|
人工智能 运维 安全
阿里云容器服务ACK:高效管理云上应用的容器化解决方案
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)为开发者提供了一套全面的容器化管理解决方案,旨在简化云上应用的部署、运维和管理。本文将深入探讨ACK的功能、优势及应用场景,为开发者展现容器化技术在云环境下的强大能力。
328 0
|
3月前
|
Kubernetes 监控 Docker
[kubernetes]安装dashboard
[kubernetes]安装dashboard
232 0

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    无影云桌面