Почему Traefik 2.0 не обнаруживает статические сертификаты по умолчанию, которые я указал, а генерирует их сам? - PullRequest
2 голосов
/ 07 ноября 2019

В моих первоначальных попытках перенести установку Traefik на основе docker-swarm с 1.7 на 2.0 я обнаружил, что статически заданная конфигурация SSL по умолчанию в моем конфигурационном файле traefik.toml игнорировалась, и с включенной отладкой в ​​моих журналах докера было много похожихсообщения:

time="2019-11-06T20:26:30Z" level=debug msg="No default certificate, generating one"

1 Ответ

3 голосов
/ 07 ноября 2019

Оказалось, что в 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
...