Kubernetes API调用延迟与间歇性故障排查求助
问题诊断与解决方案
1. 核心问题:Service与Pod标签不匹配
你的employee-service的selector配置为name: employee-app,但Deployment定义的Pod标签是app: employee-app,标签完全不匹配会导致Service无法找到任何后端Pod。Ingress转发请求时,会因找不到可用端点反复重试,最终触发超时,这就是你看到10秒延迟和110连接超时的直接原因。
修复方法:修改Service的selector,与Pod标签保持一致:
apiVersion: v1 kind: Service metadata: name: employee-service spec: selector: app: employee-app # 将此处的name改为app,与Pod标签对齐 ports: - protocol: TCP port: 8080 targetPort: 8080
2. 次要问题:DNS策略配置不合理
Deployment里设置了dnsPolicy: Default,这会让Pod使用节点的DNS配置,而非K8s集群内部的CoreDNS。虽然你提到集群内调用正常,但该配置可能导致Service解析不稳定,建议改回K8s默认的ClusterFirst:
spec: dnsPolicy: ClusterFirst # 替换原有的Default配置
3. 额外排查点
- 检查Ingress Class配置:如果集群中有多个Ingress Controller(如NGINX、Traefik),需在Ingress资源中指定
ingressClassName,否则可能被错误的Controller处理导致转发异常。示例:metadata: name: ingress-config spec: ingressClassName: nginx # 根据实际Ingress Controller名称填写 rules: # ... 原有规则内容 - 验证Service Endpoints:执行
kubectl get endpoints employee-service,若返回的ENDPOINTS字段为空,说明标签匹配问题确实存在,修复后应能看到Pod的IP列表。 - 查看Ingress Controller日志:执行
kubectl logs -n <ingress-controller命名空间> <ingress-controller Pod名称>,检查是否有后端连接失败、DNS解析错误的日志,进一步确认问题细节。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

