我正在为 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
我已经尝试了各种配置来解决此问题,但尚未找到解决方案。 任何帮助将不胜感激。
我觉得这里需要更新正则表达式。您正在尝试匹配第 1 组和第 2 组。
请更改-
/front()(.*)
-> /front(/|$)(.*)
/(back)(.*)
-> /(/back)(.*)
/$1$2
-> $1$2
这应该映射
/front
-> /
,/front/whatever
-> /whatever