K8S部署前端可视化dashboard插件(坑已踩完)

本文详细介绍如何在Kubernetes环境中部署和访问Dashboard,包括通过YAML文件手动配置和使用NodePort暴露服务的方法,以及创建服务账号和绑定角色进行Token认证的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部署Dashboard

官方参考文档:
https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

github项目地址:
https://github.com/kubernetes/dashboard

当前部署dashboard版本:v2.0.0,注意检查dashboard版本与kubernetes版本兼容性:
https://github.com/kubernetes/dashboard/releases

方法一:不推荐(新手找不到yaml的本地路径)

执行yaml文件直接部署:

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

查看dashboard运行状态,以deployment方式部署,运行2个pod及2个service:

[root@master ~]# kubectl -n kubernetes-dashboard get pods
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-694557449d-wfv4b   1/1     Running   0          4m50s
kubernetes-dashboard-9774cc786-v9ltx         1/1     Running   0          4m50s


[root@master ~]# kubectl -n kubernetes-dashboard get svc 
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
dashboard-metrics-scraper   ClusterIP   10.100.165.238   <none>        8000/TCP   4m52s
kubernetes-dashboard        ClusterIP   10.109.218.125   <none>        443/TCP    4m52s

访问dashboard
这里作为演示,使用nodeport方式将dashboard服务暴露在集群外,指定使用30443端口,可自定义:

kubectl  patch svc kubernetes-dashboard -n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'

查看暴露的service,已修改为nodeport类型:

# kubectl -n kubernetes-dashboard get svc
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.102.18.37     <none>        8000/TCP        69s
kubernetes-dashboard        NodePort    10.110.118.188   <none>        443:30443/TCP   69s

方法二:推荐

下载yaml文件手动修改service部分

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml

yaml文件会下载到当前路径下
修改yaml文件

vi recommended.yaml

修改Service部分

-----------------------------------------------
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443
  selector:
    k8s-app: kubernetes-dashboard
 ----------------------------------------------

注意如果这里的nodePort写成nodeport或者存在其他书写问题,就会报如下的错

[root@ks-allinone k8s-ui]# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard unchanged
serviceaccount/kubernetes-dashboard unchanged
error: error validating "recommended.yaml": error validating data: ValidationError(Service.spec.ports[0]): unknown field "nodeport" in io.k8s.api.core.v1.ServicePort; if you choose to ignore these errors, turn validation off with --validate=false

更新配置

kubectl apply -f recommended.yaml

登录dashboard
浏览器访问dashboard:

https://<any_node_ip>:30443

出现如下页面
在这里插入图片描述
Dashboard 支持 Kubeconfig 和 Token 两种认证方式,我们这里选择Token认证方式登录。
官方参考文档:
https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
创建dashboard-adminuser.yaml:

[root@ks-allinone k8s-ui]# cat > dashboard-adminuser.yaml << EOF
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: admin-user
   namespace: kubernetes-dashboard
 
 ---
 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: admin-user
   namespace: kubernetes-dashboard
> EOF

创建登录用户

[root@ks-allinone k8s-ui]# kubectl apply -f dashboard-adminuser.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

说明:上面创建了一个叫admin-user的服务账号,并放在kubernetes-dashboard 命名空间下,并将cluster-admin角色绑定到admin-user账户,这样admin-user账户就有了管理员的权限。默认情况下,kubeadm创建集群时已经创建了cluster-admin角色,我们直接绑定即可。

查看admin-user账户的token

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
[root@ks-allinone k8s-ui]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-k42wt
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 77d89b66-c70c-4784-8b8d-b18a2dc203a8

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjZUQU44UXNLREhCVm05RWZhb2h3TGRQQk5ZdF9jQjdfcnNXRVkzWldnbWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWs0Mnd0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3N2Q4OWI2Ni1jNzBjLTQ3ODQtOGI4ZC1iMThhMmRjMjAzYTgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.Z6Pn_bf9yi9a9wAGRe71dlAUgNqaH9gU5IksRCk0exfA-RokeU03NTNVd9ZqpH-_6w-rfeozsvDS2IymMqtIuH1F3RqNWORc9_aLw-6xTL-X8HaupGZgR5M0v3J286KjHTyU-ZqJ0Zoq1T0gGHdPSJTfwzV9WTz-tniOSjvjkkGuC-CLADmadLrdOprKfIMQ0HmkHIxOzlRX6WJc1f5vbbB0K72A_dZxXI94bRs6TtLAilBU_F3MffPiLLgHPV1GJPOwKD2AAkGz1hNrLAuxpMGlEelDsjqxWZJnRARnZ97gpma0oSkmZg7-hkYHN4dcNTmwWLhbmkhWycOXZpFEYw

把获取到的Token复制到登录界面的Token输入框中,登陆成功。

参考博客

### 如何在 Kubernetes Dashboard 中以可视化方式部署 LNMP 栈 #### 准备工作 为了成功通过 Kubernetes Dashboard 部署 LNMP (Linux, Nginx, MySQL, PHP) 栈,需先成若干准备工作: - 安装并配置好 Kubernetes 集群以及其仪表板访问权限。 - 创建必要的命名空间来隔离不同应用环境。 #### 步骤概述 尽管没有直接提及具体操作指南[^1],可以基于常规实践提供如下建议用于指导LNMP栈的部署过程: ##### 1. 访问 Kubernetes Dashboard 打开浏览器输入集群地址进入登录页面,使用管理员账号认证登陆到 Kubernetes Dashboard 界面。 ##### 2. 创建命名空间 点击左侧菜单中的 "Namespaces" 并创建一个新的命名空间专门供此次实验使用。这有助于资源管理和清理。 ##### 3. 构建或获取镜像 确保拥有适用于容器化的 NGINX、MySQL 和 PHP 应用程序版本。这些通常可以从 Docker Hub 或其他公共仓库获得预构建好的官方镜像文件。 ##### 4. 编写 YAML 文件定义服务 虽然本案例倾向于图形界面操作,但对于复杂的应用组合来说编写相应的 Deployment 和 Service 的 YAML 描述仍然是推荐的做法。对于简单的场景可以直接利用 Web UI 来上传预先准备好的配置文档或者在线编辑器内撰写简单声明式对象描述。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: ports: - port: 80 targetPort: 80 selector: app: nginx ``` ##### 5. 使用 Kubernetes Dashboard 进行部署 导航至 “Workloads -> Deployments”,选择“Create”按钮并通过上传上述 YAML 文件或是手动填写表单的方式提交新的 Pod 请求;同样地,在 Services 页面下添加外部可访问的服务端口映射关系以便后续测试验证。 ##### 6. 设置持久化存储卷(Persistent Volume) 考虑到数据库类组件的数据保存需求,应当为 MySQL 单独申请 PV/PVC 资源并与之关联起来保证数据安全性和持久性。 ##### 7. 测试与验证 最后一步就是确认整个架构已经正常启动运行,并能够响应来自客户端发起的各种请求。可以通过命令行工具 kubectl 或者继续借助于 GUI 工具来进行状态监控和服务调用尝试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值