前言
上篇成功部署Kubernetes集群后,为了方便管理和监控集群资源,安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI,旨在让用户轻松地部署容器化应用到 Kubernetes 集群,并对这些应用进行故障排查以及管理集群资源。通过 Dashboard,你可以获取集群内运行的应用概览信息,创建或修改各种 Kubernetes 资源(如 Deployment、Job、DaemonSet 等),还可以执行弹性伸缩、滚动升级等操作。
一、准备工作
1. 确认Kubernetes集群状态
确保你的Kubernetes集群已经成功部署并处于运行状态。如果尚未部署,请先参考上两篇博文进行集群部署。
2.选择 Dashboard版本
前往 Dashboard官方下载页面,选择适配的版本进行下载。由于我的 Kubernetes 版本是 1.30.8,根据官方建议选择 kubernetes-dashboard-7.7.0 版本。
3. 安装Helm
从Kubernetes Dashboard 7.0.0
版本开始,官方已经不再支持基于Manifest文件的安装方式,转而推荐使用Helm进行安装。因此,需要先安装Helm。
Helm和Kubernetes版本
Helm 版本与支持的 Kubernetes 版本有对应关系,详细内容请参考 Helm 官方文档:Helm 版本对应关系。根据Kubernetes的版本我们选择安装 Helm 3.15.x 版本。
安装Helm
用二进制版本安装
- 下载Helm:访问Helm官方文档,根据操作系统下载相应版本的Helm二进制文件。
- 解压并安装:将下载的二进制文件解压并移动到系统PATH中的目录(如
/usr/local/bin
)。 - 初始化Helm:执行
helm help
检查Helm是否安装成功,并添加稳定仓库。
tar -zxvf helm-v3.15.x-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm help
helm repo add bitnami https://charts.bitnami.com/bitnami
二、安装Kubernetes Dashboard
使用 Helm 安装
首先添加 Dashboard 的 Helm 仓库并更新本地库:
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
helm repo update
然后可以使用以下命令来安装最新版的 Dashboard:
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--namespace kubernetes-dashboard \
--create-namespace
如果需要指定版本,则可以使用 --version 参数:
helm install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \
--namespace kubernetes-dashboard \
--create-namespace \
--version 7.0.0 \
--timeout 600s
如果有网络问题或超时,可以选择手动下载安装文件并在本地安装。
helm install kubernetes-dashboard /root/kubernetes-dashboard-7.7.0.tgz --namespace kubernetes-dashboard --create-namespace
如果想要在安装时修改默认参数,可以使用--set key=value[,key=value]
的参数指定方式修改参数的数值。例如,
helm install kubernetes-dashboard/kubernetes-dashboard --name kubernetes-dashboard \
--set=api.containers.resources.limits.cpu=200m
或者,可以在安装图表时提供指定上述参数值的 YAML 文件。例如,
helm install kubernetes-dashboard/kubernetes-dashboard --name kubernetes-dashboard -f values.yaml
提示:您可以使用默认使用的values.yaml作为参考,查找属性和默认值。
三、访问Dashboard
使用 Port Forwarding进行命令行代理
Port Forwarding 是一种临时性的解决方案,它允许你通过本地机器上的端口直接访问集群内部的服务。这对于开发人员来说非常方便,因为他们不需要对外暴露服务即可进行调试或测试。
方法概述
Port Forwarding
是一种临时性的解决方案,它允许你通过本地机器上的端口直接访问集群内部的服务。这对于开发人员来说非常方便,因为他们不需要对外暴露服务即可进行调试或测试。
开启访问
要通过 Port Forwarding
访问 Dashboard,请执行以下命令:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard 8443:443
这将Dashboard在 https://localhost:8443
上可用。
提示:测试完成可以通过按下
Ctrl+C
来终止端口转发
优点与缺点
这种方式的优点在于方法简单易用,无需更改任何集群配置,适合小规模测试或个人使用。但仅限于执行命令的本地机器,它是临时的,关闭终端后连接即断开,无法在其他机器上访问,并且每次使用时都需要手动开启端口转发。
修改服务类型为 NodePort
方法概述
NodePort
允许 Kubernetes 服务在各个集群节点的特定端口上对外暴露。这使得用户能够通过任意节点的 IP 地址和指定 NodePort 进行访问 Dashboard。(范围通常是 30000-32767),从而允许外部流量通过该端口进入集群并访问指定的服务。
开启访问
编辑 Dashboard 的服务配置,将其类型更改为 NodePort
:
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"}]'
若需要指定端口,可以指定一个固定的 nodePort
:
kubectl patch svc kubernetes-dashboard-kong-proxy -n kubernetes-dashboard --type='json' -p '[{"op":"add","path":"/spec/ports/0/nodePort","value":30000}]'
也可以直接使用编辑器编辑,然后保存退出即可
优点与缺点
这种方法一旦配置完成,只要集群存在就可以持续访问,提供了长期稳定的访问途径;同时可以直接通过任意节点 IP 加上指定端口号来访问服务,易于访问。但是,它也带来了较高的安全风险,如果未正确配置防火墙规则,可能会导致服务被未经授权的人访问;此外,还需要选择一个未被占用的端口,因此有一定的端口限制。
如果显示您的连接不是私密连接,在当前页面用键盘输入
thisisunsafe
,不是在地址栏输入,就直接输入,页面即会自动刷新进入网页。不行就多输入几次,但是要确保输入是正确的。具体请查看这篇博客
三、创建用户和token
创建ServiceAccount和ClusterRoleBinding
为了快速访问Dashboard,可以创建一个具有管理员权限的ServiceAccount,并生成一个临时Token:
cat > dashboard-user.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
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: kube-system
EOF
# 创建用户
kubectl apply -f dashboard-user.yaml
# 生成临时token
kubectl -n kube-system create token admin-user
7.0以前的版本安装
下载配置文件
进入到master节点,下载dashboard对应版本的 recommended.yaml 文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
将type: ClusterIP 改为 type: NodePort,保存退出,会生成一个范围是 30000-32767的端口。
查看启动的端口
kubectl get svc -A |grep kubernetes-dashboard
创建访问账号
#创建访问账号,准备一个yaml文件; vi dash.yaml
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
kubectl apply -f dash.yaml
获取令牌访问
#获取访问令牌
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
使用令牌登录
版本差异
对于最新的Kubernetes版本,官方确实更加强调安全性和最佳实践。因此,不推荐使用不过期的令牌。相反,官方建议使用短期有效的令牌,并且这些令牌应该定期轮换以减少潜在的安全风险。
新版的Kubernetes使用kubectl -n kubernetes-dashboard get secret
会报错,secret不再默认自动挂载到Pod中,而是需要显式地请求。由于官方不推荐这种方式,所以本文也不再进行介绍。