kong 升级到 3.x 版本后正则表达式不起作用

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

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

如果正则表达式发生变化,请尝试几次。

regex kubernetes-ingress kong kong-ingress
3个回答
3
投票

为了补充 @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


0
投票

如果您已将 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官方文档。请参阅此链接了解更多信息。


0
投票

虽然以前的答案确实解决了这个问题,但我相信 kong 文档糟糕地解释了正则表达式路径应该是什么样子。

根据此 kong repo 线程,您的路径应该是:

/~/payment/(docs|health)

或者,如果您使用了

konghq.com/regex-prefix: /#
,那么您的正则表达式将为
/#/payment/(docs|health)

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