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

Kubernetes Ingress仅根路径可用,如何配置/users路径转发?

问题:Ingress路径重写配置不生效的原因及解决办法

现有配置与正常运行状态

原Ingress配置(ingress.yaml)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-ingress
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
    nginx.ingress.kubernetes.io/cors-allow-headers: "Content-Type"
    nginx.ingress.kubernetes.io/rewrite-target: "/"
spec:
  rules:
    - host: my-project.app.loc
      http:
        paths:
          - path: /
            pathType: ImplementationSpecific
            backend:
              service:
                name: user-service
                port:
                  number: 8080

后端Controller代码(UserController.java)

@RestController
public class UserController {

    @GetMapping("/hello1")
    public String sayHello1() {
        return "Hello World 1!";
    }

    @GetMapping("/hello2")
    public String sayHello2() {
        return "Hello World 2!";
    }

}

当前配置下,执行curl my-project.app.loc/hello1可以正常返回Hello World 1!。

需求目标

希望执行curl my-project.app.loc/users/hello1时,同样能返回Hello World 1!。

已验证的可行方案

目前找到两种有效方法,均需保持Ingress中的path为/:

  • 在UserController类上添加@RequestMapping("/users")注解
  • 在application.properties中配置server.servlet.context-path=/users

疑问点

网上很多示例仅通过修改Ingress配置path: /users即可实现类似需求,无需改动后端代码或配置文件,但自己尝试后却无效——明明已经配置了rewrite-target注解,想知道其中原因,以及如何仅通过Ingress配置实现需求。

最终解决配置

通过调整Ingress的路径匹配规则和重写目标,解决了问题,修改后的配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: my-project.app.loc
      http:
        paths:
          - path: /users/(.*)
            pathType: ImplementationSpecific
            backend:
              service:
                name: user-service
                port:
                  number: 8080

配置说明

  • path: /users/(.*)使用正则表达式匹配所有以/users/开头的路径,括号内的(.*)会捕获/users/之后的所有内容作为第一个分组
  • rewrite-target: /$1将重写后的路径设置为/加上捕获的分组内容,比如请求/users/hello1会被重写为/hello1,刚好匹配后端Controller中的接口路径,从而正常返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:40:41