Service到Pod链路是否通畅,首先检查kubectl describe svc中Endpoints字段是否有IP:Port列表;为空则说明Selector未匹配Pod或Pod未就绪;再用curl -w "%{time_total}s"直连ClusterIP测转发延迟,超100ms需排查kube-proxy或CNI。

查 Service 到 Pod 的链路是否通
Service 层面的转发延迟最常被忽略,但实际中它可能比应用本身还慢。先确认 Endpoints 是否真实存在且匹配:
-
kubectl describe svc your-service看输出里Endpoints字段有没有 IP:Port 列表;为空说明 selector 没匹配上 Pod,或 Pod 处于非 Ready 状态 - 用
kubectl run debug-tool --image=nicolaka/netshoot --rm -it -- curl -v http://<cluster-ip>:<port>直接连 ClusterIP,绕过 DNS 和 Ingress,测纯 Service 转发耗时 - 如果
curl -w "%{time_total}s" -o /dev/null -s返回 >100ms,基本可定位到 kube-proxy 或 CNI 插件问题
抓包看 iptables 或 eBPF 规则是否拖慢转发
kube-proxy 默认用 iptables 模式,规则多时会线性匹配,高并发下首包延迟飙升;ipvs 模式虽快,但连接复用异常也会卡住连接。eBPF 模式(如 Cilium)更高效,但调试门槛高。
- 在节点上执行
iptables -t nat -L KUBE-SERVICES -n --line-numbers | head -20,若规则数超 5000 条,iptables 匹配开销已不可忽视 - 用
tcpdump -i any port <service-port> -w capture.pcap抓包,重点看 SYN → SYN-ACK 时间差;若 >50ms,大概率是内核 netfilter 队列堆积或 conntrack 表满 - Cilium 用户可运行
cilium monitor --type trace查看策略匹配路径,避免误配 L7 规则导致每包解析 HTTP
Go 应用内统计真实链路耗时,别只信日志打点
日志里写“start→end=120ms”不等于用户感知延迟,中间可能卡在 DNS、TLS 握手、连接池等待、或 context 超时前被 cancel。要用 OpenTelemetry 埋点抓完整路径。
- 确保
http.Client设置了Timeout和Transport的DialContext,否则 DNS 解析失败会卡 30 秒(glibc 默认超时) - 在 Go 请求发起处注入 span:
span := trace.SpanFromContext(r.Context()),再用span.AddEvent("dns_start")和span.AddEvent("tls_handshake_end")打关键子阶段 - 避免用
time.Since()统计耗时——它不包含 GC STW 或调度延迟;OpenTelemetry 的otelhttp.NewHandler中间件能自动捕获这些
跨节点通信延迟高?先盯住 conntrack 和 MTU
节点间 Pod 通信走的是宿主机网络栈,conntrack 表溢出或 MTU 不一致会导致分片、重传、甚至连接直接失败,表现就是偶发 3~5 秒卡顿。
- 检查 conntrack 使用率:
conntrack -S | grep "entries",若接近max值(通常 65536),加net.netfilter.nf_conntrack_max=131072并 reload sysctl - 验证 MTU 是否一致:
ip link show | grep mtu对比物理网卡、CNI 接口(如 cni0)、Pod veth 端,三者必须相同;Kubernetes 默认用 1450,但某些云厂商 VPC MTU 是 1500,需手动对齐 - 用
ping -M do -s 1472 <other-pod-ip>测试路径 MTU(1472 + 28 = 1500),若不通,说明中间设备丢弃了分片包
真正难定位的是那种“偶发 2 秒延迟、日志无报错、监控曲线平滑”的情况——它往往藏在 conntrack 回收策略、TCP TIME_WAIT 复用冲突、或者 CNI 插件里一段没日志的 eBPF map 更新卡顿里。这类问题没法靠单个命令解决,得把 conntrack -E 实时事件、ss -i 连接指标、和 Go runtime/metrics 指标三者对齐看。


















