保姆级教程:用Helm在K3s上部署Kubernetes Dashboard(含外网访问和Token获取)

张开发
2026/4/7 18:59:00 15 分钟阅读

分享文章

保姆级教程:用Helm在K3s上部署Kubernetes Dashboard(含外网访问和Token获取)
K3s实战从零部署Kubernetes Dashboard全流程指南在轻量级Kubernetes生态中K3s凭借其极简设计和边缘计算友好特性已成为开发者本地测试和小型集群部署的首选方案。不同于标准Kubernetes的复杂架构K3s将etcd、kubelet等核心组件高度集成这种设计在带来便捷的同时也为Dashboard这类可视化工具的部署带来了特殊挑战。本文将深入解析K3s环境下Dashboard的完整生命周期管理特别针对k3s.yaml配置路径、Kong代理服务改造等独有场景提供解决方案。1. 环境准备与Helm配置K3s默认集成了Helm控制器helm-controller但手动部署Dashboard时仍建议使用独立的Helm CLI工具以获得更灵活的配置能力。首先通过以下命令安装最新版Helmcurl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shK3s的kubeconfig文件位置与标准K8s不同这是导致多数连接问题的根源。需要显式指定配置文件路径export KUBECONFIG/etc/rancher/k3s/k3s.yaml验证配置生效的正确方式是检查节点信息kubectl get nodes -o wide注意若使用多节点集群需确保k3s.yaml文件已正确复制到各工作节点或通过--kubeconfig参数显式指定。2. Dashboard部署的K3s适配添加官方Chart仓库后建议使用values.yaml进行定制化安装而非直接使用默认参数helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard helm repo update创建自定义配置文件dashboard-values.yaml# dashboard-values.yaml service: type: NodePort externalPort: 8443 ingress: enabled: false metricsScraper: enabled: true关键差异点在于K3s默认使用Traefik作为Ingress Controller而标准K8s部署通常依赖Nginx配置项标准K8sK3sIngress控制器NginxTraefik服务发现CoreDNSKlipper LB存储类需手动配置local-path-provisioner执行安装命令时需明确指定命名空间helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard \ -n kubernetes-dashboard --create-namespace \ -f dashboard-values.yaml3. 网络访问的深度调优部署完成后检查服务状态会看到K3s特有的服务结构kubectl -n kubernetes-dashboard get svc典型输出示例NAME TYPE CLUSTER-IP PORT(S) kubernetes-dashboard-kong-proxy ClusterIP 10.43.1.2 443/TCP kubernetes-dashboard-metrics-scraper ClusterIP 10.43.2.3 8000/TCP需要修改kong-proxy服务以实现外部访问kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard-kong-proxy \ -p {spec:{type:NodePort,ports:[{port:443,nodePort:30443}]}}安全组配置建议开放30443/TCP端口NodePort范围默认为30000-32767建议配合Cloudflare Argo Tunnel实现安全暴露生产环境务必启用HTTPS证书4. 认证体系与权限管理Kubernetes 1.24版本移除了自动生成Secret的特性Token获取方式发生重大变化。创建admin-user.yaml时需注意# admin-user.yaml apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin-crb roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard获取Token的新方式kubectl -n kubernetes-dashboard create token dashboard-admin \ --duration8760h dashboard-token.txt登录流程优化技巧使用jq工具格式化Token输出kubectl -n kubernetes-dashboard create token dashboard-admin | jq -R .通过K9s工具直接查看和管理Dashboard资源考虑使用OIDC集成实现企业级SSO5. 资源清理与系统还原完整的卸载流程需要分层操作# 卸载Helm Release helm uninstall kubernetes-dashboard -n kubernetes-dashboard # 删除命名空间残留 kubectl delete ns kubernetes-dashboard --wait # 清理CRD如有 kubectl get crd | grep dashboard | awk {print $1} | xargs kubectl delete crd # 移除Chart仓库 helm repo remove kubernetes-dashboard常见问题排查清单若遇到命名空间卡在Terminating状态kubectl get ns kubernetes-dashboard -o json ns.json # 删除spec和status字段后应用 kubectl replace --raw /api/v1/namespaces/kubernetes-dashboard/finalize -f ns.jsonHelm残留Release处理helm list -a -n kubernetes-dashboard helm delete --purge release-name在边缘计算场景中我曾遇到Traefik与Dashboard服务端口冲突的情况最终通过修改K3s的默认HTTP端口解决。这提醒我们轻量级方案虽简化了部署但组件间的隐性依赖仍需特别关注。

更多文章