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