【问题标题】:Facing issues upgrading my traefik setup to docker swarm面临将我的 traefik 设置升级到 docker swarm 的问题
【发布时间】:2020-04-02 11:42:12
【问题描述】:

我有两个docker-compose.*.yml 文件,一个用于测试阶段,一个用于生产。测试阶段文件使用 docker compose 执行,生产使用 docker swarm。

docker compose 设置工作正常。在生产 docker swarm 设置的情况下,我在访问 rabbitmq 管理端点时会收到超时 504 http 状态代码。

由于两个容器的日志,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 (在 messing.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,具有相同的防火墙和暴露的相同端口。我猜我在 traefik 的 docker swarm 设置上犯了一些错误,但我不知道是什么。我基本上唯一改变的就是将标签放在deploy下。

rabbitmq 容器的 ui 暴露在端口 15672 上,我正在使用负载平衡器将其映射到 messing.prod-example.org 上的端口 443。尽管如此,这个端点给了我一个超时。

有人看到我在这里做的错误配置吗?

【问题讨论】:

    标签: docker docker-compose reverse-proxy docker-swarm traefik


    【解决方案1】:

    也许你忘记在 rabbitmq 标签中设置“入口点”,如下所示:

    traefik.http.routers.rabbitmq.entrypoints=XXX
    

    【讨论】:

      猜你喜欢
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多