1. 概述
Kubernetes Dashboard 是用于管理和排障 Kubernetes 集群的控制中心,它是一个基于 Web 的界面,让我们可以一目了然地查看集群中发生的一切。
但有时我们会遇到一个令人头疼的问题:“no endpoints available for service kubernetes-dashboard”。这个错误会让我们无法访问 Dashboard,影响集群管理。
这个错误通常意味着连接 Dashboard 的 Kubernetes Service 出现了问题。可能是配置错误,也可能是后端 Pod 没有正常运行。
本文将一步步带你排查并解决这个问题,帮助你重新掌控 Dashboard,保持集群平稳运行。
2. 理解错误本质
在开始排查前,先理解这个错误的核心含义。
在 Kubernetes 中,Service 是一个内部负载均衡器,它为一组 Pod 提供一个稳定的网络地址。而 Service 要通过 Endpoints 来知道应该将流量转发给哪些 Pod。
当 Service 没有关联的 Endpoints,或者由于网络问题或 Pod 异常导致无法访问这些 Endpoints 时,就会出现 “no endpoints available for service kubernetes-dashboard” 错误。
常见原因包括:
- Dashboard Pod 没有正常运行(Pending、CrashLoopBackOff 等状态)
- Service 的 Selector 配置错误,无法匹配 Pod 的标签
- 集群内部网络问题导致 Service 无法发现或访问 Pod
- CNI 插件异常,影响 Pod 通信
3. 初步检查
遇到这个错误时,首先要做的是进行一些基础检查,缩小排查范围。
3.1 查看 Dashboard Pod 状态
使用以下命令查看 kubernetes-dashboard
命名空间下的所有 Pod 状态:
$ kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
kubernetes-dashboard-api-6bffffcc78-v42vm 1/1 Running 0 151m
kubernetes-dashboard-auth-5d8486d4f4-xqkwn 1/1 Running 0 151m
kubernetes-dashboard-kong-7696bb8c88-q6swd 1/1 Running 0 151m
kubernetes-dashboard-metrics-scraper-5485b64c47-4x5nz 1/1 Running 0 151m
kubernetes-dashboard-web-84f8d6fff4-6k8lh 1/1 Running 0 151m
重点观察 STATUS
字段:
- ✅ Running:Pod 正常运行
- ⚠️ Pending:可能因资源不足或节点问题未调度
- ❌ CrashLoopBackOff:容器反复崩溃重启,需检查日志定位问题
如果 Pod 状态不正常,说明问题出在 Pod 本身或调度层面。
3.2 检查 Service 配置
使用以下命令查看 Dashboard Service 的详细配置:
$ kubectl describe service kubernetes-dashboard -n kubernetes-dashboard
Name: kubernetes-dashboard-api
Namespace: kubernetes-dashboard
Labels: app.kubernetes.io/component=api
app.kubernetes.io/instance=kubernetes-dashboard
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=kubernetes-dashboard-api
app.kubernetes.io/part-of=kubernetes-dashboard
app.kubernetes.io/version=1.7.0
helm.sh/chart=kubernetes-dashboard-7.5.0
Annotations: meta.helm.sh/release-name: kubernetes-dashboard
meta.helm.sh/release-namespace: kubernetes-dashboard
Selector: app.kubernetes.io/instance=kubernetes-dashboard,app.kubernetes.io/name=kubernetes-dashboard-api,app.kubernetes.io/part-of=kubernetes-dashboard
Type: ClusterIP
IP: 10.107.132.221
Port: api 8000/TCP
TargetPort: 8000/TCP
Endpoints: 10.244.0.81:8000
Session Affinity: None
Events: <none>
重点关注:
- ✅ Selector 是否与 Pod 标签匹配
- ❌ Endpoints 是否为空(为空说明 Service 找不到对应的 Pod)
4. 深入排查步骤
如果初步检查没有发现问题,接下来需要进一步排查。
4.1 确保 Pod 正确调度
使用 kubectl describe pod
命令查看 Pod 的详细信息:
$ kubectl describe pod <pod_name> -n kubernetes-dashboard
重点查看:
- Taints:节点是否有排斥标签,导致 Pod 无法调度
- Events:是否有调度失败的事件
- Affinity:亲和性规则是否冲突
常见原因包括节点资源不足、Taint 未配置 Tolerations、亲和性规则冲突等。
4.2 检查网络问题
网络问题是导致 Service 无法找到 Pod 的常见原因。可执行以下命令检查:
$ kubectl get nodes
$ kubectl get svc -n kubernetes-dashboard
此外,检查 CNI 插件状态也很重要:
$ kubectl get pods -n kube-system -l k8s-app=<cni_plugin_name>
如发现异常 Pod,查看其日志:
$ kubectl logs <cni_pod_name> -n kube-system
4.3 检查 Pod 健康状态和日志
即使 Pod 状态为 Running,也可能存在内部问题。使用以下命令查看 Pod 日志:
$ kubectl logs <dashboard-pod-name> -n kubernetes-dashboard
常见日志问题:
- 连接 API Server 失败 → 检查网络或 RBAC 配置
- 启动失败 → 检查依赖服务或配置参数
4.4 重新配置或重建 Dashboard 部署
如果问题仍未解决,可以尝试重建 Dashboard 部署:
- 删除旧的 Deployment:
$ kubectl delete deployment <deployment_name> -n kubernetes-dashboard
- 使用 Helm 重新部署(推荐):
$ helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
$ helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
- 或使用 YAML 文件部署:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
部署完成后,再次确认 Pod 状态和 Service 配置是否正常。
5. 总结
本文介绍了如何排查和解决 Kubernetes 中 “no endpoints available for service kubernetes-dashboard” 错误。我们从 Pod 状态、Service 配置、网络问题、日志排查到重建部署,逐步定位问题根源。
通过这些排查步骤,你可以有效恢复 Dashboard 的访问,并提升 Kubernetes 集群的稳定性。
✅ 关键点回顾:
- 检查 Pod 状态是否正常
- 确保 Service 的 Selector 与 Pod 标签匹配
- 排查网络和 CNI 插件问题
- 查看 Pod 日志定位内部错误
- 必要时使用 Helm 或 YAML 重建部署
掌握这些技巧,你就能更从容地应对 Kubernetes 中常见的服务访问问题。