Настройка Docker с обратным прокси Traefik - NET: ERR_CERT_AUTHORITY_INVALID в одном домене, несмотря на идентичную настройку и конфигурацию другого домена, который работает

У меня есть установка Docker с Traefik в качестве обратного прокси. У меня есть один контейнер NGINX, обслуживающий статическую страницу. Два домена (example-A.com и example-B.de) должны предоставлять одну и ту же статическую страницу. Хотя example-A.com работает должным образом, example-B.de получает ошибку NET: ERR_CERT_AUTHORITY_INVALID.

example-A.com зарегистрирован в доменах Google. Его A-запись с именем «@» указывает на IP-адрес моего хоста Docker.

example-B.de зарегистрирован у другого регистратора доменов. Его A-запись указывает на IP-адрес моего хоста Docker (то есть на тот же IP-адрес, что и в example-A.com). Я не могу настроить имя «@» с этим регистратором, я могу установить только запись A и целевой IP.

Мой traefik.toml:

defaultEntryPoints = ["http", "https"]

[entryPoints]
  [entryPoints.dashboard]
    address = ":8080"
    [entryPoints.dashboard.auth]
      [entryPoints.dashboard.auth.basic]
        users = ["admin:xxxxxxxxx"]
  [entryPoints.http]
    address = ":80"
      [entryPoints.http.redirect]
        entryPoint = "https"
  [entryPoints.https]
    address = ":443"
      [entryPoints.https.tls]

[api]
entrypoint="dashboard"

[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

[docker]
domain = "my-main-domain.net"
watch = true
network = "traefik"

Мой docker-compose.yml:

version: "3"

services:
  my-web:
    image: nginx:alpine
    container_name: my-web
    volumes:
    - /home/my-directory:/usr/share/nginx/html:ro
    networks:
    - traefik
    labels:
    - traefik.enable=true
    - traefik.frontend.rule=Host:example-B.de,example-A.com
    restart: always
  jupyter:
    [config here... with "traefik.frontend.rule=Host:subdomain1.my-main-domain.net"... remainder of config]
  ghost:
    [config here... with "traefik.frontend.rule=Host:subdomain2.my-main-domain.net"... remainder of config]

networks:
  traefik:
    external: true

Странное поведение заключается в том, что example-A.com работает так, как ожидалось (HTTP и HTTPS), в то время как example-B.de не работает с NET: ERR_CERT_AUTHORITY_INVALID (HTTPS; HTTP перенаправляется на HTTPS, т.е. та же ошибка), несмотря на точно такую ​​же настройку в docker- compose.yml в одном контейнере на одном хосте Docker (см. traefik.frontend.rule) и работает под тем же traefik.toml.

Еще одно странное поведение: я получаю сообщение об ошибке NET: ERR_CERT_AUTHORITY_INVALID на моем сотовом телефоне (Chrome). На моем компьютере (Chrome) он показывает «404 страница не найдена» (от Traefik) и «Небезопасно» в строке URL с подробной информацией «TRAEFIK DEFAULT CERT - Самозаверяющий корневой сертификат - этот сертификат не был подписан третьей стороной. ".

Две другие службы докеров в моем docker-compose.yml (jupyter и ghost) работают должным образом.

Я перезапустил traefik и запустил докер на docker-compose.yml.

Единственная разница, которую я могу заметить, - это другой регистратор домена и разница в записях DNS A, как описано выше.

Проблема, похоже, связана с SSL, однако, насколько мне известно (ограниченно), регистратор домена не имеет никакого отношения к сертификатам SSL. Кроме того, настройка DNS, похоже, не является проблемой, поскольку браузер правильно разрешает домен, однако затем показывает ошибку вместо страницы.

Может ли кто-нибудь обнаружить проблему в моих настройках или конфигурациях и указать мне, как исправить или как провести дальнейшее расследование?


person Just    schedule 20.03.2019    source источник
comment
Может быть, ваша проблема связана с CAA-записями (digitalocean.com/ docs / network / dns / how-to / caa)? В моей настройке у меня была проблема, что letsencrypt не мог выполнить свою задачу на моем HAProxy, потому что не существовало CAA-Record для моего домена для letsencrypt (.com). Мне пришлось создать его вручную в пользовательском интерфейсе моего регистратора доменов, и только после этого letsencrypt смогла успешно выполнить задачу. Может быть, у регистратора домена, где работает ваш сертификат, есть запись CAA, созданная вручную (разрешающая все), а у того, где она не работает, такая запись не создается автоматически?   -  person codinghaus    schedule 20.03.2019
comment
Ух ты! спасибо @codinghaus! Это решение. Ты спас мне день !!   -  person Just    schedule 20.03.2019


Ответы (1)


Как отметил в своем комментарии @codinghaus, решение состоит в том, чтобы добавить запись CAA к домену у регистратора домена. Я добавил тег свойства "проблема" со значением "letsencrypt.org". Затем я перезапустил traefik, а также свой docker-compose.yml.

person Just    schedule 20.03.2019