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
使用Rule自定义主机名
Rule是一组配置了值的匹配器,用于确定特定请求是否匹配特定条件。如果规则得到验证,路由器将变为活动的,调用中间件,然后将请求转发给服务。
默认情况下,Traefik 使用容器名称作为主机名。您可能希望手动选择使用的域/子域,而不是允许 Traefik 使用应用的子域的容器名称。添加此附加标签,您可以手动覆盖默认的docker provider rule。
反引号还是引号?
主机名是example.comrule = "Host(`example.com`)"
主机名是example.com或主机名是example.org并且path是/traefikrule = "Host(`example.com`) || (Host(`example.org`) && Path(`/traefik`))"
在Unraid中,自定义主机名:
键:
traefik.http.routers.<service_name>.rule
值:
Host(`custom.example.com`)
在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`)
可用的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 方法是否是给定的方法之一( GET 、 POST 、 PUT 、 DELETE 、 PATCH 、 HEAD ) |
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
如果要启用Authelia来保护Traefik仪表板,则键需要改为
traefik.http.routers.api.middlewares
。 请勿将api替换为容器名称。
在应用重新部署后,再次访问应用时,将会看到Authelia的认证界面,认证通过后才会跳转到原来的WebUI。
🛠️ 手动配置
Traefik可以通过dockersocket发现其他容器的信息,如果某些服务没有使用docker,或者运行在外部,如路由器管理页面和其他电脑上运行的服务等,那么就需要手动配置来对外部应用进行反向代理。
File Provider
文件提供程序允许您在 YAML 或 TOML 文件中定义动态配置。
代理路由器管理页面
编辑文件
your/path/traefik/fileConfig.yml
:在配置文件中使用Rule
在我的使用环境中,homeassistant运行在openwrt路由器上,以保证不间断运行。
下面是我的手动配置,由于启用了Authelia,homeassistant的移动客户端访问时也会被认证服务器要求认证,所以使用了rule来区分Web访问和API访问。
📎 参考文章
有关Traefik安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:Biliko
- 链接:https://biliko.net/article/traefik-part5
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章