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搭建应用环境:基础使用教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,783评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,396评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,834评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,036评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,035评论 5 362
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,242评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,727评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,376评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,415评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,463评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,140评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,734评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,809评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,028评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,521评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,119评论 2 341

推荐阅读更多精彩内容