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 部署:

  1. 删除旧的 Deployment:
$ kubectl delete deployment <deployment_name> -n kubernetes-dashboard
  1. 使用 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
  1. 或使用 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 中常见的服务访问问题。


原始标题:Fixing Kubernetes Error “no endpoints available for service kubernetes-dashboard”