type
status
date
slug
summary
tags
category
icon
password
😀
在本文我们使用Traefik的服务发现和手动配置实现更多自定义的用法。

🔍 服务发现

在Traefik中,配置发现是通过Providers实现的。Providers是基础结构组件,无论是容器编排、容器引擎、云服务还是键值存储。其思想是 Traefik 查询provider API 以找到关于路由的相关信息,当 Traefik 检测到一个变化时,它会动态更新路由。
 
💡
Docker Provider
将标签贴在您的容器上,让 Traefik 完成剩下的工作!

使用多个公开端口代理应用

默认情况下,Traefik 使用默认 dockerfile 为每个应用程序选取公开的端口。如果由于某种原因开发人员没有将此端口添加到 dockerfile 或暴露了多个端口,我们可能必须告诉 Traefik 将哪个端口用于 Web UI。 对于Unraid,找到要反向代理的应用程序,进入模板后,滚动到底部并单击“添加另一个路径,端口,变量,标签或设备”。选择添加标签并按照下面的屏幕截图填写字段。
键:traefik.http.services.<service_name>.loadbalancer.server.port
值:8080
notion image

使用Rule自定义主机名

Rule是一组配置了值的匹配器,用于确定特定请求是否匹配特定条件。如果规则得到验证,路由器将变为活动的,调用中间件,然后将请求转发给服务。
默认情况下,Traefik 使用容器名称作为主机名。您可能希望手动选择使用的域/子域,而不是允许 Traefik 使用应用的子域的容器名称。添加此附加标签,您可以手动覆盖默认的docker provider rule。
💡
反引号还是引号?
若要设置规则的值,请使用反引号`或转义双引号\"。 单引号'不被接受,因为它是Golang的字符串文字
主机名是example.com
rule = "Host(`example.com`)"
主机名是example.com或主机名是example.org并且path是/traefik
rule = "Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))"
在Unraid中,自定义主机名:
键:traefik.http.routers.<service_name>.rule
值:Host(`custom.example.com`)
notion image
在Unraid中,使两个主机名匹配同一个服务:
键:traefik.http.routers.<service_name>.rule
值:Host(`app1.example.com`,`app2.example.com`)
💡
在Traefik V3.x中:
值:Host(`app1.example.com`) || Host(`app2.example.com`)
notion image
可用的Rule
Rule
说明
Headers(`key`, `value`)
检查标题中是否定义了键key,键值为value
HeadersRegexp(`key`, `regexp`)
检查Headers中是否定义了键key,其值是否与正则表达式regexp匹配
Host(`example.com`, ...)
检查请求域(主机头值)是否存在于给定的域名之中。
HostHeader(`example.com`, ...)
Host一样,只是因为历史原因而存在。
HostRegexp(`example.com`, `{subdomain:[a-z]+}.example.com`, ...)
匹配请求域。
Method(`GET`, ...)
检查 request 方法是否是给定的方法之一(GETPOSTPUTDELETEPATCHHEAD)
Path(`/path`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`, ...)
匹配精确的请求路径。
PathPrefix(`/products/`, `/articles/{cat:[a-z]+}/{id:[0-9]+}`)
匹配请求前缀路径。
Query(`foo=bar`, `bar=baz`)
匹配 Query String 参数。它接受key=value的序列。
ClientIP(`10.0.0.0/16`, `::1`)
匹配请求客户端 IP 是给定的 IP/CIDR 之一。它接受 IPv4、 IPv6和 CIDR 格式。

启用 Authelia 服务器身份验证(需要安装Authelia)

Authelia对于Traefik来说是一个中间件,可以为Traefik代理的所有应用提供单点登录服务。在某些服务不具有可靠的身份认证功能,但又需要暴露在公网时非常有用。
对于Unraid,找到要使用Authelia保护的应用程序,进入模板后,单击“添加其他路径,端口,变量,标签或设备”。选择添加标签并按照下面的屏幕截图填写字段。
键:traefik.http.routers.<service_name>.middlewares
值:auth@file
notion image
💡
如果要启用Authelia来保护Traefik仪表板,则键需要改为traefik.http.routers.api.middlewares
请勿将api替换为容器名称。
在应用重新部署后,再次访问应用时,将会看到Authelia的认证界面,认证通过后才会跳转到原来的WebUI。
notion image

🛠️ 手动配置

Traefik可以通过dockersocket发现其他容器的信息,如果某些服务没有使用docker,或者运行在外部,如路由器管理页面和其他电脑上运行的服务等,那么就需要手动配置来对外部应用进行反向代理。
💡
File Provider
文件提供程序允许您在 YAML 或 TOML 文件中定义动态配置。

代理路由器管理页面

编辑文件 your/path/traefik/fileConfig.yml

在配置文件中使用Rule

在我的使用环境中,homeassistant运行在openwrt路由器上,以保证不间断运行。
下面是我的手动配置,由于启用了Authelia,homeassistant的移动客户端访问时也会被认证服务器要求认证,所以使用了rule来区分Web访问和API访问。
 

📎 参考文章

 
💡
有关Traefik安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
Traefik 篇六:云“fail2ban”协作式防火墙CrowdSecTraefik篇四:中间件Authelia
Loading...