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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 原创自定义角色权限解决方案

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搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
存储 Kubernetes 网络协议
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
使用 K8S 部署 RSS 全套自托管解决方案 - RssHub + Tiny Tiny Rss
|
3月前
|
Kubernetes 搜索推荐 网络协议
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案
207 8
|
4天前
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
13天前
|
运维 Kubernetes 监控
云原生时代的运维革新:Kubernetes 在现代 IT 架构中的角色
随着云计算的不断演进,传统的运维模式已逐渐不能满足快速迭代和弹性伸缩的需求。本文将深入探讨 Kubernetes 作为容器编排工具如何引领运维领域的变革,并展示其在现代 IT 架构中的应用价值。通过实例分析,我们将了解 Kubernetes 如何优化资源管理、自动化部署和提高系统可靠性,同时指出实践中可能遇到的挑战及应对策略。
|
21天前
|
人工智能 运维 安全
阿里云容器服务ACK:高效管理云上应用的容器化解决方案
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)为开发者提供了一套全面的容器化管理解决方案,旨在简化云上应用的部署、运维和管理。本文将深入探讨ACK的功能、优势及应用场景,为开发者展现容器化技术在云环境下的强大能力。
80 0
|
12天前
|
Kubernetes 监控 Docker
[kubernetes]安装dashboard
[kubernetes]安装dashboard
|
14天前
|
弹性计算 运维 Kubernetes
云原生时代的运维革新:Kubernetes在现代IT架构中的角色
随着云计算的日益普及,传统运维模式逐渐不能满足现代企业的需求。本文将深入探讨Kubernetes如何在云原生时代重塑运维工作,包括自动化部署、弹性伸缩、服务发现等关键特性,以及它如何帮助企业实现敏捷性和效率的双重提升。
29 0
|
19天前
|
Kubernetes Cloud Native 搜索推荐
探索云原生技术:Kubernetes在现代应用部署中的角色打造个性化移动体验:从开发到操作系统定制
【7月更文挑战第31天】本文深入探讨了云原生技术的核心组件之一——Kubernetes,并分析了其在现代云计算环境中的关键作用。通过实际代码示例和案例分析,文章揭示了Kubernetes如何优化资源管理、提高部署灵活性以及增强服务的可靠性。读者将获得对Kubernetes操作实践的直观理解,并认识到采用云原生架构对企业数字化转型的推动力。
35 0
|
2月前
|
存储 Kubernetes 安全
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存储&Dashboard鉴权&Proxy暴露
|
2月前
|
Kubernetes 容器 Perl
019.Kubernetes二进制部署插件dashboard
019.Kubernetes二进制部署插件dashboard

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多