traefik: получите столько же интерфейсов, сколько реплик для службы (ожидайте, что будет только один) - PullRequest
1 голос
/ 09 июня 2019

Я пытаюсь установить два стека docker-compose для кластера роя: один для traefik, другой для httpd. он работает нормально, за исключением того, что я получил один бэкэнд с именем http, с моими 4 репликами. но я получаю 4 интерфейса, каждый с тем же правилом маршрута.

вот мои файлы docker-compose

version: '3.7'

networks:
  default:
    external: true
    name: common

services:
  httpd:
    image: httpd:2.4 # A container that exposes an API to show its IP address
    labels:
      traefik.frontend.rule: "Host:httpd.docker.localhost"
      traefik.enable: "true"
      traefik.backend: "http"
    deploy:
      replicas: 4
    networks:
      - default

и

version: '3.7'

networks:
  common:
    name: common 
    driver: overlay
    attachable: true


services:
  reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Traefik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # 
      - ./traefik.toml:/etc/traefik/traefik.toml # 
    networks:
      - common 

вот мой трафик.томл

debug = true

################################################################
# API and dashboard configuration
################################################################
[api]

#defaultEntryPoints = ["http", "https", "ws", "wss"]

################################################################
# Web configuration backend
################################################################
[web]
address = ":8080"
[web.auth.basic]
# User: toto | Password: password
users = ["toto:$2y$05$zNs3wc5UPB4su8vbFugVPuKEaLJXMf5Z.9hAI1ulJpBbhbBprfppO"]

################################################################
# Entry-points configuration
################################################################
#[entryPoints]
#  [entryPoints.http]
#    address = ":80"
#    [entryPoints.http.redirect]
#      entryPoint = "https"
#  [entryPoints.https]
#    address = ":443"
#    [entryPoints.https.tls]

################################################################
# Docker configuration backend
################################################################
[docker]
domain = "docker.local"
watch = true
#exposedbydefault = false

вот что я получаю

4Frontends
frontend-Host-httpd-docker-localhost-0
Route Rule
Host:httpd.docker.localhost
Entry Points
http
Backend
backend-http
frontend-Host-httpd-docker-localhost-1
Route Rule
Host:httpd.docker.localhost
Entry Points
http
Backend
backend-http
frontend-Host-httpd-docker-localhost-2
Route Rule
Host:httpd.docker.localhost
Entry Points
http
Backend
backend-http
frontend-Host-httpd-docker-localhost-3
Route Rule
Host:httpd.docker.localhost
Entry Points
http
Backend
backend-http

ожидайте: получить только один интерфейс, с тем же правилом маршрутизации только к одному бэкэнду (так как я получаю только один бэкэнд, что хорошо для меня)

получил: четыре интерфейса, с тем же правилом маршрута, только к одному бэкэнду (так как я получаю только один бэкэнд, что хорошо для меня)

1 Ответ

0 голосов
/ 10 июня 2019
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]

[api]

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

[docker]
domain = "docker.local"
watch = true
swarmMode = true
#exposedbydefault = false
version: '3.7'

networks:
  default:
    external: true
    name: common

services:
  httpd:
    image: httpd:2.4 # A container that exposes an API to show its IP address
    deploy:
      replicas: 4
      labels:
        traefik.frontend.rule: "Host:httpd.docker.localhost"
        traefik.enable: "true"
        traefik.backend: "http"
    networks:
      - default
version: '3.7'

networks:
  common:
    name: common
    driver: overlay
    attachable: true


services:
  reverse-proxy:
    image: traefik:v1.7.12
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/etc/traefik/traefik.toml
    networks:
      - common
...