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

时间:2018-08-05 19:27:55

标签: traefik traefik-ingress

Traefik入口控制器已经支持traefik.frontend.rule.type: PathPrefixStrip很长时间了,当需要在example.com/path/上提供微服务的根路径时,这很有用。

这是带有清单的示例Yaml的样子:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example
  annotations:
    traefik.frontend.rule.type: PathPrefixStrip
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /path/
        backend:
          serviceName: example
          servicePort: http

这种方法的问题在于,当客户端转到example.com/path时,它不会在末尾添加斜线-如果我正确理解,则只能使用额外的入口规则来实现。

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

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

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example
  annotations:
    traefik.ingress.kubernetes.io/redirect-permanent: "true"
    traefik.ingress.kubernetes.io/redirect-regex: https?://example.com/path$
    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/path/
    traefik.ingress.kubernetes.io/request-modifier: "ReplacePathRegex: ^/path/(.*) /$1"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /path
        backend:
          serviceName: example
          servicePort: http

这可行,但是我不确定该解决方案是否最优雅,性能最高。有什么可以简化或改进的?是否有可能将正则表达式泛化以简化复制粘贴?

这是我们的目标,仅供参考:

http://example.com/path→301至http://example.com/path/
http://example.com/path/→示例微服务,路径/
http://example.com/path/abcde→示例微服务,路径/abcde

0 个答案:

没有答案