Kubernetes Service 请求打不通:Pod 明明 Running,从 selector 到 kube-proxy 逐层定位
Kubernetes Service 请求打不通:Pod 明明 Running,从 selector 到 kube-proxy 逐层定位你部署了一个服务,kubectl get pod显示全是Running,可另一个 Pod 里curl http://my-svc:8080就是超时或 connection refused。日志没报错、探针也过了,偏偏请求进不去。这类问题最耗人,因为「Pod 是好的」这个假象会把你引向错误方向。这篇按数据流的顺序,一层一层把断点找出来。先建立心智模型:一个请求要穿过几道门从 caller Pod 发出的请求,到真正落到目标容器,中间要过这些关卡:DNS:my-svc解析成 ClusterIP。Service:ClusterIP 是个虚拟 IP,本身不监听端口。Endpoints / EndpointSlice:Service 靠 selector 把匹配的 Pod IP 收进来,这才是真正的后端列表。kube-proxy:在每个节点上把发往 ClusterIP 的流量 DNAT 到某个 Pod IP。目标 Pod:容器进程真的在监听那个targetPort。任何一道门断了,现象都是「打不通」,但修法完全不同。排查就是顺着这条链逐段确认。第一刀:Endpoints 有没有后端九成的「Service 不通」都断在这里——selector 和 Pod label 对不上,Endpoints 是空的。# 直接看这个 Service 背后有没有真实的 Pod IPkubectl get endpoints my-svc# 空的话长这样,NAME 后面是 none:# NAME ENDPOINTS AGE# my-svc none 10m如果 ENDPOINTS 是none,说明没有任何 Pod 被选中。对比 Service 的 selector 和 Pod 的 label:# Service 想选的 labelkubectl get svc my-svc-ojsonpath{.spec.selector}# {app:myapp}# Pod 实际带的 labelkubectl get pods --show-labels|grepmyapp# myapp-xxx 1/1 Running appmy-app,... ← 注意:appmy-app 不是 my-app上面这个例子里,Service 选appmyapp,Pod 却是appmy-app,一个连字符之差,Endpoints 就永远是空的。修 Service 的 selector 或 Deployment 的template.metadata.labels,让它们完全一致。关键点:Service 的 selector 匹配的是Pod 的 label,不是 Deployment 的 name,也不是 Pod 的 name。改完 selector 后 Endpoints 会自动重新填充,不用重启 Pod。第二刀:端口对不对Endpoints 有 IP 了还是不通,下一个高发点是端口。Service 有两个端口概念,新手常搞混:apiVersion:v1kind:Servicemetadata:name:my-svcspec:selector:app:myappports:-port:8080# Service 对外暴露的端口(你 curl my-svc:8080 的那个)targetPort:3000# 转发到 Pod 容器里的端口(容器进程真正监听的)port是别人访问 Service 用的,targetPort必须等于容器里进程真正监听的端口。如果你的应用监听 3000 却把targetPort写成 8080,请求会被转发到 Pod 的 8080——那里没人监听,直接 connection refused。确认容器到底监听哪个端口,别猜,进去看:# 进目标 Pod 看进程监听的端口(容器里没有 ss/netstat 时用这招)kubectlexec-itmy-svc-pod --sh-ccat /proc/net/tcp# 或者直接在 Pod 内自己 curl 自己,先排除 Service 层kubectlexec-itmy-svc-pod --curl-svhttp://127.0.0.1:3000/health这一步很关键:如果在 Pod 内部curl 127.0.0.1:3000都不通,那问题根本不在 Service,而是应用没起来、或者只监听了127.0.0.1而不是0.0.0.0。很多服务默认 bind localhost,容器外(包括 kube-proxy)就永远连不上。# 常见错误:应用配置里 bind 127.0.0.1,只能容器内自己访问# 正确:监听 0.0.0.0:3000,才能被 Pod 网络里的其他节点访问第三刀:是 DNS 还是网络如果 Endpoints、端口都对,Pod 内自己也能 curl 通,问题就在跨 Pod 的路径上。先切开 DNS 和网络两个变量——直接用 ClusterIP 绕过 DNS:# 拿到 ClusterIPkubectl get svc my-svc-ojsonpath{.spec.clusterIP}# 10.96.0.42# 从另一个 Pod 用 IP 直连,绕过 DNSkubectl run tmp--rm-it--imagenicolaka/netshoot --\curl-svhttp://10.96.0.42:8080/health用 ClusterIP 通、用域名不通→ DNS 问题。检查 CoreDNS Pod 是否正常、/etc/resolv.conf里的 nameserver 对不对:kubectl get pods-nkube-system-lk8s-appkube-dns kubectlexec-ittmp --cat/etc/resolv.conf# 应该有 nameserver 指向 CoreDNS 的 ClusterIP,search 域含 svc.cluster.local跨 namespace 访问时,短名字解析不到是常见坑——my-svc只在同 namespace 生效,跨 namespace 要用全名my-svc.other-ns.svc.cluster.local。用 ClusterIP 也不通→ kube-proxy 或 CNI 网络层。看 kube-proxy 是否在每个节点都健康:kubectl get pods-nkube-system-lk8s-appkube-proxy-owide# 确认每个节点都有一个 Running 的 kube-proxykube-proxy 挂了或规则没同步,发往 ClusterIP 的流量就不会被 DNAT 到后端 Pod,表现就是连 ClusterIP 超时。第四刀:NetworkPolicy 悄悄拦了前面全对却还是不通,最后查一个隐形杀手——NetworkPolicy。它一旦对目标 Pod 生效,默认会拒绝所有未显式放行的入站流量,而且不留任何错误日志,现象和「网络不通」一模一样。# 看目标 Pod 所在 namespace 有没有 NetworkPolicykubectl get networkpolicy-nmy-namespace如果有,读它的ingress规则,确认调用方的 Pod label / namespace 在放行名单里。一个典型的「default deny」策略会挡掉一切没被 allow 的来源:# 这条策略一旦存在,没被其他 allow 规则覆盖的入站流量全部被丢弃apiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:default-deny-ingressspec:podSelector:{}# 选中该 namespace 所有 PodpolicyTypes:-Ingress# 只管入站,且没写 ingress 规则 全拒补一条放行调用方的规则即可,别直接删 default-deny(那是安全基线)。一条命令快速定位在哪一层把上面浓缩成一个排查顺序,照着走通常几分钟见分晓:# 1. 后端列表空不空kubectl get endpoints my-svc# 2. Pod 内自己通不通(排除应用/bind 问题)kubectlexec-itpod--curl-s127.0.0.1:targetPort/health# 3. 换个 Pod 用 ClusterIP 直连(排除 DNS)kubectl run tmp--rm-it--imagenicolaka/netshoot --curl-sclusterIP:port/health# 4. 用域名再试一次(3 通 4 不通就是 DNS)kubectl run tmp--rm-it--imagenicolaka/netshoot --curl-smy-svc:port/health# 5. 查 NetworkPolicykubectl get networkpolicy-nns小结Service 打不通不是玄学,它就是一条固定的数据流,断点无非这几处:Endpoints 为空:selector 和 Pod label 没对上——最高频,先查这个。端口错位:targetPort必须等于容器真实监听端口;应用别 bind127.0.0.1,要0.0.0.0。DNS:ClusterIP 通、域名不通,查 CoreDNS 和跨 namespace 全名。kube-proxy / CNI:ClusterIP 都不通,查每个节点的 kube-proxy。NetworkPolicy:全对还不通,查有没有 default-deny 悄悄拦截。记忆点:永远从kubectl get endpoints开始——后端列表是空还是有,一眼就把问题劈成「选不中 Pod」和「网络路径」两半,剩下的顺着数据流往下走就行。

相关新闻

MZmine终极指南:5步掌握开源质谱数据分析全流程

MZmine终极指南:5步掌握开源质谱数据分析全流程

MZmine终极指南:5步掌握开源质谱数据分析全流程 【免费下载链接】mzmine3 mzmine source code repository 项目地址: https://gitcode.com/gh_mirrors/mz/mzmine3 MZmine是一款功能强大的开源质谱数据分析软件,专为代谢组学、脂质组学和蛋白质组学…

2026/7/31 13:08:41阅读更多 →
Amphenol LTW RDP5SM-RDP5SM-TR7B10线束组件应用解析

Amphenol LTW RDP5SM-RDP5SM-TR7B10线束组件应用解析

在现代工业设备中,连接系统不仅承担电气传输功能,同时也影响设备运行稳定性、维护效率以及整体可靠性。随着自动化设备、新能源系统以及智能终端的发展,工业级线束组件逐渐成为设备设计中不可忽视的重要组成部分。 本文围绕 Amphenol LTW RDP…

2026/7/31 13:08:41阅读更多 →
Zabbix 7.0网络设备自动发现与监控配置实战

Zabbix 7.0网络设备自动发现与监控配置实战

1. 为什么需要网络设备自动发现在运维监控领域,网络设备的自动发现一直是个让人又爱又恨的话题。我经历过太多凌晨三点被叫起来处理网络故障的夜晚,也见过不少运维团队因为设备漏监控而背锅的案例。传统的手工添加监控项方式,在设备数量超过5…

2026/7/31 13:08:41阅读更多 →
如何快速配置DamaiHelper全能抢票王:面向新手的完整自动化票务助手指南

如何快速配置DamaiHelper全能抢票王:面向新手的完整自动化票务助手指南

如何快速配置DamaiHelper全能抢票王:面向新手的完整自动化票务助手指南 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 还在为抢不…

2026/7/31 14:36:07阅读更多 →
Python全栈实战 Day 3:FastAPI用户注册、密码加密与JWT登录认证

Python全栈实战 Day 3:FastAPI用户注册、密码加密与JWT登录认证

Python全栈实战 Day 3:用户注册与JWT登录认证前言这是“10天Python全栈项目实战”系列的第3篇。前两天已经完成:FastAPI与Vue3项目搭建;第一个前后端接口调用;MySQL数据库连接;SQLAlchemy用户模型创建。今天将在现有项…

2026/7/31 14:36:07阅读更多 →
3分钟快速上手:用pkNX打造专属Switch宝可梦世界

3分钟快速上手:用pkNX打造专属Switch宝可梦世界

3分钟快速上手:用pkNX打造专属Switch宝可梦世界 【免费下载链接】pkNX Pokmon (Nintendo Switch) ROM Editor & Randomizer 项目地址: https://gitcode.com/gh_mirrors/pk/pkNX 想要个性化你的Switch宝可梦游戏体验吗?pkNX是一款功能强大的宝…

2026/7/31 14:36:07阅读更多 →
Unity Shader LOD技术详解:动态性能优化与多级着色器切换实战

Unity Shader LOD技术详解:动态性能优化与多级着色器切换实战

1. 项目概述:Shader LOD 到底是什么?在 Unity 开发中,尤其是面向移动端或需要兼顾性能与画质的项目,我们常常面临一个经典的两难选择:是追求极致的视觉效果,还是保证流畅的运行帧率?Shader LOD&…

2026/7/31 14:36:07阅读更多 →
Ryujinx模拟器:5步快速上手,在PC上畅玩Switch游戏的完整指南

Ryujinx模拟器:5步快速上手,在PC上畅玩Switch游戏的完整指南

Ryujinx模拟器:5步快速上手,在PC上畅玩Switch游戏的完整指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:旷野之息》…

2026/7/31 14:36:07阅读更多 →
5分钟掌握m4s-converter:B站缓存视频转换终极解决方案

5分钟掌握m4s-converter:B站缓存视频转换终极解决方案

5分钟掌握m4s-converter:B站缓存视频转换终极解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站视频突然下架而烦恼吗…

2026/7/31 14:34:07阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:40阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:41阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/31 0:49:33阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/31 5:08:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →