当前位置: 首页 > article >正文

k8s集群部署 - Dashboard v2.7

k8s集群部署 - Dashboard v2.7

文章目录

  • k8s集群部署 - Dashboard v2.7
  • 部署 Kubernetes Dashboard
  • 查看 Dashboard 服务
    • 验证
  • 创建访问权限(RBAC)
    • 作用
  • 获取访问 Token
  • 更改kubernetes-dashboard的网络为集群外可访问
  • 访问 Dashboard
  • 登录 Dashboard
  • 持久化用户token到Secret中(可选)

  • 介绍
    Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

部署 Kubernetes Dashboard

运行以下命令来部署kubernetes-dashboard:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

这将会创建一个kubernetes-dashboard服务以及所需的相关资源(如deployment、service等)。

查看 Dashboard 服务

你可以通过以下命令查看是否部署成功:

kubectl get pods -n kubernetes-dashboard

验证

如果部署成功,你应该能够看到类似下面的输出:

NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-5657497c4c-7b8zj   1/1     Running   0          25m
kubernetes-dashboard-78f87ddfc-vlgkq         1/1     Running   0          25m

创建访问权限(RBAC)

为了安全起见,通常需要为kubernetes-dashboard创建访问权限。可以创建一个ClusterRoleBinding,为dashboard-admin用户授权。
创建一个dashboard-admin的YAML文件,dashboard-admin.yaml

sudo vi dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kubernetes-dashboard
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-full-access
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
roleRef:
  kind: ClusterRole
  name: kubernetes-dashboard-full-access
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kubernetes-dashboard-full-access
rules:
  - apiGroups: [""]
    resources: ["pods", "services", "endpoints", "secrets", "configmaps", "namespaces"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments", "replicasets", "statefulsets"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["extensions"]
    resources: ["ingresses"]
    verbs: ["get", "list", "watch"]

执行以下命令创建dashboard-admin:

kubectl apply -f ./dashboard-admin.yaml

作用

  • ServiceAccount (dashboard-admin):
    创建了一个服务账户 dashboard-admin,用于为 kubernetes-dashboard 提供认证。

  • ClusterRoleBinding (dashboard-admin):
    为 dashboard-admin 服务账户绑定 cluster-admin 角色,从而使其拥有集群管理员权限。

  • ClusterRoleBinding (kubernetes-dashboard-full-access):
    为 kubernetes-dashboard 服务账户绑定 kubernetes-dashboard-full-access 角色,授予其对多个资源(如 pods、services、endpoints、secrets 等)的完全访问权限。

  • ClusterRole (kubernetes-dashboard-full-access):
    定义了一个角色,允许访问 Kubernetes 集群中与 Dashboard 相关的资源,包括:Pods、Services、Endpoints、Secrets、ConfigMaps、Namespaces、Deployments、ReplicaSets、StatefulSets 和 Ingresses。

获取访问 Token

要登录到Dashboard,你需要获取dashboard-admin的Token,运行以下命令:

kubectl -n kubernetes-dashboard create token dashboard-admin

该命令将返回一个Token,复制该Token备用。

更改kubernetes-dashboard的网络为集群外可访问

Kubernetes Dashboard 默认是通过 ClusterIP 类型的服务暴露的,这意味着它只能在集群内部访问。你可以将其更改为 NodePort 或 LoadBalancer 类型,使其能够被外部机器访问。

# 运行以下命令来编辑 Dashboard 的服务:
[root@swarm03 ~]# kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard

修改完后保存并退出编辑,Kubernetes 将自动应用更改。

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2024-12-16T09:18:13Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "266985"
  uid: 15a16dab-17c0-4d09-acd5-129c264cd885
spec:
#  clusterIP: 10.106.149.44
#  clusterIPs:
#  - 10.106.149.44
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
    nodePort: 30001  # 根据需要设置 NodePort
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort  # 将类型更改为 NodePort
status:
  loadBalancer: {}

访问 Dashboard

现在,你可以通过集群节点的 IP 地址和暴露的端口来访问 Dashboard。
例如,如果你的集群控制平面节点 IP 地址是 192.168.10.52,那么在集群外部的机器上,使用以下 URL 访问 Kubernetes Dashboard:
https://192.168.10.52:30001

登录 Dashboard

打开浏览器并访问上述地址,选择“Token”登录方式,并粘贴之前获取的Token进行登录。

持久化用户token到Secret中(可选)

Kubernetes v1.24.0 及更高版本在创建 ServiceAccount 时不会自动生成 Secret(包含 API 访问令牌),就会导致刚生成的token没过多久就失效了,想要登录还得重新生成token。如果需要,请手动创建或更新 Secret。

  • 创建 dashboard-admin 的Secret
    该Secret用于存储ServiceAccount 中 dashboard-admin 的token等信息,创建后从 Secret 的 token 字段拿就可以了,不用重新生成token。
# 创建secret部署yaml文件
sudo vi secret-dashboard-token.yaml

将下面的内容复制粘贴到dashboard-token-secret.yaml中
由于ServiceAccount “dashboard-admin” 位于 kubernetes-dashboard 中,所以yaml中的定义也要对应

apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: secret-dashboard-token   # 修改为 kubernetes-dashboard 命名空间
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/service-account.name: "dashboard-admin"   # 关联到 dashboard-admin ServiceAccount
# 应用secret的部署yaml文件
kubectl create -f ./secret-dashboard-token.yaml

[root@swarm03 ~]# kubectl create -f secret-dashboard-token.yaml
secret/secret-dashboard-token created
  • 查看 dashboard-admin 的 Secret 信息及token
# 创建完 Secret 后,你可以使用以下命令查看 Secret 的详细信息,并提取其中的 token:
kubectl get secret secret-dashboard-token -n kubernetes-dashboard  -o yaml

# 仅查看secret中的token
kubectl get secret secret-dashboard-token -n kubernetes-dashboard  -o jsonpath='{.data.token}' | base64 --decode

http://www.kler.cn/a/467708.html

相关文章:

  • 网络层协议之IP数据包层分片随笔
  • 【C++】P5733 【深基6.例1】自动修正
  • NoSQL简介
  • 【信息系统项目管理师】高分论文:论信息系统项目的风险管理(城市停车诱导系统)
  • Go语言的 的泛型(Generics)基础知识
  • windows11(或centos7)安装nvidia显卡驱动、CUDA、cuDNN
  • MySQL 8 主从同步配置(Master-Slave Replication)
  • ESP32移植Openharmony外设篇(7)土壤湿度传感器YL-69
  • Python进阶-08-继承性
  • 编译 C++ 程序:分离与保留调试信息以支持 GDB 对 Core 文件的调试
  • 如何自行解锁 ATamp;T 手机
  • UE5 slate创建SDockTab标签页的过程理解
  • Megatron - LM 怎么进行模型切分的,怎么匹配服务器的
  • 量子力学复习
  • STM32学习之MPU6050芯片 及 软件I2C读写MPU6050实验
  • linux命令行连接Postgresql常用命令
  • 【高阶数据结构】哈希表封装unordered_map、unordered_set
  • 【论文阅读】Anchor-based fast spectral ensemble clustering
  • 微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
  • 我用AI学Android Jetpack Compose之Jetpack Compose学习路径篇
  • 字符串中常用函数
  • 时序优化方法
  • docker、数据库、Web应用程序安全
  • Stable Diffusion和Midjourney有什么区别?
  • 大学生入学审核系统的设计与实现(源码+数据库+文档)
  • v-model与 mvvm 回顾