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

Kubernetes Ingress配置后Nginx返回服务暂不可用问题排查

问题排查与解决步骤

1. 跨命名空间访问Service的问题

你的Ingress部署在ingress-nginx命名空间,但auth-srv Service处于默认(default)命名空间(你的Service YAML未指定namespace字段)。Kubernetes Ingress默认仅能访问同一命名空间内的Service,跨命名空间访问需使用服务的完全限定域名(FQDN)。

修复方案:

修改Ingress的Service引用为FQDN格式,更新后的Ingress YAML:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
  namespace: ingress-nginx
spec:
  ingressClassName: nginx
  rules:
    - host: ticketing.dev
      http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: auth-srv.default.svc.cluster.local
                port:
                  number: 5000
            path: /

也可选择将Deployment和Service部署到ingress-nginx命名空间(不推荐,建议业务服务与Ingress Controller分属不同命名空间)。

2. 验证Pod内服务的监听地址

确保你的Node.js服务监听0.0.0.0而非127.0.0.1。若服务仅绑定本地回环地址,Service将无法访问Pod内的服务。

检查方法:

进入Pod内部执行命令查看监听端口:

kubectl exec -it <auth-pod-name> -- netstat -tulpn

若输出中LISTEN地址为127.0.0.1:5000,需修改Node.js代码的监听配置:

// 原代码可能为
app.listen(5000, '127.0.0.1');
// 修改为
app.listen(5000, '0.0.0.0');

之后重新构建镜像并更新Deployment。

3. 验证Ingress Controller状态

确认ingress-nginx Controller的Pod处于Running状态:

kubectl get pods -n ingress-nginx

若Pod异常,查看日志排查问题:

kubectl logs <ingress-controller-pod-name> -n ingress-nginx

4. 测试Service到Pod的连通性

从Ingress Controller的Pod内部测试访问auth-srv Service:

kubectl exec -it <ingress-controller-pod-name> -n ingress-nginx -- curl auth-srv.default.svc.cluster.local:5000

若返回服务正常响应,说明Service到Pod的链路正常;若超时或报错,可再次核对Service的selector与Pod的labels(你的配置中selector: app: auth与Pod的labels: app: auth匹配,此部分无需修改)。

5. 检查Ingress资源的状态

查看Ingress的事件与状态:

kubectl describe ingress example -n ingress-nginx

重点检查Events字段,排查是否存在Service找不到、权限异常等错误提示。


内容的提问来源于stack exchange,提问作者Ayush Niroula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:40:37