Traefik 是领先的反向代理和负载均衡器,适用于云原生操作和容器化工作负载。它充当将您的服务发布到互联网的边缘路由器。
Traefik 通过匹配请求属性(例如域、URL 和端口)将请求路由到您的容器。该代理包含自动服务发现,因此您可以实时添加新容器,而无需重新启动 Traefik 服务。
在本指南中,我们将整理一个简单的 Traefik v2 部署,它将发布多个 Docker 容器。这使您可以使用一个 Docker 安装在同一个端口上提供多个服务,例如 Web 应用程序、API 和管理面板。
入门
使用自己的 Docker 映像部署 Traefik 是最简单的。在本指南的其余部分,我们将假设您使用 Docker 运行 Traefik。如果您希望 Traefik 位于 Docker 安装之外,则可以使用单文件二进制文件作为替代选项。
在开始使用 Traefik 之前,您必须创建一个配置文件。将以下内容添加到文件中——我们将在下面解释它的作用:
traefik.toml
[入口点]
[入口点.http]
地址=“:80”
[entryPoints.http.http.redirections.entryPoint]
至 = "https"
方案 = “https”
[入口点.https]
地址=“:443”
[供应商]
[提供者.docker]
网络=“traefik”
这个配置文件为 Traefik 配置了两个“入口点”。入口点描述了请求如何到达 Traefik 服务。创建 HTTP 和 HTTPS 入口点以分别侦听端口 80 和 443。对于 HTTP 请求,使用重定向规则将其转发到入口点。如果您希望能够通过纯 HTTP 提供内容,请删除重定向部分。
https
“提供者”部分配置定义网络路由的源。提供者只是可以向 Traefik 发出路由指令的基础设施组件。如果您愿意,您可以编写一个自定义 HTTP API 端点来定义您的路由。
在此示例中,我们保持简单并使用提供程序。这会监控主机上运行的 Docker 容器。当一个带有 Traefik 特定标签的新容器出现时,这些值将用于设置到该容器的路由。容器需要连接到Docker 网络才能正常工作,因为这是配置文件中指定的网络。立即创建网络:
docker
traefik
docker网络创建traefik
启动 Traefik
现在你已经准备好开始 Traefik 了!使用 Traefik 映像部署一个新容器。将端口 80 和 443 绑定到您的主机,允许 Traefik 侦听传入请求。您还应该将容器加入之前创建的网络。
traefik
将主机的 Docker 套接字挂载到带有标志的 Traefik 容器中。这使 Traefik 能够访问在您的主机上运行的其他容器,从而通过您的配置文件中设置的提供程序自动检测路由。配置文件本身安装在 Traefik 容器内。
-v
docker
/traefik.toml
码头工人运行-d\
-p 80:80\
-p 443:443\
-v $PWD/traefik.toml:/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
--name traefik \
--网络交易\
交易:2.6
接下来启动几个容器来测试 Traefik 是否正常工作:
码头工人运行-d\
--label traefik.http.routers.apache.rule=主机\(\`apache.example.com\`\) \
--名称阿帕奇\
--网络交易\
httpd:最新的
码头工人运行-d\
--label traefik.http.routers.nginx.rule=主机\(\`nginx.example.com\`\) \
--名称 nginx \
--网络交易\
nginx:最新的
确保您已添加 DNS 记录并将该映射映射到您的 Traefik 主机。您应该能够在浏览器中访问这些域,以分别查看默认的 Apache 和 NGINX 登录页面。这两个容器加入了 Traefik 网络;它们的标签设置了基本路由,通过它们的标头值匹配传入请求。
apache.example.com
nginx.example.com
traefik.http.routers
Host
路由流量
Traefik 支持几种不同的“匹配器”来路由您的流量。我们已经使用了上面的主机匹配器,但您也可以通过 HTTP 方法、标头、URI、IP 地址和查询字符串参数进行路由。将多个匹配器添加到您的容器中以构建更复杂的路由规则。
Traefik 还支持允许您在请求到达您的服务之前修改请求的中间件。您可能希望在代理级别添加前缀、调整标头或应用基本身份验证。这是使用中间件添加额外请求标头的示例:
Headers
X-Proxied-By
码头工人运行-d\
--label traefik.http.routers.nginx.rule=主机\(\`nginx.example.com\`\) \
--label traefik.http.middlewares.demo.headers.customrequestheaders.X-Proxied-By=traefik
--名称 nginx \
--网络交易\
nginx:最新的
Traefik 将流量路由到容器的暴露端口。您可以通过设置标签来指定不同的端口。
traefik.http.services.
.loadbalancer.server.port=8080
添加 SSL
接下来,您应该添加 SSL 以确保您的流量受到完全保护。Traefik 包含Let's Encrypt集成,因此我们现在将使用它来自动生成证书。
将以下部分添加到您的文件中:
traefik.toml
[certificatesResolvers.lets-encrypt.acme]
电子邮件 =“你@example.com”
存储 = "/acme.json"
[certificatesResolvers.lets-encrypt.acme.tlsChallenge]
这将 Traefik 配置为在解析证书请求时使用 Let's Encrypt ACME 提供程序。确保将电子邮件地址替换为您自己的电子邮件地址,以便您收到 Let's Encrypt 发送的任何证书到期提醒。该部分定义了如何进行认证验证;将其留空将使用提供唯一文件的默认流程,Let's Encrypt 将在证书颁发期间请求和验证。
tlsChallenge
重新启动或更换 Traefik 容器以应用新配置。您还应该在容器内挂载一个新文件——Traefik 将使用它来存储证书。
/acme.json
码头工人运行-d\
-p 80:80\
-p 443:443\
-v $PWD/acme.json:/acme.json \
-v $PWD/traefik.toml:/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
--name traefik \
--网络交易\
交易:2.6
使用仪表板
Traefik 包含一个 Web UI,它提供了部署中活动的端点、提供程序和服务(容器)的图形视图。您可以通过在配置文件中为其设置路由来公开 UI。
首先使用以下部分修改您现有的:
traefik.toml
[API]
仪表板=真
[提供者.文件]
文件名 = "/traefik_dashboard.toml"
接下来使用以下内容创建:
traefik_dashboard.toml
[http.middleware.dashboard_auth.basicAuth]
用户 = [
“管理员:123 美元……”
]
[http.routers.api]
rule = "主机(`traefik.example.com`)"
入口点 = [“https”]
中间件 = [“dashboard_auth”]
服务 = "api@internal"
[http.routers.api.tls]
certResolver = "让加密"
需要新文件,因为 Traefik 不支持“动态”配置(服务和路由器)以及 main 中的“静态”值。仪表板配置文件手动定义映射到内部 Web UI 服务的路由。添加到的行向提供者注册新的路由定义。
traefik.toml
traefik.example.com
providers.file
traefik.toml
file
使用以生成一组HTTP基本验证凭据。将生成的字符串添加到中间件中的数组中。您需要使用此用户名和密码来访问仪表板。
htpasswd
users
dashboard_auth
sudo apt install apache2-utils
htpasswd -nb 管理员 your_password
# 输出管理员:$123...
现在使用更新的配置重新启动 Traefik,记住也要挂载新文件:
traefik_dashboard.toml
码头工人运行-d\
-p 80:80\
-p 443:443\
-v $PWD/acme.json:/acme.json \
-v $PWD/traefik.toml:/traefik.toml \
-v $PWD/traefik_dashboard.toml:/traefik_dashboard.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
--name traefik \
--网络交易\
交易:2.6
您应该能够通过在浏览器中访问来访问仪表板。如果您不想将 Web UI 公开为路由并始终从本地计算机访问它,则可以改为在 Traefik 容器上发布端口。使用以下部分修改您的文件:
traefik.example.com
8080
traefik.toml
[API]
仪表板=真
不安全=真
码头工人运行-d\
-p 8080:8080 \
-p 80:80\
-p 443:443\
-v $PWD/acme.json:/acme.json \
-v $PWD/traefik.toml:/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
--name traefik \
--网络交易\
交易:2.6
这将允许您通过 访问仪表板。这种方法不应该用于安全的生产环境,但可以更快地设置本地实验。
http://localhost:8080
结论
Traefik 是适用于您的容器的多功能反向代理解决方案。在本文中,我们仅介绍了其最基本的功能。除了与 Docker 的基本使用外,Traefik还与领先的容器编排解决方案一起使用,包括Kubernetes、Docker Swarm和 Mesos。
Traefik 提供 REST API 以及Prometheus、InfluxDB、Datadog 和 Statsd 可以理解的格式的指标。这些功能使您可以将 Traefik 部署与堆栈中的其他基础设施组件一起自动化和检测。这是在不使用完整编排解决方案的情况下向世界发布容器化工作负载的理想方式。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.