[toc]
traefik启动
以下标签可以由docker swarm集群标签提供
使用启动参数传入
前提需要确保traefik添加下面启动参数;
-
--providers.docker=true
:必填项,表示从docker中获取配置 -
--providers.docker.swarmMode=true
:必填项,表示当前docker环境为swarm集群模式,需要确保traefik在管理节点运行 或能连接到管理节点 -
--entryPoints.<入口名称>.address=:80
:必填项,表示监听80入口端口,端口可自定义,入口名字可以自定义:如:http、https、web、ping、api等 -
--entrypoints.<入口名称>.address=:8000/udp
:UDP入口 -
--entryPoints.<入口名称>.forwardedHeaders.trustedIPs=127.0.0.1/32,192.168.1.7
:对信任主机转发X-Forwarded-*
相关的请求头 -
--entryPoints.<入口名称>.transport.respondingTimeouts.readTimeout=42
:等待客户端请求超时时间 -
--entryPoints.<入口名称>.transport.respondingTimeouts.writeTimeout=42
:响应客户端写入超时时间 -
--entryPoints.<入口名称>.transport.respondingTimeouts.idleTimeout=42
:客户端连接最大空闲时间 -
--providers.docker.swarmModeRefreshSeconds=15
:选填项,每15秒刷新一次docker的标签,根据标签信息更新配置 -
--providers.docker.httpClientTimeout=0
:选填项,连接容器http时的默认超时时间 -
--providers.docker.watch=false
:选填项,监视docker事件 -
--providers.docker.constraints=Label(
a.label.name,
foo)
:选填项,容器路由过滤规则,只为匹配规则的容器创建路由 -
--providers.docker.tls.ca=path/to/ca.crt
:选填项,连接docker的CA证书文件路径 -
--providers.docker.tls.cert=path/to/foo.cert
:选填项,连接docker的证书文件路径 -
--providers.docker.tls.key=path/to/foo.key
:选填项,连接docker的证书私钥文件路径 -
--providers.docker.tls.insecureSkipVerify=true
:选填项,是否开启证书和域名匹配验证,开启后会更安全 -
--providers.docker.allowEmptyServices=true
:选填项,是否忽略监控检测,开启后若后端不健康将返回502错误,默认不健康的服务返回404 -
--providers.docker.endpoint=unix:///var/run/docker.sock
:选填项,配置后默认会从docker/var/run/docker.sock
unix连接中获取traefik相关标签数据 -
--providers.docker.endpoint=ssh://traefik@192.168.2.5:2022
:选填项,当traefik不能通过docker unix连接时,可通过ssh来连接到swarm管理节点,需要确保traefik运行用户能免密登录导致管理节点 -
--providers.docker.network=容器网络名
:选填项,若traefik容器使用多个网络,可以使用该参数选定与其他容器连接的网络名称 -
--providers.docker.defaultRule=Host(\
{{ .Name }}.{{ index .Labels "customLabel"}}`)`:默认规则,当容器标签信息中没有定义规则时,将使用当前规则 -
--providers.docker.exposedByDefault=false
:选填项,是否自动为容器生成默认的路由,若关闭将只为标签为traefik.enable=true
的容器启用路由
标签位置
yaml标签配置分支示意,下文配置项可以在服务标签中配置后,traefik才能获取并生效
version: <版本号>
services
└── <容器服务>
├── labels <- 容器标签:当不是Swarm集群模式应该将标签放在当前分支下
│ └── 'traefik.enable':'true'
└── deploy
└── labels <- 服务标签:Swarm集群模式应该将标签放在当前分支下
└── 'traefik.enable':'true' <= 既开启--providers.docker.swarmMode=true选项后,需要在这里配置才生效
配置流程
- 定义<入口名称>名称:在traefik中配置,配置源可通过 环境变量、运行参数、配置文件等三种方式进行配置
- 定义<自定义路由名>名称:在服务标签标准中进行配置,路由和入口进行关联
- 定义<自定义中间件名称>名称:在服务标签标准中进行配置,路由名和中间件名进行关联
- 定义<自定义服务名>名称:在服务标签标准中进行配置,路由名和服务名进行关联
traefik相关标签
-
traefik.docker.lbswarm
:是否使用swarm集群的负载均衡,开启时traefik连接到容器docker集群虚拟IP,关闭时将直接连接到容器真实IP,使用traefik自带的负载参数:true 或 false -
traefik.docker.network
:当容器存在多个网络时,来指定traefik和容器所共用的网络名称,参数类型:docker网络名称 -
traefik.enable
:只有当--providers.docker.exposedByDefault设置为false才生效,表示当前容器启用traefik路由;参数:true 或 false
路由相关标签
http路由标签
-
traefik.http.routers.<自定义路由名>.rule
:路由匹配规则 -
traefik.http.routers.<自定义路由名>.entrypoints
:路由入口名称,traefik启动时或配置文件中定义的<入口名称> -
traefik.http.routers.<自定义路由名>.middlewares
:路由中间件名称,配置后会请求会先到中间件处理后,才到容器。需要先定义<自定义中间名>后填入, -
traefik.http.routers.<自定义路由名>.service
:路由服务名称;需要先定义<自定义服务名>后填入 -
traefik.http.routers.<自定义路由名>.tls
:是否为启用TLS加密;参数: true 或 false -
traefik.http.routers.<自定义路由名>.tls.certresolver
:TLS配置名 -
traefik.http.routers.<自定义路由名>.tls.domains[n].main
:域;其中n为数值,等于或大于0即可;参数如:example.com -
traefik.http.routers.<自定义路由名>.tls.domains[n].sans
:域名;其中n为数值,等于或大于0即可;参数如:foo.example.com,bar.example.com traefik.http.routers.<自定义路由名>.tls.options
traefik.http.routers.<自定义路由名>.priority
tcp路由标签
-
traefik.tcp.routers.<自定义路由名>.entrypoints
:路由入口名称,traefik启动时或配置文件中定义的<入口名称> -
traefik.tcp.routers.<自定义路由名>.rule
:路由匹配规则 -
traefik.tcp.routers.<自定义路由名>.service
:匹配规则后到哪个服务;需要先定义<自定义服务名>后填入 -
traefik.tcp.routers.<自定义路由名>.tls
:是否启用TLS加密;参数: true 或 false -
traefik.tcp.routers.<自定义路由名>.tls.certresolver
:TLS配置名 traefik.tcp.routers.<自定义路由名>.tls.domains[n].main
traefik.tcp.routers.<自定义路由名>.tls.domains[n].sans
traefik.tcp.routers.<自定义路由名>.tls.options
traefik.tcp.routers.<自定义路由名>.tls.passthrough
traefik.tcp.routers.<自定义路由名>.priority
udp路由标签
-
traefik.udp.routers.<自定义路由名>.entrypoints
:路由入口名称,traefik启动时或配置文件中定义的<入口名称> -
traefik.udp.routers.<自定义路由名>.service
:需要先定义<自定义服务名>后填入
负载均衡相关标签
http服务
http服务标签
-
traefik.http.services.<自定义服务名>.loadbalancer.server.port
:服务端口号,填写容器的服务端口即可,如:80 -
traefik.http.services.<自定义服务名>.loadbalancer.server.scheme
:服务端口协议,表示容器端口的协议, 参数: http 或 https -
traefik.http.services.<自定义服务名>.loadbalancer.passhostheader
:是否透传客户端请求头; 参数: true 或 false
http服务监控检查标签
-
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.headers.<header_name>
:自定义健康检查请求头;参数类型:字符串 -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.hostname
:容器监控接口主机名;参数类型:IP地址 或 主机名 或 域名 -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.interval
:检查间隔;时间类型,需要带单位,如: 3s -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.path
:检测路径;如:/ping -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.method
:检测请求;如: GET 、POST -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.port
:检测端口:如:80 -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.scheme
:检测协议;参数:http 或 https -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.timeout
检查超时;时间类型,需要带单位,如: 3s -
traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.followredirects
:是否跟随重定向;参数: true 或 false
http会话保持标签
-
traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie
:会话保持,自定义,类型:字符串 -
traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.httponly
:自定义cookie是否添加httponly标志;参数:true 或 false -
traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.name
:自定义cookie值:字符串类型 -
traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.secure
:自定义cookie是否添加secure标志;参数:true 或 false -
traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.samesite
:自定义cookie是否添加samesite标志;参数:true 或 false traefik.http.services.<自定义服务名>.loadbalancer.responseforwarding.flushinterval
tcp服务标签
-
traefik.tcp.services.<自定义服务名>.loadbalancer.server.port
:服务端口号,填写容器的服务端口即可 traefik.tcp.services.<自定义服务名>.loadbalancer.terminationdelay
traefik.tcp.services.<自定义服务名>.loadbalancer.proxyprotocol.version
udp服务标签
traefik.udp.services.<自定义服务名>.loadbalancer.server.port
中间件标签
http中间件
-
traefik.http.middlewares.<中间件名称>.
第三方中间件需要安装
重定向中间件
-
raefik.http.middlewares.<自定义中间件名称>.redirectscheme.scheme
:重定向到什么协议,参数: http 或 https -
traefik.http.middlewares.<自定义中间件名称>.redirectscheme.permanent
:是否永久重定向,参数: http 或 https
基础认证
-
traefik.http.middlewares.<自定义中间件名称>.basicauth.users=test:$$apr1$$9lG70Tqt$$NWzatESqlkSECGAWwop8g.
:设置认证帐号和密码;http加密字符串 -
traefik.http.middlewares.<自定义中间件名称>.basicauth.removeheader=true"
:转发到后端后是否移除认证信息;参数:true 或 false
添加前缀
-
traefik.http.middlewares.<自定义中间件名称>.addprefix.prefix=/foo
:添加前缀/foo
缓存
-
traefik.http.middlewares.<自定义中间件名称>.buffering.maxRequestBodyBytes=2000000
:缓存大小 -
traefik.http.middlewares.<自定义中间件名称>.buffering.memResponseBodyBytes=2000000
:超过该大小将缓存在硬盘上
ip白名单
traefik.http.middlewares.<自定义中间件名称>.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.7
traefik.http.middlewares.<自定义中间件名称>.ipwhitelist.ipstrategy.depth=2
请求头修改
添加请求头
-
traefik.http.middlewares.<自定义中间件名称>.headers.<请求头名>
:请求头值
移除请求头
-
traefik.http.middlewares.<自定义中间件名称>.headers.<请求头名>
:值设为空即可,既不填写值
参考文档:
[官方]Traefik Docker Routeing :介绍标签相关用法
https://doc.traefik.io/traefik/providers/docker/:介绍docker相关配置项
[第三方]https://docs.traefik.cn/user-guide/swarm:介绍如何在docker集群进行部署