乐趣区

关于运维:基于-Traefik-如何实现-path-末尾自动加斜杠

前言

Traefik 是一个古代的 HTTP 反向代理和负载均衡器,使部署微服务变得容易。

Traefik 能够与现有的多种基础设施组件(Docker、Swarm 模式、Kubernetes、Marathon、Consul、Etcd、Rancher、Amazon ECS…)集成,并主动和动静地配置本人。

系列文章:

  • 《Traefik 系列文章》

实际中,一个很常见的需要,用户输出的 url 是 ewhisper.cn/alert-manager, 如果什么都不做会返回 404, 须要主动加斜杠变成 ewhisper.cn/alert-manager/, 如何基于 Traefik on K8S 实现?

答案是:用 redirectRegex MiddleWare + 正则。

实战

间接创立如下的 MiddleWare:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: auto-add-slash
spec:
  redirectRegex:
    permanent: true
    regex: ^(https?://[^/]+/[-a-z0-9_]+)$
    replacement: ${1}/

📝阐明如下:

正则匹配的内容为:

  • ^(https?: 以 https 或 http 结尾的内容;? 示意匹配前一个字符 0 或 1
  • [^/]+/: 匹配 URL 第一个 / 之前的内容
  • [-a-z0-9_]+: 匹配第一个 / 之后的内容,往往为字母数字和中划线及下划线

最终,^(https?://[^/]+/[-a-z0-9_]+)$ 该 group 匹配的内容示例如:https://ewhisper.cn/monitor-a…

🐾 留神 :

下面的 MiddleWare 可能无奈适应所有的状况, 读者能够体会其要点, 并依据本人的需要做适当调整.

IngressRoute 应用

间接这样应用:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: alertmanager
spec:
  routes:
    - kind: Rule
      match: Host(`ewhisper.cn`) && PathPrefix(`/alertmanager`)
      middlewares:
        - name: auto-add-slash
      services:
        - name: alertmanager
          port: 9093

🎉🎉🎉 实现!

EOF

三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

退出移动版