Traefik не может загрузить реплики докера баланса - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить docker-compose up --scale apiserver=2, но Traefic не может сбалансировать загрузку api-сервера.Я вижу оба приложения на приборной панели, но в первую очередь трафик только балансировки нагрузки.Когда я проверяю журналы, я вижу, что оба приложения nodejs запускаются

apiserver_1_cff59924db38 | Listening on port 3000. ContainerId: a2793ccb-daee-4a73-b4d0-6cbccb616cb9
apiserver_2_2164f88b7ed4 | Listening on port 3000. ContainerId: a92f516a-d66c-4672-b1b9-e0d8e182b46f

Когда я проверяю панель инструментов Traefik, я вижу ниже,

backend-apiserver-dockertest

|Server                |Weight|
|----------------------|------|
|http://172.18.0.3:3000| 1    |
|http://172.18.0.6:3000| 1    |


Load Balancer
Method wrr

Однако всякий раз, когда я нажимаю ${API_NAME}, я получаю ответ только от первого экземпляра API-сервера.Который дает мне UUID первого сервера a2793ccb-daee-4a73-b4d0-6cbccb616cb9

Вот мой файл docker-compse.yml

version: '3.6'
services:
    traefik:
        container_name: traefik
        image: traefik
        ports:
            - 80:80
            - 443:443
            - 8080:8080 #dashboard
        networks:
            - proxy
        environment:
            - DUCKDNS_TOKEN=${DUCKDNS_TOKEN}
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - ./traefik/traefik.toml:/traefik.toml
            - ./traefik/acme/acme.json:/etc/traefik/acme.json
            - ./log:/var/log/traefik
        labels:
            - traefik.enable=true
            - traefik.port=8080
            - traefik.frontend.rule=Host:${TRAEFIK_NAME}
        restart: unless-stopped

    apiserver:
        build: ./api-server
        networks:
            - proxy
        labels:
            - traefik.frontend.rule=Host:${API_NAME}
            - traefik.frontend.entryPoints=https
            - traefik.docker.network=proxy
            - traefik.protocol=http
            - traefik.enable=true
            - traefik.port=3000
        restart: unless-stopped

    website:
        container_name: website
        build: ./website
        networks:
            - proxy
        labels:
            - traefik.frontend.rule=Host:${DOMAIN_NAME}
            - traefik.frontend.entryPoints=https
            - traefik.docker.network=proxy
            - traefik.protocol=http
            - traefik.enable=true
            - traefik.port=80
        restart: unless-stopped

networks:
    proxy:
        name: proxy

traefik.toml

debug = true
logLevel = "DEBUG"
checkNewVersion = true
defaultEntryPoints = ["http", "https"]

[api]
  # Name of the related entry point
  #
  # Optional
  # Default: "traefik"
  #
  entryPoint = "traefik"

  # Enable Dashboard
  #
  # Optional
  # Default: true
  #
  dashboard = true

[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"
  [entryPoints.https]
    address = ":443"
    [entryPoints.https.tls]

[docker]
  endpoint = "unix:///var/run/docker.sock"
  exposedbydefault = false
  watch = true

[acme]
  email = "email@address.com"
  storage = "/etc/traefik/acme.json"
  entryPoint = "https"
  acmeLogging = false
  [acme.dnsChallenge]
    provider = "duckdns"
    delayBeforeCheck = 0

[[acme.domains]]
  main = "*.mydomain.duckdns.org"
  sans = ["mydomain.duckdns.org"]

1 Ответ

0 голосов
/ 30 ноября 2018

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

Причина, по которой работает curl, заключается в том, что он закрывает сетевое соединение каждый раз, когда curlвыходы, похожие на поведение нескольких клиентов.

...