type
status
date
slug
summary
tags
category
icon
password
本文提供Unraid Docker和Docker-Compose两种不同的安装过程。
示例的配置文件仅供docker初始安装使用,咱先跑起来,在后续篇章中会不断增加和完善配置。
💿 Traefik安装
一、创建容器网络
首先我们需要创建一个docker网络
proxy
,后续所有需要反代的容器都放在这个网络里面。二.安装dockersocket(可选)
dockersocket是 Docker Socket 的安全增强代理,它限制了docker.sock的写权限,使traefik能够检索其他容器的信息(只读访问),但无法通过docker API启动其它容器或运行任何命令。
允许容器直接访问docker.sock
是不安全的,可能会使您的系统容易受到攻击。请阅读以下帖子,详细了解与 docker 容器共享 docker.sock 的漏洞以及它如何危害您的服务器。暴露docker.sock的危险
安装dockersocket时唯一需要更改的配置:
- 更改网络类型为我们前面创建的网络
proxy
注意
如果你使用dockersocket,请注意
traefik.yml
配置文件的"provider"部分中,有一行需要取消注释。三、安装traefik
在Unraid中,我们使用
/mnt/user/appdata/traefik
作为traefik的数据卷;在docker-compose中,我们使用
/opt/appdata/traefik
作为traefik的数据卷。本文主要以Unraid为例,实际部署中我们可以按需求更改路径。
acme.json 文件
Traefik 需要一个名为 acme.json 的文件来存储 SSL 证书信息,这需要是安全的。因此,我们将创建一个空文件并更改权限。如果你的应用数据保存在另一个位置,更改路径就行。
必须的配置文件
Traefik的启动需要
traefik.yml
这个配置文件,在这个配置文件中我们指定fileConfig.yml
作为动态配置文件,动态配置文件的修改会被traefik监控并自动加载, 这意味着不需要重启traefik服务就可以使配置修改生效。编辑文件
/mnt/user/appdata/traefik/traefik.yml
,模板如下:traefik.yml example
编辑文件
/mnt/user/appdata/traefik/fileConfig.yml
,模板如下:fileconfig.yml V3.X example
fileconfig.yml V2.X example
安装Traefik
使用Unraid Docker
- 为了易于从内网访问,需要将traefik添加到
ipvlan
或macvlan
的自定义桥接网络,在Unraid中的接口名一般为br0
,可以在设置
->Docker
->高级视图
中配置。为此我们需要添加一条发布参数:&& docker network connect --ip <本地
IP
> br0 traefik
示例如下图:
这条命令会在容器创建成功后,给名为traefik的容器分配一个
本地
IP
,有了这个ip就可以从本地局域网中直接访问traefik。- 更改网络类型为我们前面创建的网络
proxy
- 获取 API-Token并修改
CF_DNS_API_TOKEN
的值。
- 设置
Traefik dashboard URL
的子域名,替换YOURDOMAIN.COM为你的域名。
- 新建变量
DOCKER_HOST
,值为dockersocket的容器名称,默认也就是dockersocket
- 在路由器或本地主机的hosts中设置
traefik.YOURDOMAIN.COM
的解析地址。
- 创建容器,访问
https://traefik.YOURDOMAIN.COM
,就可以看到dashboard了。
使用Docker-Compose
创建docker-compose文件
/opt/appdata/traefik/docker-compose.yml
启动容器:
四、代理你的第一个应用
在某个应用程序上启用 Traefik 并允许它代理 Web UI ,我们必须简单地为 Traefik 设置一个标签(labels)。标签是一种将元数据应用于 Docker 对象的机制。Traefik 能够获取此元数据,并使用它来配置自身。此标签将告诉 Traefik 我们要反向代理要添加到的应用程序。
traefik.enable: true
告诉 traefik 您要代理此应用,traefik.http.routers.
APP-NAME
.entryPoints: https
仅允许通过 HTTPS 代理应用。必须将
APP-NAME
替换为要添加此标签的应用程序的名称,否则 Traefik 将看到重复项。示例:
下面使用traefik/whoami为例
Unraid
1.安装whoami容器
从DockerHub中找到whoami镜像
点击安装,注意选择网络类型,端口号随便填一个未被占用的。
2.告诉 traefik 您要代理此应用
单击“添加另一个路径、端口、变量、标签或设备”。选择添加标签并按照下面的截图填写字段。
3.只允许通过 HTTPS 代理应用程序。
再添加一个标签,指定程序的entrypoints。
Docker-Compose
五、通过域名访问应用
完成上面的设置后,Traefik 现在将选择该应用程序希望通过反向代理进行路由,并应自动为您设置。它也只会通过HTTPS代理应用程序,并避免任何可能的漏洞或允许通过HTTP代理应用程序。现在,当您部署应用程序时,您将能够通过应用程序名称作为子域 (APP-NAME.DOMAIN.COM) 的域来访问它,例如:
https://whoami.YOURDOMAIN.COM
。🗒️ 配置文件说明
Traefik.yml
在启动时,Traefik 会查找一个名为 Traefik.yml 的文件。这是用于设置 Traefik 的第一个关键配置文件。此文件告诉它任何其他文件可能在哪里、要使用的域以及如何获取它们的证书。这是一个静态文件,这意味着对此文件的任何更改都需要重新启动 Traefik 才能应用这些更改。
点这里查看更多信息.
进入点(EntryPoints)
EntryPoint 是 Traefik 的网络入口点。它们定义接收数据包的端口,以及是否侦听 TCP 或 UDP。这个配置基本上告诉 Traefik 在哪里以及如何接受传入连接。对于 HTTP 传入请求,我们告诉 Traefik 在默认端口80上接受它们。另外我们还添加了一个重定向规则,在默认情况下将其转发到 HTTPS EntryPoint。
在本节中添加的所有 Cloudflare 的 IP 范围都是可信 IP。使用 forwardHeader: 和 trust dIPs: 参数,这将允许 HTTP 请求通过 Traefik 转发其真正的 IP。
接下来,我们告诉 Traefik 在默认端口 443 上接受 HTTPS 请求。对于HTTPS请求,我们将需要有效的证书。在此配置中,我们告诉 Traefik 使用 lets encrypt 来制作证书,我们还告诉 Traefik 不仅要为根域创建这些证书,还要使用通配符变量为所有子域创建这些证书。
对于所有 HTTPS 请求,我们能够设置一些默认使用的中间件。在我们的示例中,我们将只使用一个用于安全头文件(
securityHeader@file
)。如果您希望在默认情况下为所有请求加载任何其他中间件,您将在这里添加它们。例如,您可以将 Authelia 中间件(auth@file
)添加到这个位置,然后每个请求都将首先发送给 Authelia。提供器(Providers)
Traefik通过Providers实现配置发现,当Traefik检测到更改时,它会动态更新路由。
File provider定义一个动态配置文件,这会告诉Traefik查看另一个文件以获取更多设置,当设置了
watch: true
,Traefik会监视此文件的更改,实现实时更新配置。fileConfig.yml
这是一个动态配置文件,这意味着如果我们对文件进行任何更改,Traefik 将获取并自动加载它们。我们将使用此文件来管理所有中间件,并添加任何外部服务,如虚拟机或其他主机上的服务等。在下面的示例中,我们将添加Homeassistant。
路由和服务(Routers & Services)
路由器负责将传入请求连接到能够处理它们的服务。在这个过程中,路由器可以使用中间件来更新请求,或者在将请求转发到服务之前采取行动。
服务负责配置如何到达最终将处理传入请求的实际服务。
要添加一个外部应用程序,我们需要给 Traefik 一个路由器,它告诉 Traefik 如何路由请求以及沿途使用哪个中间件,然后一个匹配服务告诉 Traefik 请求指向哪里。
中间件(Middleware)
Traefik 中的中间件,有些可以修改请求、标头,有些负责重定向,有些添加身份验证等等。
使用相同协议的中间件可以组合成链以适应每种方案
可以在此处找到 HTTP 中间件的列表。
可以在此处找到 TCP 中间件列表。
🤗 总结归纳
本文介绍了Traefik的安装和配置。由于不同的使用场景和需求,Traefik的配置可能因人而异,但本文提供的配置适用于大多数情况。
希望这篇文章能够帮助您开始使用Traefik并构建一个安全、可靠的Web应用程序。如果您有任何疑问或建议,请在评论中告诉交流。
📎 参考文章
有关安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:Biliko
- 链接:https://biliko.net/article/traefik-part3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章