在 Traefik 动态配置中使用环境变量

ada*_*eck 7 docker traefik

我正在尝试构建一个 Traefik 动态配置,该配置具有用于"Host(app.localhost)"开发但用于"Host(realname.com)"生产的规则。我也在使用 Docker,但我认为这与我的问题无关。我的问题是:在我的动态配置中是否有使用环境变量的惯用方法?

文档提到了 Go 模板,但除此之外我不明白。实在是太缺乏了。我也考虑过类似envsubst 的东西,但希望不必安装其他工具。

我正在使用 Traefik 2.0+。此外,我必须使用文件提供程序,因为我在本地为 TLS 使用自签名证书。来自 Traefik 的文档:

在上面的示例中,我们使用文件提供程序来处理这些定义。这是配置证书(以及选项和存储)的唯一可用方法。但是,在 Kubernetes 中,证书可以而且必须由机密提供。

ABM*_*man 9

使用 traefik v2.0+ docker 镜像,您可以简单地docker-compose.env文件中使用和定义您的环境变量。然后使用如下示例中的标签。

例子

使用文件提供程序使用 traefik CLI 命令为本地主机添加自签名 TLS 证书:
--providers.file.filename=/etc/traefik/certs.toml

.env 本地文件:

# Environment variables for docker-compose.yml
LOG_LEVEL=DEBUG
NETWORK=net

## dashboard configs
DASHBOARD_HOST=app.localhost
CONFIG_PATH=./config
CERT_PATH=./certs
Run Code Online (Sandbox Code Playgroud)

.env 生产中的文件:

# Environment variables for docker-compose.yml
# LOG_LEVEL=INFO
LOG_LEVEL=ERROR
NETWORK=net

## dashboard configs
DASHBOARD_HOST=realname.com
CONFIG_PATH=./config
CERT_PATH=./certs
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml:

# Environment variables for docker-compose.yml
LOG_LEVEL=DEBUG
NETWORK=net

## dashboard configs
DASHBOARD_HOST=app.localhost
CONFIG_PATH=./config
CERT_PATH=./certs
Run Code Online (Sandbox Code Playgroud)

配置/certs.toml:

# Environment variables for docker-compose.yml
# LOG_LEVEL=INFO
LOG_LEVEL=ERROR
NETWORK=net

## dashboard configs
DASHBOARD_HOST=realname.com
CONFIG_PATH=./config
CERT_PATH=./certs
Run Code Online (Sandbox Code Playgroud)

证书/cert.crt:

-----BEGIN CERTIFICATE-----
<THE CERTIFICATE STRING>
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

证书/cert.key:

-----BEGIN RSA PRIVATE KEY-----
<THE RSA PRIVATE KEY STRING>
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

docker-compose将使用文件中${DASHBOARD_HOST}定义的值替换所有变量.env

然后,您可以使用以下方法验证您的配置:docker-compose config
运行方式:docker-compose up -d

-d 标志用于分离模式,在后台运行容器

源文件: 您可以参考这个仓库在github上找到这个例子中的一个精心制作的版本,如何设置traefik v2使用docker-compose自签名或自动获取咱们加密通配符证书。


inv*_*d0r 0

除非 traefik 支持某种使用环境变量进行动态配置的方式,就像静态配置一样,否则您通常会在启动时陷入困境sedenvsubst模板化配置。

  • 确实如此!请参阅 https://doc.traefik.io/traefik/providers/file/#go-templated “Traefik 支持使用 Go 模板自动生成配置文件的重复部分。” **但是**“Go 模板仅适用于专用的动态配置文件。模板不适用于 Traefik 主静态配置文件。” (2认同)