K8s生产环境Service访问故障排查
Kubernetes生产环境Service访问故障排查指南(全流程图解)
在Kubernetes集群中,Service访问异常是最常见的网络问题之一。本文将结合生产实践经验,手把手教你从基础到高阶的排查方法,并附赠排查流程图。
一、5分钟快速定位(新手必会)
1. 基础四连击
# 查看Service基础信息
kubectl get svc <service-name> -o wide
# 检查Endpoint是否正常
kubectl get endpoints <service-name>
# 验证Pod是否健康
kubectl get pods -l app=<selector-label>
# 测试集群内访问
kubectl run -it --rm --image=alpine testpod -- sh
> curl -Iv http://<service-name>.<namespace>.svc.cluster.local
2. 常见快速修复场景
- Endpoint为空 ➜ 检查Pod标签与Service Selector是否匹配
- 端口映射错误 ➜ 确认targetPort与容器端口一致
- ClusterIP访问不通 ➜ 检查kube-proxy日志是否有异常
二、分层排查法(进阶必备)
第1层:Service配置验证
# 典型错误配置示例(避坑!)
spec:
ports:
- port: 80 # Service暴露端口
targetPort: 80 # 必须与Pod容器端口一致
selector:
app: frontend # 必须与Pod标签完全匹配
第2层:网络策略检查
# 查看生效的NetworkPolicy
kubectl describe networkpolicy <policy-name>
# 临时禁用所有策略(生产慎用)
kubectl label namespace <ns> projectcalico.org/disable-network-policy=true
第3层:DNS解析诊断
# 查看CoreDNS运行状态
kubectl -n kube-system get pods -l k8s-app=kube-dns
# 手动解析测试
kubectl run -it --rm --image=infoblox/dnstools dnscheck -- \
nslookup <service-name>.<namespace>.svc.cluster.local
第4层:节点级网络检查
# 检查kube-proxy iptables规则
iptables-save | grep <service-ip>
# 验证IPVS转发规则(如果使用IPVS模式)
ipvsadm -Ln | grep <service-ip>
# 查看conntrack表项
conntrack -L -d <pod-ip>
三、高阶排查工具链
1. 全链路抓包分析
# 在Service Pod所在节点抓包
tcpdump -i any host <pod-ip> and port <targetPort> -w service.pcap
# 使用Wireshark分析:
过滤条件:tcp.port == <targetPort> && http
2. eBPF深度观测
# 使用BCC工具追踪TCP连接
trace 'tcp_v4_connect(struct sock *sk) "saddr=%pi4 sport=%d daddr=%pi4 dport=%d", sk->__sk_common.skc_rcv_saddr, sk->__sk_common.skc_num, sk->__sk_common.skc_daddr, sk->__sk_common.skc_dport'
3. 网络拓扑可视化
# 安装Weave Scope
kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"
# 访问可视化界面
kubectl port-forward svc/weave-scope-app -n weave 4040:80
四、典型生产案例解析
案例1:NodePort访问不通
- 检查项:
- 节点防火墙是否开放NodePort范围(默认30000-32767)
- kube-proxy是否在所有Worker节点运行
- 云厂商安全组策略是否放行
案例2:Headless Service异常
- 排查要点:
# 验证SRV记录 dig +short SRV _<port>._tcp.<service>.<ns>.svc.cluster.local # 检查StatefulSet的Pod DNS格式 <pod-name>.<service>.<ns>.svc.cluster.local
案例3:跨命名空间访问失败
- 正确访问格式:
<service-name>.<namespace>.svc.cluster.local
- 必须启用网络策略跨ns访问:
# NetworkPolicy配置示例 ingress: - from: - namespaceSelector: matchLabels: project: prod
五、预防性配置清单
1. Service健康检查配置
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
2. 服务网格加固(Istio示例)
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: dr-retry
spec:
host: my-service
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
outlierDetection:
consecutiveErrors: 5
interval: 5m
baseEjectionTime: 1m
3. 监控告警配置
关键监控指标:
kube_service_spec_type
kube_endpoint_address_available
probe_success{job="kubernetes-services"}
Prometheus告警规则示例:
- alert: ServiceEndpointDown
expr: up{job="kubernetes-service-endpoints"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Service endpoint down ({{ $labels.instance }})"
六、终极排查流程图
排查口诀:一验配置二看Pod,三查网络四看DNS,内核日志不能忘,全链路跟踪见真章。
通过系统化的排查方法,90%的Service访问问题可以在30分钟内定位。建议每月进行一次Service连通性巡检,提前发现潜在隐患。
分类:
Kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!