要确认Service实际连通的Pod后端地址,必须查看其关联的Endpoints资源;执行kubectl get endpoints 可获取就绪Pod的IP:Port列表,若为none则无匹配就绪Pod,再通过kubectl describe service可查看Selector及Endpoints一致性,结合Pod状态与日志排查同步问题。

要确认某个Service当前实际连通的Pod后端地址,必须绕过Service抽象层直接查看其关联的Endpoints资源,因为只有Endpoints才真实记录了就绪Pod的IP和端口。
使用kubectl get endpoints查看
执行命令:kubectl get endpoints ,例如 kubectl get endpoints nginx。
输出中ENDPOINTS列显示的就是当前被选中的Pod IP:Port列表,格式为 10.244.1.5:80,10.244.2.7:80。如果该列为 none,说明没有Pod匹配Service的selector标签,或所有匹配Pod都未进入Ready状态。
使用kubectl describe service查看关联详情
运行 kubectl describe service ,在输出末尾的 Events 上方会看到 Endpoints 行。
这一行内容与 kubectl get endpoints 的 ENDPOINTS 列完全一致,但此处还附带了Selector信息——它告诉你Service正通过哪些标签筛选Pod,比如 app=nginx。若Endpoints为空,而Selector又确实匹配某些Pod,请立即检查那些Pod的 READY 状态和 Conditions.Ready 字段。
直接获取Endpoints资源的完整YAML结构
方法一:用 -o yaml 查看原始定义kubectl get endpoints
方法二:聚焦子字段,只提取IP和端口(适合脚本解析)kubectl get endpoints
注意:jsonpath 输出中,IP列表和端口列表是分开打印的,需人工对齐或用awk等工具配对。如果 .subsets 为空数组,说明Endpoints对象存在但尚未填充任何后端——这通常意味着对应Pod尚未就绪或标签不匹配。
验证Endpoints是否实时同步
第一步:确认目标Service的selector,例如 kubectl get service nginx -o jsonpath='{.spec.selector}'
第二步:查找匹配该selector且处于Running+Ready状态的Pod:kubectl get pods -l "app=nginx" --field-selector=status.phase=Running -o wide
第三步:比对上一步输出的IP与 kubectl get endpoints nginx 中的ENDPOINTS值是否完全一致。
如果不一致,说明kube-proxy尚未完成规则更新,或Endpoint控制器因权限/网络问题未能监听到Pod状态变更——此时应检查 endpoints-controller 在kube-controller-manager中的日志。











