You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nginx的K8s Ingress返回404,请求故障排查帮助

问题排查与解决方案

核心问题定位

Nginx日志提示Service "default/studio-auth-api" does not have any active Endpoint,说明Service未关联到处于就绪状态的Pod。虽然你能通过NodePort正常访问服务,但NodePort是直接暴露Pod端口,不受Pod就绪状态影响;而Service只会将标记为"就绪"的Pod加入端点列表,这是两者的核心差异。

具体修复方案

1. 修复存活探针端口错误

你的Deployment中存活探针访问的是localhost:80/health,但容器实际监听端口为8080(从Dapr配置dapr.io/app-port: "8080"、Service的targetPort:8080均可验证)。探针访问错误端口会导致持续失败,Pod被标记为未就绪,自然不会被Service纳入端点。

修改Deployment的存活探针配置:

livenessProbe:
  exec:
    command:
      - curl --fail http://localhost:8080/health || exit 1
  failureThreshold: 3
  periodSeconds: 30
  timeoutSeconds: 30

2. 补充就绪探针(推荐)

仅依赖存活探针不足以确保Pod真正就绪,建议添加就绪探针,让Service仅在Pod完全可用时才将其加入端点:

readinessProbe:
  exec:
    command:
      - curl --fail http://localhost:8080/health || exit 1
  initialDelaySeconds: 10
  periodSeconds: 10

3. 验证标签匹配(兜底检查)

确认Service的selector与Pod的labels完全匹配:

  • Service selector:io.kompose.service: studio-auth-api
  • Pod labels:已包含io.kompose.service: studio-auth-api,配置无误。若修复探针后仍有问题,可执行以下命令排查:
# 查看Service关联的端点状态
kubectl get endpoints studio-auth-api -n default
# 查看Pod的标签和就绪状态
kubectl get pods -l io.kompose.service=studio-auth-api -n default -o wide

4. 优化Ingress路径规则

当前Ingress路径/auth(/|$)(.*)可简化为/auth(/|.*),更符合Nginx Ingress的路径匹配逻辑:

paths:
- path: /auth(/|.*)
  pathType: ImplementationSpecific
  backend:
    service:
      name: studio-auth-api
      port:
        number: 8080

验证步骤

  1. 应用修改后的Deployment配置:kubectl apply -f deployment.yaml -n default
  2. 等待Pod重启并进入就绪状态:kubectl wait pod -l io.kompose.service=studio-auth-api --for=condition=ready -n default
  3. 确认Service已关联端点:kubectl get endpoints studio-auth-api -n default
  4. 重新访问api.studio/auth/whatever验证功能正常

内容的提问来源于stack exchange,提问作者matt sharp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:43:13