我在Helm中使用Nginx注释,比如:
ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api(/?)(.*)
当访问example.com/api/
时,我的URL会按预期重写,并且我会被转发到我的应用程序。
但是,如果省略了尾部斜线,例如example.com/api
,则不再是这种情况。我能做些什么来确保没有包含斜杠的场景得到正确评估?
我认为您正在搜索regex替代方案?
ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api(/|$)(.*)
要么在/api
之后有另一个/
,它包含任何内容(由$2
捕获(,要么是行的末尾,这将使/api
重写为/
。
您可以尝试在paths
数组中为该特定端点添加另一个路径:
ingress:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
hosts:
- host: "example.com"
paths:
- path: /api
...
- path: /api(/?)(.*)
...
如果您使用K8s 1.18或更高版本,您可以利用pathType
ingress:
hosts:
- host: "example.com"
paths:
- path: /api
pathType: Prefix