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

Kubernetes Ingress Nginx HTTP访问404但HTTPS正常求助

问题排查与解决步骤

1. 确认HTTP请求是否正确到达Ingress Controller

你的Ingress Controller的80端口映射到了NodePort 31797,而本地hosts配置为127.0.0.1 example.com。直接访问http://example.com时默认使用本地80端口,若该端口未转发到Ingress的31797,请求根本无法到达Ingress Controller。

  • 先尝试访问http://example.com:31797,若能正常响应,说明是本地端口转发问题:
    • Windows环境下可通过netsh工具将本地80端口映射到31797:
      netsh interface portproxy add v4tov4 listenport=80 listenaddress=127.0.0.1 connectport=31797 connectaddress=127.0.0.1
      
    • 或后续直接使用带端口的地址访问。

2. 修正Ingress路径匹配配置

你启用了正则匹配,但pathType设置为Prefix,这会导致正则规则无法正确生效(Kubernetes v1 Ingress中,use-regex注解仅在pathType为ImplementationSpecific时才能完全兼容正则匹配逻辑)。

修改Ingress配置的所有pathType为ImplementationSpecific:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: 
  name: ingress-srv
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/ssl-redirect: "false" # 保留该注解以禁用HTTPS强制跳转
spec:
  rules:
    - host: example.com
      http:
        paths:
          - path: /create-posts
            pathType: ImplementationSpecific
            backend:
              service:
                name: posts-clusterip-srv
                port:
                  number: 4000
          - path: /posts
            pathType: ImplementationSpecific
            backend:
              service:
                name: query-srv
                port:
                  number: 4002
          - path: /posts/?(.*)/comments
            pathType: ImplementationSpecific
            backend:
              service:
                name: comments-srv
                port:
                  number: 4001
          - path: /?(.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: client-srv
                port:
                  number: 3000

应用修改:

kubectl apply -f ingress-srv.yaml

3. 验证Ingress配置是否生效

查看Ingress的详细状态,确认路由规则已正确加载:

kubectl describe ingress ingress-srv

重点检查Rules部分是否完整显示所有路径,且无错误提示。

4. 查看Ingress Controller日志定位请求问题

通过日志分析HTTP请求的处理流程,确认请求是否匹配到正确的后端服务:

kubectl logs -n ingress-nginx deployment/ingress-nginx-controller

搜索example.com相关日志条目,关注请求的host、path以及upstream(后端服务)字段,判断是否存在路由匹配失败的情况。

5. 确认后端服务的可用性

检查所有后端ClusterIP服务是否正常运行且端口可访问:

# 测试posts-clusterip-srv
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://posts-clusterip-srv:4000/create-posts
# 测试query-srv
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://query-srv:4002/posts
# 测试comments-srv
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://comments-srv:4001/posts/test/comments
# 测试client-srv
kubectl run -it --rm --image=curlimages/curl curl-test -- curl http://client-srv:3000

若某个服务请求失败,说明该服务本身存在问题,需排查对应Deployment的Pod状态和日志。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:30:43