docker swarm集群traefik代理标签

[toc]

traefik启动

以下标签可以由docker swarm集群标签提供

使用启动参数传入

前提需要确保traefik添加下面启动参数;

  • --providers.docker=true必填项,表示从docker中获取配置
  • --providers.docker.swarmMode=true必填项,表示当前docker环境为swarm集群模式,需要确保traefik在管理节点运行 或能连接到管理节点
  • --entryPoints.<入口名称>.address=:80必填项,表示监听80入口端口,端口可自定义,入口名字可以自定义:如:httphttpswebpingapi
  • --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.sockunix连接中获取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选项后,需要在这里配置才生效

配置流程

  1. 定义<入口名称>名称:在traefik中配置,配置源可通过 环境变量运行参数配置文件等三种方式进行配置
  2. 定义<自定义路由名>名称:在服务标签标准中进行配置,路由和入口进行关联
  3. 定义<自定义中间件名称>名称:在服务标签标准中进行配置,路由名和中间件名进行关联
  4. 定义<自定义服务名>名称:在服务标签标准中进行配置,路由名和服务名进行关联

traefik相关标签

  • traefik.docker.lbswarm:是否使用swarm集群的负载均衡,开启时traefik连接到容器docker集群虚拟IP,关闭时将直接连接到容器真实IP,使用traefik自带的负载参数:truefalse
  • traefik.docker.network:当容器存在多个网络时,来指定traefik和容器所共用的网络名称,参数类型:docker网络名称
  • traefik.enable:只有当--providers.docker.exposedByDefault设置为false才生效,表示当前容器启用traefik路由;参数:truefalse

路由相关标签

http路由标签

  • traefik.http.routers.<自定义路由名>.rule:路由匹配规则
  • traefik.http.routers.<自定义路由名>.entrypoints:路由入口名称,traefik启动时或配置文件中定义的<入口名称>
  • traefik.http.routers.<自定义路由名>.middlewares:路由中间件名称,配置后会请求会先到中间件处理后,才到容器。需要先定义<自定义中间名>后填入,
  • traefik.http.routers.<自定义路由名>.service:路由服务名称;需要先定义<自定义服务名>后填入
  • traefik.http.routers.<自定义路由名>.tls:是否为启用TLS加密;参数: truefalse
  • 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加密;参数: truefalse
  • 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:服务端口协议,表示容器端口的协议, 参数: httphttps
  • traefik.http.services.<自定义服务名>.loadbalancer.passhostheader:是否透传客户端请求头; 参数: truefalse

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:检测请求;如: GETPOST
  • traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.port:检测端口:如:80
  • traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.scheme:检测协议;参数:httphttps
  • traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.timeout检查超时;时间类型,需要带单位,如: 3s
  • traefik.http.services.<自定义服务名>.loadbalancer.healthcheck.followredirects:是否跟随重定向;参数: truefalse

http会话保持标签

  • traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie:会话保持,自定义,类型:字符串
  • traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.httponly:自定义cookie是否添加httponly标志;参数:truefalse
  • traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.name:自定义cookie值:字符串类型
  • traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.secure:自定义cookie是否添加secure标志;参数:truefalse
  • traefik.http.services.<自定义服务名>.loadbalancer.sticky.cookie.samesite:自定义cookie是否添加samesite标志;参数:truefalse
  • 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:重定向到什么协议,参数: httphttps
  • traefik.http.middlewares.<自定义中间件名称>.redirectscheme.permanent:是否永久重定向,参数: httphttps

基础认证

  • traefik.http.middlewares.<自定义中间件名称>.basicauth.users=test:$$apr1$$9lG70Tqt$$NWzatESqlkSECGAWwop8g.:设置认证帐号和密码;http加密字符串
  • traefik.http.middlewares.<自定义中间件名称>.basicauth.removeheader=true":转发到后端后是否移除认证信息;参数:truefalse

添加前缀

  • 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集群进行部署

Docker Swarm + Portainer + Traefik搭建应用环境:基础使用教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容