Traefik 未在 swarm 模式下设置 backend/frontend

Traefik not set backend/frontend in swarm mode

我想按照本指南在集群群中使用 traefik https://docs.traefik.io/user-guide/swarm-mode/#deploy-traefik 我已经编写了这个堆栈文件:

  traefik:
    image: traefik:alpine
    deploy:
      placement:
        constraints:
          - node.role == manager
    command: --api --docker --docker.watch --docker.swarmMode
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "80:80"
      - "8080:8080"
    labels:
      - "traefik.enable=false"

  backend:
    image: registry.example.com/backend
    labels:
      - "traefik.backend=backend"
      - "traefik.backend.buffering.maxRequestBodyBytes=2147483648"
      - "traefik.backend.loadbalancer.sticky=true"
      - "traefik.frontend.rule=Host:backend.localhost"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.port=80" 

   api:
    image: registry.example.com/api
    labels:
      - "traefik.backend=api"
      - "traefik.backend.buffering.maxRequestBodyBytes=2147483648"
      - "traefik.backend.loadbalancer.sticky=true"
      - "traefik.frontend.rule=Host:api.localhost"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.port=80"

Traefik 启动但是没有配置,我不明白错误在哪里。

您忘记了示例中的网络部分。 您错过了与网络相关的标签和网络本身:

  deploy:
    labels:
    - "traefik.docker.network=traefik-network" # for both api and backend
    ...
  networks:
  - "traefik-network" # for traefik, api and backend
  ...
networks:
  traefik-network:{} # you can also make it external

编辑: 此外,在 swarm 上,标签应设置在服务的 "deploy" 部分下,而不是服务本身。