Dashboard概念
这是一个官方的、通用的、基于Web的UI,用于管理Kubernetes集群。Kubernetes Dashboard可以让您部署容器化应用到Kubernetes集群中,同时对集群资源进行故障排除,并且管理集群本身
安装Dashboard(master主节点)
1>安装
root@zhaoyx-k8s-master:~# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
--2025-01-12 11:34:17-- https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:7621 (7.4K) [text/plain]
正在保存至: “recommended.yaml”
recommended.yaml 100%[=======================================================>] 7.44K --.-KB/s 用时 0s
2025-01-12 11:34:18 (90.8 MB/s) - 已保存 “recommended.yaml” [7621/7621])

如果无法下载,可以直接访问
raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
打开网页后,在master主节点上创建recommended.yaml文件,将网页代码复制到yaml文件里面,然后apply
root@zhaoyx-k8s-master:~# kubectl apply -f recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

2>查看,成功创建
查看是否启动dashboard的pod
root@zhaoyx-k8s-master:~# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-64cc74d646-26rqk 1/1 Terminating 0 20h
kube-system calico-kube-controllers-64cc74d646-4xw7n 1/1 Running 1 (114m ago) 3h2m
kube-system calico-node-4rckb 1/1 Running 0 20h
kube-system calico-node-ls28t 0/1 Running 2 (114m ago) 20h
kube-system calico-node-rjrw4 1/1 Running 0 20h
kube-system calico-node-w76r5 0/1 Running 0 20m
kube-system coredns-6d8c4cb4d-7nscd 1/1 Running 1 (114m ago) 3h2m
kube-system coredns-6d8c4cb4d-nks89 1/1 Terminating 0 23h
kube-system coredns-6d8c4cb4d-ntjj7 1/1 Running 1 (114m ago) 3h2m
kube-system coredns-6d8c4cb4d-xgs8z 1/1 Terminating 0 23h
kube-system etcd-zhaoyx-k8s-master 1/1 Running 3 (114m ago) 23h
kube-system kube-apiserver-zhaoyx-k8s-master 1/1 Running 2 (114m ago) 23h
kube-system kube-controller-manager-zhaoyx-k8s-master 1/1 Running 2 (114m ago) 23h
kube-system kube-proxy-4frsq 1/1 Running 0 20m
kube-system kube-proxy-wv2zb 1/1 Running 2 (114m ago) 23h
kube-system kube-proxy-xbscs 1/1 Running 0 21h
kube-system kube-proxy-xr9kf 1/1 Running 0 20h
kube-system kube-scheduler-zhaoyx-k8s-master 1/1 Running 3 (114m ago) 23h
kubernetes-dashboard dashboard-metrics-scraper-799d786dbf-gchkd 1/1 Running 0 2m
kubernetes-dashboard kubernetes-dashboard-546cbc58cd-qf84l 1/1 Running 0 2m
tigera-operator tigera-operator-85fdd6cc7f-dlzn7 1/1 Running 0 20h

查看dashboard对应服务
root@zhaoyx-k8s-master:~# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 23h
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.96.66.162 <none> 8000/TCP 2m8s
kubernetes-dashboard kubernetes-dashboard ClusterIP 10.96.17.253 <none> 443/TCP 2m8s

1>删除现有dashboard服务
因为类型为ClusterIP,外部机器无法访问,也不便于我们通过浏览器访问,所以更改类型为NodePort型
root@zhaoyx-k8s-master:~# kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
service "kubernetes-dashboard" deleted
service "kubernetes-dashboard" deleted
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, reload-or-restart, try-reload-or-restart, force-reload, status, condrestart). For other actions, please try to use systemctl.

查看是否删除成功
root@zhaoyx-k8s-master:~# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 23h
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.96.66.162 <none> 8000/TCP 7m18s

2>创建配置文件(一个nodeport的service)
root@zhaoyx-k8s-master:~# vim dashboard-svc.yaml
root@zhaoyx-k8s-master:~# cat dashboard-svc.yaml
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard

root@zhaoyx-k8s-master:~# kubectl apply -f dashboard-svc.yaml
service/kubernetes-dashboard created

3>再次查看服务成功
root@zhaoyx-k8s-master:~# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 26h
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.96.66.162 <none> 8000/TCP 149m
kubernetes-dashboard kubernetes-dashboard NodePort 10.96.184.14 <none> 443:31931/TCP 2m4s

4>想要访问dashboard服务,就要有访问权限,创建kubernetes-dashboard管理员角色
root@zhaoyx-k8s-master:~# cat dashboard-svc-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io

配置完文件后执行以下命令再次apply
root@zhaoyx-k8s-master:~# kubectl apply -f dashboard-svc-account.yaml
serviceaccount/dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created

5>获取token
先获得dashboard的secre对象名字
root@zhaoyx-k8s-master:~# kubectl get secret -n kube-system|grep admin|awk '{print $1}'
dashboard-admin-token-2tfgd

获得到secret里的token内容后(token理解为认证密码)
root@zhaoyx-k8s-master:~# kubectl describe secret dashboard-admin-token-2tfgd -n kube-system|awk '/^token/ {print $2}'
eyJhbGciOiJSUzI1NiIsImtpZCI6IjNocHV3djBnVUh3dnI0NHhHRXIwc1lQX0xJazBhbnN3R0k5V3hoNW1IVm8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tMnRmZ2QiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiNWJmMzY1ZmEtM2EzOC00ODlmLTlhYWEtMmQ2Zjg2YTY3MDY4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.YLW3SiWu32mfZaEvC321wieUqO1A8_F6ZEgIJx9G4Z3H9FTGVM5a5qqFxMky2_Q5GDaudtNk5NN-2EJNLAWf5mM5qR9VJE_nFUqdLB2auQEENv0cL_7-d5PpuIx22_G35J1G-RUEJrCvvLH5zXOBi0H9UHP6fr8-zIpx_zF7mxrcvZFCW51n1AJ2zhJKvVEekqH_QAH6y3bSdflL7QZ4_GHnFpxHvVn50l7301HFT12y8yuJu8LXnP4-fsggtC63LvT_sD7bhdHpctD9EjKItZ_oP9fhx5iKlf8kru2cyVeggF7JgKdnpcLswYVM2EOIiBpu6fqMmqoTJ3AyW1CmRg

上述黄色标注和图片红框标注内容为你自己服务secret里的对象名字!!!
6>浏览器访问
查看端口
root@zhaoyx-k8s-master:~# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 26h
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.96.66.162 <none> 8000/TCP 159m
kubernetes-dashboard kubernetes-dashboard NodePort 10.96.184.14 <none> 443:31931/TCP 11m

红框内容对应自己服务器所查看端口
浏览器访问https://172.16.1.1:31931/
蓝色部分为node节点IP地址,黄色部分为所查看端口,协议一定是https
如果浏览器访问不为如下图所示在页面中提示不安全页面时,鼠标点击页面任何地方,键盘直接输入thisisunsafe,不要输入到地址栏

选择Token一栏将上述secret里的token内容粘贴到令牌






