Traefik路由Docker
Traefik路由Docker
一、简介
Traefik 是一款开源的边缘路由器,可以作为整个平台的入口(网关),根据逻辑规则,处理并路由整个传入的请求。
优点:
- 自动服务发现
- 原生兼容所有主要集群技术,例如 Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon,并且可以同时处理多个。
- 无需维护和同步单独的配置文件,自动实时更新,无需重新启动,不会中断连接
- 集成了漂亮的
dashboard
界面
二、配置
Traefik 中的配置分为2部分:
- 全动态路由配置(动态配置),从Provider获取*,*定义如何由系统来处理请求。此配置可以更改并无缝热重载,不会出现任何请求中断或连接丢失。
- 启动配置(静态配置),设置与Provider连接并定义Traefik 将侦听的入口点。
在 Traefik 中定义静态配置选项有三种不同的、互斥的(即您只能同时使用一种)的方法:
- 在配置文件中
- 在命令行参数中
- 作为环境变量
配置文件
启动时,Traefik 在以下位置搜索名为
traefik.yml
(或traefik.yaml
或traefik.toml
)的文件:
/etc/traefik/
$XDG_CONFIG_HOME/
$HOME/.config/
.
(工作目录)
可以使用configFile
参数覆盖它
traefik --configFile=foo/bar/myconfigfile.yml
参数
可以使用 traefik --help 获取参数
常见参数:
--accesslog:
访问日志设置。(默认值:false)--api:
启用 api/仪表板。(默认值:false)--certificatesresolvers.<name>:
证书解析器配置。(默认值:false)--entrypoints.<name>:
入口点定义。(默认值:false)--log:
Traefik 日志设置。(默认值:false)--pilot.dashboard:
在仪表板中启用 Traefik Pilot。(默认值:true)--ping:
启用ping。(默认值:false)--providers.docker:
使用默认设置启用 Docker 后端。(默认值:false)
环境变量
常见的环境变量有(和参数一样,只不过换成大写形式,加上TRAEFIK_前缀):
TRAEFIK_ACCESSLOG:
访问日志设置。(默认值:false)TRAEFIK_API:
启用 api/仪表板。(默认值:false)TRAEFIK_CERTIFICATESRESOLVERS_<NAME>:
证书解析器配置。(默认值:false)TRAEFIK_ENTRYPOINTS_<NAME>:
入口点定义。(默认值:false)TRAEFIK_LOG:
Traefik 日志设置。(默认值:false)TRAEFIK_PILOT_DASHBOARD:
在仪表板中启用 Traefik Pilot。(默认值:true)TRAEFIK_PING:
启用ping。(默认值:false)TRAEFIK_PROVIDERS_DOCKER:
使用默认设置启用 Docker 后端。(默认值:false)
三、docker部署Traefik
version: '3'services:reverse-proxy:# 官方的 Traefik 2.0 Docker 镜像image: traefik# 开启 web UI 并且告诉 Traefik 监听 Dockercommand:- "--entrypoints.http.address=:80"- "--entrypoints.https.address=:443"- "--api=true"- "--api.insecure=true"- "--api.dashboard=true"- "--api.debug=false"- "--ping=true"- "--providers.docker=true"- "--providers.docker.watch=true"- "--providers.docker.exposedbydefault=false"- "--providers.docker.endpoint=unix:///var/run/docker.sock"- "--providers.docker.swarmMode=false"- "--providers.docker.useBindPortIP=false"- "--providers.docker.network=traefik"- "--providers.file=true"- "--providers.file.watch=true"- "--providers.file.directory=/etc/traefik/config"- "--providers.file.debugloggeneratedtemplate=true"ports:# HTTP 端口- "30080:80"# Web UI 端口(通过 --api.insecure=true 启用)- "38080:8080"volumes:# 这样 Traefik 可以监听 Docker 事件- /var/run/docker.sock:/var/run/docker.sock- /opt/traefik/config:/etc/traefik/config
四、路由与负载均衡
当使用 Docker 作为provider 时,Traefik 使用容器标签(labels)来检索其路由配置。
完整的Traefik 的架构分为这几部分:
- entryPoints 侦听传入流量(端口,…)EntryPoints 是 Traefik 的网络入口点。它们定义了将接收数据包的端口,以及是侦听 TCP 还是 UDP。
- routers 分析请求(主机、路径、标头、SSL 等),路由器负责将传入请求连接到可以处理它们的服务
- services 将请求转发给您的服务(负载平衡,…)
- middlewares 可能会更新请求或根据请求做出决定(身份验证、速率限制、标头等)
- providers 发现存在于您的基础架构上的服务(他们的 IP、健康状况……)
entryPoints
EntryPoints 是 Traefik 的网络入口点。它们定义将接收请求的端口(无论是 HTTP 还是 TCP)
部署中指定,可以是启动命令参数:
command:- "--entrypoints.http.address=:80"
静态配置文件中:
entryPoints:http:address: ":80"
Provider配置
endpoint
必需*,*默认=“unix:///var/run/docker.sock”useBindPortIP
可选,默认=false,Traefik 将请求路由匹配到容器的 IP/端口。设置useBindPortIP=true
,Traefik 使用附加到容器绑定的 IP/端口,而不是其内部网络 IP/端口。当与traefik.http.services.<name>.loadbalancer.server.port
标签结合使用时(告诉 Traefik 将请求路由匹配到特定端口),Traefik 会尝试在 port 上找到绑定traefik.http.services.<name>.loadbalancer.server.port
。如果找不到这样的绑定,Traefik 会回退到容器的内部网络 IP,但仍然使用traefik.http.services.<name>.loadbalancer.server.port
标签中设置的IP/端口 。exposedByDefault
可选*,默认=true。*默认情况下Traefik 公开容器。如果设置为false
,traefik.enable=true
则从生成的路由配置中忽略没有标签的容器。network
可选,默认=“”定义用于连接到所有容器的默认 docker 网络。可以使用traefik.docker.network
标签在每个容器的基础上覆盖此选项。defaultRule
*可选,默认=Host(
{{ normalize .Name }})
。*如果标签未定义任何规则,则该选项定义要应用于容器的路由规则。swarmMode
*可选,默认=false。*启用 Swarm 模式(而不是独立的 Docker)。swarmModeRefreshSeconds
*可选,默认值=15。*定义群模式的轮询间隔(以秒为单位)。httpClientTimeout
*可选,默认=0。*定义 HTTP 连接的客户端超时(以秒为单位)。如果它的值为0
,则不设置超时。watch
*可选,默认=true。*监听 Docker Swarm 事件。
中间件配置
# 在 labels 中指定
traefik.http.middlewares.中间件名称.中间件类型=
常用中间件类型
AddPrefix 添加前缀
# Prefixing with /foo labels:- "traefik.http.middlewares.add-foo.addprefix.prefix=/foo"
BasicAuth 添加基本身份验证
labels:- "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"
Buffering 限制了可以转发到服务的请求的大小。
通过缓冲,Traefik 将整个请求读入内存(可能将大请求缓冲到磁盘中),并拒绝超过指定大小限制的请求。这可以帮助服务避免大量数据(
multipart/form-data
例如),并且可以最大限度地减少向服务发送数据所花费的时间。# Sets the maximum request body to 2MB labels:- "traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=2000000"
Compress 中间件使用 gzip 压缩
ContentType指定是否让
Content-Type
标头(如果后端尚未定义)自动设置为从响应内容派生的值。DigestAuth 中间件将您的服务的访问权限限制为已知用户
ErrorPage 中间件根据 HTTP 状态代码的配置范围返回一个自定义页面来代替默认页面。
ForwardAuth 中间件将身份验证委托给外部服务。如果服务以 2XX 代码应答,则授予访问权限,并执行原始请求。否则,返回来自认证服务器的响应。
Headers 中间件管理请求和响应的标头。
IPWhitelist 根据客户端 IP 接受/拒绝请求。
inflightreq 限制同时进行中的请求数
PassTLSClientCert 将通过的客户端 TLS 证书中的选定数据添加到标头中。
RateLimit控制进入服务的请求数
RedirectRegex 使用正则表达式匹配和替换来重定向请求。
RedirectScheme 将请求从一个方案/端口重定向到另一个。
replacepath替换请求 URL 的路径。
ReplaceRegex 使用正则表达式匹配和替换来替换 URL 的路径。
retry 如果后端服务器没有回复,重试中间件向后端服务器重新发出给定次数的请求。服务器一响应,中间件就会停止重试,无论响应状态如何。Retry 中间件有一个可选配置来启用指数退避。
stripprefix 在转发请求之前从路径中删除前缀
stripprefixregex 在转发请求之前从路径中删除前缀(使用正则表达式)
Router配置
# 指定路由入口点,http为traefik启动时定义的端口
"traefik.http.routers.自定义路由名称.entrypoints=http"# 定义路由规则,监听来自于域名的请求,Host中用`符号
"traefik.http.routers.自定义路由名称.rule=Host(`www.domain.com`)"# 设置路由引用中间件
"traefik.http.routers.自定义路由名称.middlewares=中间件名称" # 指定路由后端为哪个service,多个service时需要具体指定路由到哪个
"traefik.http.routers.自定义路由名称.service=服务名"
Services配置
## 用于docker服务发现与负载均衡,自动发现指定端口的服务,作为后端服务## 如果容器expose了单个端口,则 Traefik 使用此端口进行私有通信## 如果一个容器 expose了多个端口,或者没有暴露任何端口,那么你必须使用标签手动指定 Traefik 应该使用哪个端口进行通信"traefik.http.services.自定义服务名.loadbalancer.server.port=应用端口"
示例
version: '3'
services:wg-easy:image: weejewel/wg-easycontainer_name: wg-easyenvironment:- WG_HOST=18.183.2.23- WG_DEFAULT_DNS=114.114.114.114,8.8.4.4ports:- "51820:51820/udp"sysctls:- net.ipv4.ip_forward=1- net.ipv4.conf.all.src_valid_mark=1cap_add:- NET_ADMIN- SYS_MODULElabels:# 启用 traefik 动态配置- "traefik.enable=true"# 设置trafik 网络- "traefik.docker.network=traefik"## 定义名为 auth-user 的 基本认证 中间件,密码使用htpasswd生成,$作为转义字符- "traefik.http.middlewares.auth-users.basicauth.users=admin:$$apr1$$WArvArno$$CUyHO2J8dg6BQNUbhTiwA." # 定义名为 wg-easy 的路由,该路由在入口点 Web(端口80)上侦听- "traefik.http.routers.wg-easy.entrypoints=http"## 设置wg-easy路由入口点 引用中间件auth-users- "traefik.http.routers.wg-easy.middlewares=auth-users" ## 定义此 wg-easy 路由规则,监听来自于域名为he.simple11618.xyz的请求,将其路由到服务- "traefik.http.routers.wg-easy.rule=Host(`he.simple11618.xyz`)"## 将请求转发到容器上的端口,需要使用路由器上的service参数引用服务负载均衡器端口定义## 默认转发到expose的第一个端口,多端口需要单独指定- "traefik.http.services.my-service.loadbalancer.server.port=51821"networks:- traefiknetworks:traefik:external: true
Traefik路由Docker相关推荐
- openwrtx86安装docker_PVE下openwrt软路由docker环境安装unifi controller
PVE下openwrt软路由docker环境安装unifi controller 2020-03-29 14:10:18 48点赞 491收藏 44评论 [写作说明]:之前分享了一篇m920x准系统作 ...
- openwrt 软路由 docker安装青龙面板(基础版)
置顶:无条件部署的小伙伴可以直接上车,名额有限,手动获取 JD CK提交版 必要准备: 务必先下载好 京东.京喜.京东极速版三个app并开启以下活动(有些需要选择种植或者生产的物品自行选择即可,千万 ...
- openwrt 软路由 docker安装青龙面板 + Ninja(进阶版)
前言:此为openwrt 使用docker安装青龙面板 + Ninja的教程,有一定的上手难度,教程可能不一定适合所有人,如果是萌新小白,建议先看我的基础版教程,熟悉后再来尝试进阶版,基础版与进阶版功 ...
- 利用Traefik+Docker构建可弹性扩展的微服务或服务集群
简介 Traefik是一个与Nginx.HAProxy有些相似的HTTP反向代理服务器,兼有负载均衡的功能.Nginx和HAProxy都有一个相同的问题就是,后端服务(通常称之为upstream或ba ...
- 更完善的 Docker + Traefik 使用方案
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2018年08月2 ...
- Docker Swarm集群中部署Traefik负载均衡器
一.创建单节点的Docker Swarm集群 docker swarm init 二.在Swarm集群中创建一个网络 docker network create --driver=overlay tr ...
- Traefik 一个反向代理的新工具
由于工作需要最近试用了几个反向路由的开源项目,Traefik就是其中之一. 一,Traefik 是干什么用的 简单来说它就是用来作反向代理和负载均衡的,比较适用于微服务化的场景,支持多种分布式的Key ...
- docker swam 集群实现负载均衡
docker swam 集群实现负载均衡 文章目录 docker swam 集群实现负载均衡 1. 初始化集群 2. 虚拟IP 3. 服务发现 4. 多主机LB和服务发现 1. 初始化集群 第一个节点 ...
- Traefik 详解
为什么80%的码农都做不了架构师?>>> traefik是一个使你把微服务暴露出来变的更容易的http反向代理和负载均衡软件.traefik支持K8S.docker swarm ...
最新文章
- 使用mac pro电脑当tomcat端口被占用怎么解决?
- 动态数组 allocator
- Flowable节点跳转
- 迈好“转战”第一步-丰收节交易会·陶以平: 谋定乡村振兴
- 操作系统 第二章【记录型信号量机制、独木桥问题】【MOOC答案】
- 机器翻译 - 日期翻译
- 【转】关于LoadRunner的迭代
- 亮度 调整_显示器对比度多少合适 显示器亮度多少合适【详细介绍】
- 天泉证道四句教与价值观
- 哈萨克--阿拉木图之行
- 如何在 iPhone 上恢复微信聊天记录!
- 从NCBI 上下载 gbff 文件并得到 CDS 信息
- 华工计算机科学与技术专业评级,华南理工高考专业分数排名,计算机分数遥遥领先,双一流专业垫底...
- Windows无法安装驱动原因总结
- hive中如何判断字符串是否是数字
- 为什么要嫁给物理学3
- Web项目之购物网站
- 传奇手游战神引擎架设安装教程
- R语言:接受拒绝法(Acceptance-Rejection Method)生成随机数
- C/C++语言优秀书籍清单,新手入门必看
热门文章
- 【设计模式】-创造篇-原型
- Hex-Rays: 十步杀一人,两步秒OLLVM-BCF
- 华为云CDN加速OBS桶文件最佳实践
- Java SQL异常:java.sql.SQLException: Incorrect DATE value: ‘2021.02.31‘
- python中复制n次字符串_Python 字符串操作方法大全
- delphi操作png的单元pngimage.pas包括引用的ZlibExApi.pas和 PngLang.pas
- 李开复致女儿的一封信
- RocketMQ消息刷盘
- 【c++】判断子矩阵
- python之 模拟简单图书馆