1. 简介
1.1 Traefik 简介
Traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。
它是一个边缘路由器,它会拦截外部的请求并根据逻辑规则选择不同的操作方式,这些规则决定着这些请求到底该如何处理。Traefik 提供自动发现能力,会实时检测服务,并自动更新路由规则。
1.2 Traefik 核心组件
从上图可知,当请求 Traefik 时,请求首先到 entrypoints
,然后分析传入的请求,查看他们是否与定义的 Routers
匹配。如果匹配,则会通过一系列 middlewares
处理,再到 traefikServices
上做流量转发,最后请求到 kubernetes的services上
。
这就涉及到以下几个重要的核心组件:
-
Providers 是基础组件,Traefik 的配置发现是通过它来实现的,它可以是协调器,容器引擎,云提供商或者键值存储。Traefik 通过查询
Providers
的API
来查询路由的相关信息,一旦检测到变化,就会动态的更新路由。 -
Entrypoints 是
Traefik
的网络入口,它定义接收请求的接口,以及是否监听TCP或者UDP。 -
Routers 主要用于分析请求,并负责将这些请求连接到对应的服务上去,在这个过程中,Routers还可以使用Middlewares来更新请求,比如在把请求发到服务之前添加一些Headers。
-
Services 负责配置如何到达最终将处理传入请求的实际服务。
-
Middlewares 用来修改请求或者根据请求来做出一些判断(authentication, rate limiting, headers, …),中间件被附件到路由上,是一种在请求发送到你的服务之前(或者在服务的响应发送到客户端之前)调整请求的一种方法。
1.3 traefik组件与nginx类比
组件名称 | 功能 | nginx相同概念 |
Providers | 监听路由信息变化,更新路由 | 修改nginx配置,reload服务。 |
Entrypoints | 网络入口,监听传入的流量 | 配置文件listen指定监听端口 |
Routers | 分析传入的请求,匹配规则 | 配置文件server_name+location |
Middlewares | 中间件,修改请求或响应 | location配置段中添加的缓存、压缩、请求头等配置 |
Service | 请求转发 | http配置段中的upstream |
1.4 Traefik CRD资源
参考文档:https://doc.traefik.io/traefik/routing/providers/kubernetes-crd/
traefik通过自定义资源实现了对traefik资源的创建和管理,支持的crd资源类型如下所示:
kind |
功能 |
IngressRoute |
HTTP路由配置 |
Middleware |
HTTP中间件配置 |
TraefikService |
HTTP负载均衡/流量复制配置 |
IngressRouteTCP |
TCP路由配置 |
MiddlewareTCP |
TCP中间件配置 |
IngressRouteUDP |
UDP路由配置 |
TLSOptions |