traefix之静态部署手动配置

-
-
2024-04-13

traefix是类似于nginx的可以做反向代理的边缘路由网关,根据介绍原生支持微服务和各种集群,目前只接触到单机静态部署,因为刚接触不了解,一直按nginx的思维去配置,绕了不少弯路,所以写这篇文章记录一下。

基本介绍

traefix不像nginx那样监听、路由、目标服务地址都配在一处,他支持动态服务发现,动态路由,一般请求需要经过三大步骤:入口、路由、服务

在这里插入图片描述

这涉及到几个核心组件:

Providers:服务提供商,用来动态注册服务以及路由的

Entrypoints:定义入口端点,也就是要监听的端口

Routers:路由,根据请求的数据做响应匹配,判断调用哪个服务

Services:定义后端服务api,提供给路由调用

Middlewares:中间件,路由之后可以调用一系列的中间件处理请求,之后再调用服务

静态配置

providers是基础组件,用来动态注册服务和路由的,他可以来自docker,可以来自kubernetes,也可以来自配置文件,起先刚接触的时候见到了其他教程,将上面的三大组件放到一起介绍,导致我误以为静态配置时,是配置在同一个配置文件同一个层级的,一直不生效,折腾了一整晚。

其实,traefik分为静态配置部分和动态配置部分,Providers和Entrypoints是静态配置部分,配置入口端点以及动态发现地址。

# traefik.yml

entrypoints:
  # 自定义入口名称
  web:
    address: ":80"
    http:
      # 重定向到另外一个入口
      redirections:
        entryPoint:
          to: websecure
  # 自定义入口名称
  websecure:
    address: ":443"
    http:
      tls: {}
    
providers:
  # 定义一个来自文件的服务提供商
  file:
    filename: dynamic_conf.yml
    # 监听文件变更,一般不轻易变更的话就不用配置这个
    watch: true

这里只需要配置好监听哪些端口,以及如何去动态的获取Routers、Services、Middlewares。watch选项设置为true,那么traefix会去监视dynamic_conf.yml的变化,如果dynamic_conf.yml不需要经常变更,则不用配置

动态配置部分

另外创建一个配置文件给traefix获取路由、中间件、服务。

# dynamic.yaml

http:
  # 路由配置
  routers:
    # 为路由自定义一个名称
    blog:
      # 路由规则,这里表示匹配域名为dards.cn的请求,所有前缀为/的请求
      rule: "Host(`blog.dards.cn`) && PathPrefix(`/`)"
      # 调用哪个服务,这里的服务在下面的services里定义。
      service: blogService
      # 启用ssl,需要在tls里配置blog.dards.cn对应的证书,这里还有高级配置先不展开
      tsl: {}
  # 服务配置
  services:
    # 自定义服务名
    blogService:
      loadBalancer:
        servers: 
          - "http://localhost:8080"
          - "http://localhost:8090"
# 定义证书路径
tls:
  certificates:
    - certFile: /ssl/blog.dards.cn.crt
      keyFile: /ssl/blog.dards.cn.key

有时候我们后端服务url地址可能不在根目录,用反向代理也可以轻易变更路径,而不用去变更原有的后端服务,在路由那边添加middlewares。

# dynamic.yaml

http:
  # 路由配置
  routers:
    # 为路由自定义一个名称
    blog:
      # 路由规则,这里表示匹配域名为blog.dards.cn的请求,所有前缀为/的请求
      rule: "Host(`blog.dards.cn`) && PathPrefix(`/`)"
      # 调用哪个服务,这里的服务在下面的services里定义。
      service: blogService
      # 声明调用后端服务之前,需要执行的中间件列表,对请求数据做处理
      middlewares:
        - rootToShare
      # 启用ssl,需要在tls里配置blog.dards.cn对应的证书,这里还有高级配置先不展开
      tsl: {}
  # 服务配置
  services:
    # 自定义服务名
    blogService:
      loadBalancer:
        servers: 
          - "http://localhost:8080"
          - "http://localhost:8090"
  # 中间件定义
  middlewares: 
    # 自定义名称
    rootToShare:
      # 这个中间件的功能是对路径做正则表达式替换
      # 以下配置的效果就是所有对根路径/的请求,都增加/share/前缀后再请求后端
      replacePathRegex:
        regex: "^/(.*)"
        replacement: "/share/$1"
# 定义证书路径
tls:
  certificates:
    - certFile: /ssl/blog.dards.cn.crt
      keyFile: /ssl/blog.dards.cn.key

 


目录