这是一个示例 Docker compose 文件,它配置 Traefik 以公开一个名为 web 的入口点,该入口点侦听 TCP 端口 8000,并将 Traefik 与 Consul 的服务目录集成以进行端点发现。
# docker-compose.yaml
---
version: "3.8"
services:
consul:
image: consul:1.8.4
ports:
- "8500:8500/tcp"
traefik:
image: traefik:v2.3.1
ports:
- "8000:8000/tcp"
environment:
TRAEFIK_PROVIDERS_CONSULCATALOG_CACHE: 'true'
TRAEFIK_PROVIDERS_CONSULCATALOG_STALE: 'true'
TRAEFIK_PROVIDERS_CONSULCATALOG_ENDPOINT_ADDRESS: http://consul:8500
TRAEFIK_PROVIDERS_CONSULCATALOG_EXPOSEDBYDEFAULT: 'false'
TRAEFIK_ENTRYPOINTS_web: 'true'
TRAEFIK_ENTRYPOINTS_web_ADDRESS: ":8000"
下面是一个 Consul 服务注册文件,它注册了一个名为 web 的应用程序,该应用程序正在侦听端口 80。服务注册包括几个标签,指示 Traefik 通过名为的入口点向服务 (traefik.enable=true) 公开流量web,并为服务创建关联的路由配置。
service {
name = "web"
port = 80
tags = [
"traefik.enable=true",
"traefik.http.routers.web.entrypoints=web",
"traefik.http.routers.web.rule=Host(`example.com`) && PathPrefix(`/myapp`)"
]
}
这可以使用 CLI (consul service register web.hcl) 注册到 Consul。 Traefik 将通过目录集成发现这一点,并根据标签中指定的路由配置进行自我配置。
Traefik 在端口 8000 上收到的带有 Host 标头的 example.com 和 /myapp 路径的 HTTP 请求将被路由到在 Consul 注册的 web 服务。
curl 命令示例。
curl --header "Host: example.com" http://127.0.0.1:8000/myapp
这是一个比较基础的例子,适合开发/测试。如果您要部署到通常由访问控制列表 (ACL) 保护的生产 Consul 环境中,则需要定义额外的 Traefik 配置参数。