Kubernetes nginx Ingress 重写目标导致双斜杠

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

我正在为 Kubernetes 创建入口配置文件。

当我访问

/front/main/dashboard/3
时,我想重定向到
/main/dashboard/3

但是,当我访问
/back/main/dashboard/3
时,我想保留在
/back/main/dashboard/3

本质上,我需要从 URL 中删除“/front”。
我一直使用此文件进行测试:

# demo-ingress.yaml
kind: Pod
apiVersion: v1
metadata:
  name: foo-app
  labels:
    app: foo
spec:
  containers:
    - name: foo-app
      image: "kicbase/echo-server:1.0"
---
kind: Service
apiVersion: v1
metadata:
  name: foo-service
spec:
  selector:
    app: foo
  ports:
    - port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1$2 # Here we concatenate the two matched groups
spec:
  rules:
    - http:
        paths:
          - path: /front()(.*) # Here the first matching group is always empty
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080
          - path: /(back)(.*) # Here the first matching group matches 'back'
            pathType: ImplementationSpecific
            backend:
              service:
                name: foo-service
                port:
                  number: 8080

当我跑步时

kubectl apply -f demo-ingress.yaml && curl 192.168.49.2:80/back/main/dashboard/3

我得到了预期的回应

HTTP/1.1 GET /back/main/dashboard/3

但是,当我跑步时

kubectl apply -f demo-ingress.yaml && curl 192.168.49.2:80/front/main/dashboard/3

我明白了

HTTP/1.1 GET //main/dashboard/3

我已经尝试了各种配置来解决此问题,但尚未找到解决方案。 任何帮助将不胜感激。

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

我觉得这里需要更新正则表达式。您正在尝试匹配第 1 组和第 2 组。

请更改-

  1. /front()(.*)
    ->
    /front(/|$)(.*)
  2. /(back)(.*)
    ->
    /(/back)(.*)
  3. /$1$2
    ->
    $1$2

这应该映射

/front
->
/
/front/whatever
->
/whatever

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