Возникают проблемы при обновлении моей настройки traefik до docker роя - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть два docker-compose.*.yml файла, один для стадии тестирования и один для производства. Файл этапа тестирования выполняется с помощью docker compose, а производство с docker swarm.

Настройка docker compose работает нормально. В случае настройки docker swarm я получаю тайм-аут 504 http код состояния при доступе к конечной точке управления rabbitmq.

Поскольку в журналах обоих контейнеров, traefik, а также rabbitmq не отображаются какие-либо ошибка, я не знаю, как отладить это.

Вот оба файла:

docker -compose.testing-stage.yml (рабочий пример, выполняется с docker compose)

version: '3.7'

services:
  traefik:
    image: traefik:v2.2
    hostname: traefik
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/acme.json:/root/acme.json
      - /root/credentials.txt:/root/credentials.txt
    ports:
      - 80:80
      - 443:443
    command:
      - --api=true
      - --log.level=WARN
      - --providers.docker=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --providers.docker.exposedByDefault=false
      - --certificatesresolvers.secure.acme.httpchallenge=true
      - --certificatesresolvers.secure.acme.httpchallenge.entrypoint=web
      - --certificatesresolvers.secure.acme.email=${MAIL_ADDRESS}
      - --certificatesresolvers.secure.acme.storage=/root/acme.json
    labels:
      - traefik.enable=true
      # dashboard
      - traefik.http.routers.traefik.service=api@internal
      - traefik.http.routers.traefik.rule=Host(`monitor.example.org`)
      - traefik.http.routers.traefik.tls.certresolver=secure
      - traefik.http.routers.traefik.middlewares=auth
      - traefik.http.services.traefik.loadbalancer.server.port=8080
      - traefik.http.middlewares.auth.basicauth.usersfile=/root/credentials.txt
      # https redirect
      - traefik.http.routers.detour.rule=hostregexp(`{host:[a-z-.]+}`)
      - traefik.http.routers.detour.entrypoints=web
      - traefik.http.routers.detour.middlewares=redirect-to-https
      - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
      - traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
      - traefik.http.services.dummy-svc.loadbalancer.server.port=9999
  rabbitmq:
    image: registry.exampe.com/root/blicc/rabbitmq:test
    hostname: rabbitmq
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_PASSWORD}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
      - RABBITMQ_DEFAULT_USER=admin
    ports:
      - 15672:15672
    labels:
      - traefik.enable=true
      - traefik.http.routers.rabbitmq.rule=Host(`messaging.example.org`)
      - traefik.http.routers.rabbitmq.tls.certresolver=secure
      - traefik.http.services.rabbitmq.loadbalancer.server.port=15672

docker -compose.prod.yml (пример, который дает тайм-аут на messaging.prod-example.org, выполняемый с docker swarm)

version: '3.7'

services:
  traefik:
    image: traefik:v2.2
    hostname: traefik
    ports:
      - 80:80
      - 443:443
    command:
      # entry points
      - --api=true
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      # tls certificates
      - --certificatesresolvers.secure.acme.httpchallenge=true
      - --certificatesresolvers.secure.acme.httpchallenge.entrypoint=web
      - --certificatesresolvers.secure.acme.email=${MAIL_ADDRESS}
      - --certificatesresolvers.secure.acme.storage=/root/acme.json
      # metrics
      - --metrics=true
      - --metrics.prometheus=true
      # docker
      - --providers.docker=true
      - --providers.docker.exposedByDefault=false
      - --providers.docker.swarmMode=true
      - --providers.docker.network=traefik-public
      - --providers.docker.endpoint=unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/acme.json:/root/acme.json
      - /root/credentials.txt:/root/credentials.txt
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        order: start-first
        failure_action: rollback
        delay: 10s
      rollback_config:
        parallelism: 0
        order: stop-first
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      placement:
        constraints:
          - node.role == manager
      labels:
        - traefik.enable=true
        # dashboard
        - traefik.http.routers.traefik.service=api@internal
        - traefik.http.routers.traefik.rule=Host(`monitor.prod-example.org`)
        - traefik.http.routers.traefik.tls.certresolver=secure
        - traefik.http.routers.traefik.middlewares=auth
        - traefik.http.middlewares.auth.basicauth.usersfile=/root/credentials.txt
        - traefik.http.services.traefik.loadbalancer.server.port=8080
        # https redirect
        - traefik.http.routers.detour.rule=hostregexp(`{host:[a-z-.]+}`)
        - traefik.http.routers.detour.entrypoints=web
        - traefik.http.routers.detour.middlewares=redirect-to-https
        - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
        - traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
        - traefik.http.services.dummy-svc.loadbalancer.server.port=9999
  rabbitmq:
    image: registry.exampe.com/root/blicc/rabbitmq:latest
    hostname: rabbitmq
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_PASSWORD}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD}
      - RABBITMQ_DEFAULT_USER=admin
    ports:
      - 15672:15672
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        order: start-first
        failure_action: rollback
        delay: 10s
      rollback_config:
        parallelism: 0
        order: stop-first
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s
      placement:
        constraints:
          - node.role == manager
      labels:
        - traefik.enable=true
        - traefik.http.routers.rabbitmq.rule=Host(`messaging.prod-example.org`)
        - traefik.http.routers.rabbitmq.tls.certresolver=secure
        - traefik.http.services.rabbitmq.loadbalancer.server.port=15672

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

. В контейнере rabbitmq пользовательский интерфейс отображается на порту 15672, который я сопоставляю с балансировщиком нагрузки на порт 443 на messaging.prod-example.org. , Тем не менее, эта конечная точка дает мне тайм-аут.

Кто-нибудь видит неправильную конфигурацию, которую я здесь делаю?

...