Оказалось, что в Traefik 2.0 SSL-конфиг всегда обрабатывается как динамический (читайте внимательно здесь ), и поэтому необходимо определить провайдера динамического файла (см. здесь ), иболее того, эта динамическая конфигурация должна находиться в файле, отдельном от основного файла конфигурации Traefik.
Если попытаться ускорить этот процесс и объявить основной файл конфигурации traefik в качестве провайдера динамического файла, то можно увидеть этополезное сообщение в журналах:
time="2019-11-06T20:26:30Z" level=error msg="Cannot start the provider *file.Provider: template: :179:35: executing \"\" at <.Name>: can't evaluate field Name in type bool"
Однажды правильно настроенные сообщения будут отображаться следующим образом:
time="2019-11-06T20:45:20Z" level=debug msg="Configuration received from provider file: {\"http\":{},\"tcp\":{},\"tls\":{\"stores\":{\"default\":{\"defaultCertificate\":{\"certFile\":\"/etc/certs/server.crt\",\"keyFile\":\"/etc/certs/server.key\"}}}}}" providerName=file
Несколько сообщений на форуме сообщества Containous (например, здесь )и Reddit (например, здесь ) определенно помогли получить разрешение здесь, но, надеюсь, это резюме также поможет.
Следующий docker-compose.yml (отредактированный вручную для удаления некоторых абстракций, например, местоположенияограничения, сети, наша собственная авторизация и т. д.) - это почти то, что работает на данный момент для запуска Traefik в качестве масштабируемой службы Docker на Docker SWA. гм, с включенной приборной панелью и за https. В этом случае метки Traefik находятся на самой службе Traefik и устанавливают маршрутизатор и службу «backend» для панели мониторинга, работающей на 8080.
version: '3.3'
secrets:
rsa_private_key:
file: key.pem
rsa_cert:
file: crt.pem
configs:
toml_conf:
file: traefik.toml
dynamic_toml_conf:
file: dynamic_conf.toml
services:
svc:
# The official v2.0 Traefik docker image
image: traefik:v2.0.2
# Enables the web UI and tells Traefik to listen to docker
ports:
# Primary inbound HTTPS traffic.
- "443:443"
# HTTP traffic open for the purposes of permanent redirect to HTTPS.
- "80:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
max_attempts: 3
delay: 30s
window: 60s
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-sec.entrypoints=websecure"
- "traefik.http.routers.api-sec.tls=true"
- "traefik.http.routers.api-sec.tls.options=default"
- "traefik.http.routers.api-sec.rule=Host(`myhost`)"
- "traefik.http.routers.api-sec.service=api@internal"
# Now the backend service...
- "traefik.http.services.api.loadbalancer.server.port=8080"
secrets:
- source: rsa_private_key
target: /etc/certs/server.key
- source: rsa_cert
target: /etc/certs/server.crt
configs:
- source: toml_conf
target: /etc/traefik/traefik.toml
- source: dynamic_toml_conf
target: /etc/dynamic_conf.toml
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock