Mos*_*atz 5 ssl lets-encrypt traefik
我有一台使用 Traefik 运行 Docker 容器的服务器。假设机器的主机名是machine1.example.com,每个服务都作为子域运行,例如srv1.machine1.example.com, srv2.machine1.example.com, srv3.machine1.example.com....
我想让 LetsEncrypt 为所有服务生成通配符证书*.machine1.example.com并将其用于所有服务,而不是为每个服务生成单独的证书。
令人烦恼的是我必须将配置行放入每个服务中labels:
labels:
- traefik.http.routers.srv1.rule=Host(`srv1.machine1.example.com`)
- traefik.http.routers.srv1.tls=true
- traefik.http.routers.srv1.tls.certresolver=myresolver
- traefik.http.routers.srv1.tls.domains[0].main=machine1.example.com
- traefik.http.routers.srv1.tls.domains[0].sans=*.machine1.example.com
labels:
- traefik.http.routers.srv2.rule=Host(`srv2.machine1.example.com`)
- traefik.http.routers.srv2.tls=true
- traefik.http.routers.srv2.tls.certresolver=myresolver
- traefik.http.routers.srv2.tls.domains[0].main=machine1.example.com
- traefik.http.routers.srv2.tls.domains[0].sans=*.machine1.example.com
# etc.
Run Code Online (Sandbox Code Playgroud)
这会变成很多看似不必要的样板文件。
我尝试通过使用文件提供程序中的模板功能来解决它(以一种仍然丑陋和烦人的方式,但不那么烦人),如下所示:
[http]
[http.routers]
{{ range $i, $e := list "srv1" "srv2 }}
[http.routers."{{ $e }}".tls]
certResolver = "letsencrypt"
[[http.routers."{{ $e }}".tls.domains]]
main = "machine1.example.com"
sans = ["*.machine1.example.com"]
{{ end }}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为这里创建的路由器是srv1@file,srv2@file而不是srv1@docker,srv2@docker它们是由 docker-compose 配置创建的。
有没有办法只指定一次此配置并将其应用于多个服务?
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |