kong 升级到版本 3.x 后,正则表达式不起作用。
从 kong 2.7 升级到 3.2 后,正则表达式停止工作。
2.7 中使用的正则表达式模式:
/payment/(docs|health)
3.2 中使用的正则表达式模式:
/~payment/(docs|health)
也尝试使用
~/payment/(docs|health)
,但它给出了错误,如屏幕截图所示
路径类型为
ImplementationSpecific
- apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
labels:
app.kubernetes.io/name: payment-svc
name: payment-without-auth
namespace: payment
spec:
ingressClassName: kong
rules:
- host: abc.example.com
http:
paths:
- backend:
service:
name: payment-svc
port:
number: 80
path: /payment/(docs|health)
pathType: ImplementationSpecific
如果正则表达式发生变化,请尝试几次。
为了补充 @kranthiveer-dontineni 的答案,您需要在 kubernetes 清单中使用
/~
前缀才能完成这项工作
以
开头的入口路径现在被视为常规路径 表达式,并被翻译成以以下开头的 Kong 路由路径 用 ~ 代替/~
。要保留现有翻译,请设置/~
达到某个值。例如,如果您设置konghq.com/regex-prefix
:konghq.com/regex-prefix
,以/@
开头的路径将导致 以/~
开始的路由路径,而以/~
开始的路径将导致 在以/@
开始的路线路径中。 #2956~
https://github.com/Kong/kubernetes-ingress-controller/blob/main/CHANGELOG.md#writing-changes-1
如果您已将 kong 部署从 2.8.X 升级到 3.0,则前缀 (~) 将自动添加到数据库中的路由中,并根据官方文档导致路由数据库和配置文件之间的配置漂移。
在使用状态文件更新数据库之前,请使用牌组转换命令将它们转换为 3.0 格式。
重要提示: 在将路径转换为 3.0 格式之前,请勿使用与 Kong Gateway 3.x 同步的牌组。这将破坏 3.x 中的所有正则表达式路由。
针对 2.x 状态文件运行 Deck-convert 将其转换为 3.x 文件:
deck convert --from kong-gateway-2.x --to kong-gateway-3.x --input-file kong.yaml --output-file new-kong.yaml
注意:本内容取自kong官方文档。请参阅此链接了解更多信息。
虽然以前的答案确实解决了这个问题,但我相信 kong 文档糟糕地解释了正则表达式路径应该是什么样子。
根据此 kong repo 线程,您的路径应该是:
/~/payment/(docs|health)
。
或者,如果您使用了
konghq.com/regex-prefix: /#
,那么您的正则表达式将为 /#/payment/(docs|health)
。