Traefik 路由

本文介绍 请求(Requests) 与 Traefik 之间不可告人的秘密~

总览全局

让我们放大 Traefik 的架构,并讨论能够创建路由的组件。

Traefik 的架构

  1. 定义 Traefik 的入口点(ENTRYPOINTS),用于接收请求
  2. 收到请求后,路由(选择)器(ROUTERS)会分析请求,查看请求是否匹配定义好的规则
    • 如果有中间件(MIDDLEWARES),那么可能会对请求做一些转化(transform)
  3. 如果有则会将请求转发到定义的服务(SERVICES)——这里的服务不是指你的应用程序!!
  4. Traefik 的服务(SERVICES)将请求转送(forwarding)到你的应用程序

服务(SERVICES) 根据上下文语境,
有时候是指:Traefik 的服务(SERVICES)
有时候是指:你的应用程序

明确职责

  • Providers 在你的基础架构中发现服务 (它们的 IP,是否健康,…)
  • Entrypoints 侦听传入的流量
  • Routers 分析请求 (host, path, headers, SSL, …)
    • Middlewares 也许会对请求做一些处理 (身份验证,流量限速,headers)
  • Services 服务将请求转发给你的服务 (负载均衡,…)

入口点(Entrypoints)

traefik

TRAEfik IS THE ONLY ACCESSIBLE CONTAINER FROM THE OUTSIDE
TRAEfik 是唯一可以从外部访问的容器

把上面一句话的意思再整理一下:
如果我们要反向代理我们的服务(比如某个 Web应用),把 Traefik 与服务看作一个整体的话,那么 Traefik 就是唯一对外的访问入口~

运行一个什么都没有配置(也就是都使用默认配置),Traefik 的默认入口点是端口 80,

1
2
3
4
5
$ sudo ./traefik &
1259

$ curl 127.0.0.1
404 page not found
1
2
3
4
$ sudo kill 1259

ERRO[time] accept tcp [::]:80: use of closed network connection entryPointName=http
ERRO[time] close tcp [::]:80: use of closed network connection entryPointName=http

当然我们可以设置多个入口:

Traefik 入口点

设置入口的格式是:

1
[host]:port[/tcp|/udp]

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
## Static configuration
## entryPoints 的配置是属于静态配置
entryPoints:
web:
address: ":80"
websecure:
address: ":443"

streaming:
address: ":1704/udp"
tcpep:
address: ":3179"
udpep:
address: ":3179/udp"

# 有多个网卡时,指定监听那个网卡
specificIPv4:
address: "192.168.2.7:8888"
specificIPv6:
address: "[2001:db8::1]:8888"

entryPoints 还可以设置信任的 IP地址,请求生命周期,http 转 https 等…
更多信息,请查阅 官方文档 - EntryPoints

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到 Web服务器 的客户端最原始的 IP地址的 HTTP请求头 字段

路由(Routers)

路由(选择)器 —— 负责将传入请求连接到可以处理这些请求的服务。

Traefik 路由

在这个过程中,如果有中间件,那么请求转发到服务之前,可能会使用一些中间件来对请求做一些修改~
Traefik 中间件

这里的服务是指 Traefik 的 SERVICE

服务(Services)

服务 —— 配置如何访问服务

第一个服务是指 Traefik 的 SERVICE
第二个服务是指 你的应用程序

Traefik 服务

觉得文章对您有帮助,请我喝瓶肥宅快乐水可好 (๑•̀ㅂ•́)و✧
  • 本文作者: 阿彬~
  • 本文链接: https://iweixubin.github.io/posts/traefik/routing/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 免责声明:本媒体部分图片,版权归原作者所有。因条件限制,无法找到来源和作者未进行标注。
         如果侵犯到您的权益,请与我联系删除