Kubernetes Service 间歇性访问失败:CoreDNS、kube-proxy、CNI 与 MTU 排查

2026-08-09
1
-
- 分钟

# Kubernetes Service 间歇性访问失败:CoreDNS、kube-proxy、CNI 与 MTU 排查

Service 偶发超时最难排查,因为 Pod 看起来正常,重试又可能成功。建议沿着“域名解析—Service 转发—Pod 网络—宿主机网络—应用监听”逐层缩小范围。

## 一、先固定故障边界

记录调用方 Pod、目标域名、Service、端口、协议、失败时间和比例。分别测试 Service 域名、ClusterIP、Pod IP 和同节点 Pod IP。

```bash

kubectl get svc,endpoints,endpointslices -A -o wide

kubectl run net-debug --rm -it --image=nicolaka/netshoot -- bash

dig +time=2 +tries=1 api.default.svc.cluster.local

curl -sv --connect-timeout 3 http://<cluster-ip>:<port>/health

curl -sv --connect-timeout 3 http://<pod-ip>:<port>/health

```

只有域名失败,重点看 CoreDNS;ClusterIP 失败但 Pod IP 正常,重点看 kube-proxy/IPVS;Pod IP 也失败,重点看 CNI、路由、策略和宿主机。

## 二、检查端点和就绪状态

确认 Service selector 是否选中正确 Pod,EndpointSlice 中是否存在过期地址,readinessProbe 是否频繁抖动。

```bash

kubectl describe svc <svc> -n <ns>

kubectl get endpointslice -n <ns> -l kubernetes.io/service-name=<svc> -o yaml

kubectl get pod -n <ns> -o wide

kubectl describe pod <pod> -n <ns>

```

如果滚动发布期间失败,检查 terminationGracePeriodSeconds、preStop、就绪探针和负载均衡摘除时序。

## 三、检查 CoreDNS

```bash

kubectl -n kube-system get pod -l k8s-app=kube-dns -o wide

kubectl -n kube-system logs -l k8s-app=kube-dns --tail=200

kubectl -n kube-system top pod -l k8s-app=kube-dns

```

关注超时、SERVFAIL、上游 DNS 不可达、缓存击穿和 CPU throttling。必要时临时扩容 CoreDNS,但扩容前应确认节点和网络没有共同故障。

## 四、检查 kube-proxy 与连接跟踪

iptables 模式检查规则是否存在;IPVS 模式检查虚拟服务和真实服务器。

```bash

iptables-save | grep <cluster-ip>

ipvsadm -Ln --stats

conntrack -S

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

```

连接跟踪表接近上限、规则同步失败或 kube-proxy 反复重启,都会导致间歇性丢包。

## 五、检查 CNI、NetworkPolicy 与 MTU

查看 CNI Agent 日志、节点路由和接口错误。跨节点失败、同节点正常时尤其要检查隧道 MTU。

```bash

ip route

ip -s link

ping -M do -s 1400 <pod-ip>

tracepath <pod-ip>

kubectl get networkpolicy -A

```

如果小包正常、大响应超时,常见原因是 VXLAN/IPIP 封装后超过底层 MTU,而 ICMP 又被防火墙拦截。

## 六、止血和验证

先隔离异常节点、扩容健康副本、暂停发布,再针对故障层处理。修复后至少验证:DNS 连续解析、跨节点访问、长连接、滚动发布、峰值并发和大包传输,并持续观察 30 分钟错误率与重传率。

原创

Kubernetes Service 间歇性访问失败:CoreDNS、kube-proxy、CNI 与 MTU 排查

本文链接: Kubernetes Service 间歇性访问失败:CoreDNS、kube-proxy、CNI 与 MTU 排查

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录