You need to enable JavaScript to run this app. Kubernetes Ingress请求转发规则及Spring Boot接口404问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Ingress请求转发规则及Spring Boot接口404问题咨询

请求路径的修改逻辑

你当前的Ingress配置添加了nginx.ingress.kubernetes.io/rewrite-target: /注解,所有匹配前缀路径的请求都会被重写为根路径后转发到后端服务:

  • 你发起的请求路径为/api/helloworld,匹配到path: /api的规则
  • Nginx Ingress会将路径重写为/helloworld后转发给rest-service服务
  • 所以Spring Boot收到的请求路径不是原来的/api/helloworld,也不会调用映射到/api/helloworld的端点

404错误的原因

你的配置存在冲突,具体原因如下:
你在Spring Boot中配置了server.servlet.context-path=/api,意味着Spring Boot所有接口的访问路径都需要加上/api前缀,也就是你写的/helloworld接口实际可访问路径是/api/helloworld。但Ingress转发给Spring Boot的路径是/helloworld,和Spring期望的路径不匹配,因此返回404错误。

解决方案

可以任选以下一种方案调整:

方案1:修改Ingress配置,保留原始路径前缀

直接删除nginx.ingress.kubernetes.io/rewrite-target: /注解,调整后的Ingress配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: smf-ingress
spec:
  rules:
    - http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: rest-service
                port:
                  number: 80
          - path: /
            pathType: Prefix
            backend:
              service: 
                name: ng-service
                port:
                  number: 4200

这种方案下,/api/helloworld请求会原封不动转发给Spring Boot,刚好匹配context-path=/api的配置。

方案2:调整Spring Boot的context-path配置

将Spring Boot配置文件中的server.servlet.context-path=/api改为server.servlet.context-path=/(或者直接删除该配置,默认值就是/),这样Spring Boot接收的路径不需要前缀,Ingress转发的/helloworld就可以正常匹配到对应的接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 02:15:01