在 traefik 入口中向微服务根路径添加尾部斜杠

Ale*_*aev 6 traefik traefik-ingress

Traefik 入口控制器已经支持traefik.frontend.rule.type: PathPrefixStrip相当长一段时间了,当微服务的根路径需要在example.com/path/.

\n\n

以下是带有清单的 yaml 示例:

\n\n
apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: example\n  annotations:\n    traefik.frontend.rule.type: PathPrefixStrip\nspec:\n  rules:\n  - host: example.com\n    http:\n      paths:\n      - path: /path/\n        backend:\n          serviceName: example\n          servicePort: http\n
Run Code Online (Sandbox Code Playgroud)\n\n

这种方法的问题在于,当客户端转到 \xe2\x80\x93 时,它不会添加尾部斜杠(example.com/path如果我理解正确的话),这只能通过额外的入口规则来实现。

\n\n

traefik 的最新版本支持更广泛的注释集,这表明可以在一个规则内声明添加尾部斜杠。

\n\n

这是我在 traefik 中解决这个问题的尝试1.7

\n\n
apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: example\n  annotations:\n    traefik.ingress.kubernetes.io/redirect-permanent: "true"\n    traefik.ingress.kubernetes.io/redirect-regex: https?://example.com/path$\n    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/path/\n    traefik.ingress.kubernetes.io/request-modifier: "ReplacePathRegex: ^/path/(.*) /$1"\nspec:\n  rules:\n  - host: example.com\n    http:\n      paths:\n      - path: /path\n        backend:\n          serviceName: example\n          servicePort: http\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是可行的,但我不确定该解决方案是否是最优雅和最高效的。哪些方面可以简化或改进?是否可以概括正则表达式以使复制粘贴更容易?

\n\n

这是目标,只是回顾一下:

\n\n

http://example.com/path\xe2\x86\x92 301 到http://example.com/path/
\n http://example.com/path/\xe2\x86\x92 示例微服务,路径/
\n http://example.com/path/abcde\xe2\x86\x92 示例微服务,路径/abcde

\n