乐趣区

关于运维:基于Traefik如何实现向后转发自动去掉前缀

前言

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

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

系列文章:

  • 《Traefik 系列文章》

实际中, 往往会有这样的需要, 用户输出的 url 是 https://ewhisper.cn/alert-manager/#/alerts, 然而转发到后端要变成 http://alertmanager:9093/#/alerts, 如何基于 Traefik on K8S 实现?

答案是: 应用 StripPrefixRegex MiddleWare.

实战

间接创立如下的一个 MiddleWare:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: strip-prefix-1
spec:
  stripPrefixRegex:
    regex:
      - /[^/]+/

以上实现的性能就是去掉一层 /<xxx>/ 前缀.

去掉两层前缀

去掉两层前缀也很简略:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: strip-prefix-2
spec:
  stripPrefixRegex:
    regex:
      - /[^/]+/[^/]+/

IngressRoute 应用

间接这样应用:

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

🎉🎉🎉 实现!

EOF

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

退出移动版