前言
Traefik的功能就不在此赘述了,详见官方文档,使用它的原因主要基于以下三点:
配置文件热加载(无需重启或执行任何命令)。
服务的自动发现与负载均衡。
支持多种Backends(与Kubernetes完美契合)。
本次主要是在物理机上进行Traefik的功能测试。
核心概念
Providers:用于自动发现平台上的服务,服务来源可以是编排工具、容器引擎或是K/V存储等,如:Docker、Kubernetes、File。
EntryPoints:监听流量传入的端口。
Routers:分析请求并进行路由,用于连接传入的Requests和后端的Services。
Services:转发请求到应用(最终负责处理请求的服务),在Service中可以实现加权负载、健康监测、流量复制等功能。
Middlewares:在Router和Service之间,可以拦截请求进行多样化的处理,如:重定向、认证、缓存等。
安装
环境
Centos7
Traefik v2.9.6
本次采用二进制文件形式安装,安装包网盘链接,提取码:s6t1。也可以去GitHub自行下载。
Traefik采用Go语言编写,将二进制文件解压至/usr/local/bin/目录下即可使用。
配置
Traefik配置分为两种静态配置和动态配置两种,启动后会从以下四个位置搜索静态配置文件:
/etc/traefik/
$XDG_CONFIG_HOME/
$HOME/.config/
. (工作目录)
静态配置
静态配置用于配置EntryPoints、Providers等,此配置一旦更改必须重启。Traefik静态配置的方法有如下三种:
配置文件(Demo)
命令行参数
环境变量
# api and dashboard configuration
api:
debug: true
# 开启Dashboard
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
providers:
# 扫描docker服务
docker:
endpoint: "unix:///var/run/docker.sock"
# 默认不暴露docker服务,可通过标签"traefik.enable=true"标识需要traefik进行路由的容器。
exposedByDefault: false
file:
# 配置动态文件读取路径,可以是文件或文件夹
# filename: /etc/traefik/configurations/dynamic.yml
directory: /etc/traefik/configurations/
# running log
log:
# level: DEBUG
filePath: /var/log/traefik/traefik.log
# access log
accessLog:
filePath: /var/log/traefik/access.log
# ignore tls verfiy
serversTransport:
insecureSkipVerify: true
动态配置
动态配置用于配置routers、services、middlewares等,此配置可以热更新,无需重启或执行任何命令。
WRR(加权轮询)Demo
# Dynamic configuration
http:
routers:
baidu-dashboard-http:
rule: "Host(`www.baidu.com`)" # Host can be domain or ip.
service: baidu-service
entryPoints:
- web
# redirect to https
middlewares:
- redirect-https
priority: 1
baidu-dashboard-https:
entryPoints:
- websecure
rule: "Host(`www.baidu.com`)"
service: baidu-service
priority: 1
tls: {}
services:
baidu-service:
weighted:
services:
- name: baidu-service1
weight: 3
- name: baidu-service2
weight: 1
baidu-service1:
loadBalancer:
servers:
- url: "https://xxx.xxx.xx.3:443"
baidu-service2:
loadBalancer:
servers:
- url: "https://xxx.xxx.xx.4:443"
middlewares:
redirect-https:
redirectScheme:
scheme: https
permanent: true
测试
访问服务器ip的8080端口即可看到Dashboard。然后直接修改PC端的hosts文件(或DNS服务器添加A记录),将去往www.baidu.com的流量引到Traefik所在的服务器上,所有Traefik代理访问百度的请求都会执行加权轮询策略。