随笔 - 331  文章 - 0  评论 - 5  阅读 - 5050

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访问不通

  • 检查项:
    1. 节点防火墙是否开放NodePort范围(默认30000-32767)
    2. kube-proxy是否在所有Worker节点运行
    3. 云厂商安全组策略是否放行

案例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 }})"

六、终极排查流程图

Service访问失败
Endpoint是否正常?
检查Pod标签/状态
集群内访问是否通?
检查kube-proxy/网络插件
NodePort/LB是否通?
检查防火墙/云安全组
跨集群访问是否通?
检查Ingress/网关配置
检查应用层协议

排查口诀:一验配置二看Pod,三查网络四看DNS,内核日志不能忘,全链路跟踪见真章。

通过系统化的排查方法,90%的Service访问问题可以在30分钟内定位。建议每月进行一次Service连通性巡检,提前发现潜在隐患。

posted on   Leo-Yide  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示