入口 nginx 路由到最后一个通配符并忽略优先级

问题描述 投票:0回答:1

我有以下入口服务配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-svc
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: localhost
      http:
        paths:
          - path: /backend
            backend:
              service:
                name: backend-svc
                port:
                  number: 4000
            pathType: Prefix
          - path: /?(.*)
            backend:
              service:
                name: web-svc
                port:
                  number: 8080
            pathType: Prefix

我转发端口,以便可以通过 localhost:3000 访问集群,但看起来当我尝试访问 localhost:3000/backend 时,我路由到 web-svc 并获得 404 状态代码,而不是路由到后端 svc 正如预期的那样。不过,当我删除对 web-svc 的引用时,我可以很好地路由到后端服务。我该如何解决?谢谢。

nginx kubernetes-ingress nginx-ingress ingress-nginx
1个回答
0
投票

目前,

path /?(.*)
匹配所有路径,包括
/backend
,这就是为什么对
/backend
的请求被路由到
web-svc

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-svc
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: localhost
      http:
        paths:
          - path: /backend
            backend:
              service:
                name: backend-svc
                port:
                  number: 4000
            pathType: Prefix
          - path: /.*
            backend:
              service:
                name: web-svc
                port:
                  number: 8080
            pathType: Prefix

使用此配置,对

/backend
的请求将被路由到
backend-svc
,所有其他路径将被路由到
web-svc

© www.soinside.com 2019 - 2024. All rights reserved.