Endpoints 是什么
Endpoints(以及数据量更大场景下的替代对象 EndpointSlice)是 Service 的实际后端清单,由控制器按 Service 的选择器与 Pod 的就绪状态自动生成并维护。清单为空,就意味着这个 Service 没有任何可用后端,前端表现通常是连接被拒绝或请求超时。因此『Service 没有流量』这类问题的第一检查点就是看 Endpoints,而不是先怀疑网络策略或应用代码。
基本信息
| 查看方式 | kubectl get endpoints web -n dev -o wide |
|---|---|
| 为空原因一 | 选择器与 Pod 标签不匹配,控制器收不到任何匹配对象 |
| 为空原因二 | Pod 未就绪,就绪探针未通过的对象不会进入清单 |
| 为空原因三 | targetPort 与容器实际监听的端口不一致 |
| 新形态 | EndpointSlice 是大规模场景下的替代对象,逻辑与 Endpoints 等价 |
典型使用场景
- 服务访问整体失败时,第一时间确认后端清单是否为空
- 发布之后流量没进来,确认新 Pod 是否已被加入后端清单
- 调整就绪探针后核对后端数量是否符合预期
- 服务只能连通部分实例时,对比清单数量与预期实例数
- 排查滚动更新期间的短暂断流,分析就绪与摘除的时序
排查顺序
排查顺序
kubectl get endpoints web -n dev
kubectl get pods -n dev --show-labels | grep app=web
kubectl describe svc web | grep -E "Selector|Endpoints"
kubectl get pod -o wide -l app=web
# 三者对不上时:先比选择器与标签,再看就绪状态,最后核对目标端口现象与原因
| 现象 | 常见原因 | 处理方向 |
|---|---|---|
| 清单为空 | 选择器与标签不匹配 | 修正 Pod 标签或 Service 选择器 |
| 清单少几个实例 | 就绪探针未通过 | 查看探针失败输出与就绪条件 |
| 有地址但连不上 | 目标端口写错或对端未监听 | 核对端口与容器内监听地址 |
| 更新期间短暂断流 | 就绪与摘除的时序不匹配 | 检查探针参数与发布策略 |
清单里已有地址但访问仍然失败时,问题通常在 Pod 一侧:端口监听、宿主或集群防火墙、应用本身处理请求的能力,而不在 Service 的定义上。
选择器写错时控制器不会报错,只是安静地维护一份空清单:改完标签或选择器之后要主动确认后端数量,别等用户报障才发现问题。