Traefik / SSL / LetsEncrypt Неисправность - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь настроить letEncrypt с traeffik, и все, что я делаю, похоже, не работает. На данный момент я получаю следующую ошибку:

enter image description here

В других сообщениях SO упоминалось, что это может быть связано с неиспользованием http-запроса для traeffik ( Traefik выдаст сертификат вместо Let's encrypt ), но я использую его, поэтому честно понятия не имею (это не решает проблему - не закрывайте). Мои файлы конфигурации кажутся маленькими, но я не получаю сообщений об ошибках, поэтому моя способность перебирать перерывы мала. Если кто-нибудь может помочь с решением этой проблемы, я был бы признателен - я занимался этим какое-то время и не знаю, что делать.

Я раскручиваю следующие три файла ниже с помощью этого небольшого скрипта bash:

root@ubuntu-1gb-nyc3-01:/lowteck# cat ./runSwarm.sh 
#!/bin/bash

./buildandpush.sh
cd ./back
./buildandpush.sh
cd ..

docker volume prune -f
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
 docker swarm init \
   --advertise-addr 104.236.214.151
docker network create -d overlay --attachable proxy
docker stack deploy --compose-file=stage.yaml prod2 
docker stack deploy --compose-file=traefik.yaml prodTraefik

Вот мой traefik.toml:

root@ubuntu-1gb-nyc3-01:/lowteck# cat traefik.toml 
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]

[web]

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.http.forwardedHeaders]
    trustedIPs = ["104.236.214.151"]
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

[acme]
  caServer = "https://acme-v02.api.letsencrypt.org/directory"
  email = "pweyand@gmail.com"
  storage = "acme.json"
  entryPoint = "https"
  onHostRule = true 
  [acme.httpChallenge]
    entryPoint = "http"

[[acme.domains]]
  main = "lowteck.com"
  sans = ["www.lowteck.com"]

[docker]
  domain = "traefik"
  watch = true
  swarmmode = true
  network="web"

Вот мой traefik.yaml:

root@ubuntu-1gb-nyc3-01:/lowteck# cat traefik.yaml 
version: '3.3'

networks:
  proxy:
    external: true

configs:
  traefik.toml:
    file: ./traefik.toml

services:

  traefik:
    image: traefik
    ports:
      - "80:80"
      - "8080:8080"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    configs:
      - source: traefik.toml
        target: /etc/traefik/traefik.toml
    labels:
      - "traefik.enable=false"
    networks:
      - proxy
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager] 

Вот мой stage.yaml:

root@ubuntu-1gb-nyc3-01:/lowteck# cat stage.yaml 
version: "3.3"

networks:
  default:
    external: false
  proxy:
    external: true

services:
  back:
    image: patientplatypus/lowtechback:latest
    ports: 
      - '5000:5000'
    networks:
      - proxy
      - default
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        max_attempts: 5
        window: 120s
      labels:
        - "traefik.docker.backend=back"
        - "traefik.port=5000"
        - "traefik.frontend.rule=Host:back.lowteck.com"
        - "traefik.docker.network=proxy"
  front:
    image: patientplatypus/lowtechfront:latest
    ports: 
      - '3000:3000'
    networks:
      - proxy
      - default
    depends_on:
      - back
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        max_attempts: 5
        window: 120s
      labels:
        - "traefik.docker.backend=front"
        - "traefik.port=3000"
        - "traefik.frontend.rule=Host:104.236.214.151, lowteck.com, www.lowteck.com, zennify.me"
        - "traefik.docker.network=proxy"

Опять же, я уже некоторое время занимаюсь этим, и у меня практически нет кодов ошибок, по которым можно продолжить. Если у кого-нибудь есть совет, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ:

Я обнаружил ошибку после выхода из модуля traefik, а именно то, что мне нужно:

[[acme.domains]]
  main = "lowteck.com"
  sans = ["www.lowteck.com", "back.lowteck.com"]

Однако это не решило проблему https, хотя журналы теперь очищены для контейнера traefik. Вы можете увидеть полный вывод журнала здесь: https://gist.github.com/patientplatypus/8a40e12c6ba64cdc7d2bf88581967057.

1 Ответ

0 голосов
/ 19 марта 2019

Итак, я наконец-то решил ее, и есть несколько вещей, которые помогли мне отметить всех, кто сталкивался с этим.

1) Вы должны войти в свой модуль traefik, используя docker service logs YOURTRAEFFICPOD, чтобы получить все ошибки для отладки. По какой-то причине это не произошло со мной (тупой).

2) Часть acme sans определяется не модулем pod, а тем, что находится в ваших записях A для домена. Если его нет в записях А, не помещайте его туда - это будет отображаться в журналах как ошибка.

3) Убедитесь, что вы используете последнюю версию traefik. В моем случае мне пришлось изменить версию traefik на 1.7.9, изменив traefik.toml на строку image: traefik:v1.7.9

4) Если вы используете http-запрос, ваш файл acme.json будет и должен быть пустым, так что не беспокойтесь об этом.

5) Наконец, если вы получаете сообщение об ошибке, превышающей максимальное количество запросов на сертификат для вашего домена от Let'sEncrypt, это может на самом деле не вынудить ваш домен не иметь https - вам следует проверить, как это все еще возможно быть в состоянии использовать предыдущий сертификат.

Вот и все, спасибо всем за помощь!

...