Проверка работоспособности Traefik не работает. Вместо перенаправления на активные серверы возвращается «Плохой шлюз»

#docker #docker-compose #traefik #bad-gateway #health-check

#docker #docker-compose #traefik #bad-gateway #проверка работоспособности

Вопрос:

Я изучаю основы Traefik, но не могу заставить проверку работоспособности работать. У меня есть четыре сервера, которые являются контейнерами docker. Вращение работает хорошо, при обновлении страницы localhost каждый раз отображается другой сервер. Даже запуск нескольких запросов с помощью Apache Benchmark и их мониторинг с помощью ctop показывает правильный баланс рабочей нагрузки. Проблема возникла, когда я остановил один из серверов. Предполагается, что Traefik должен обнаружить автономный сервер и перенаправить на один из активных серверов, но вместо этого, когда ротация достигает автономного сервера, отображается сообщение «Bad Gateway», поэтому проверка работоспособности вообще не работает. Я попытался воспроизвести примеры документации, но уверен, что я что-то упускаю.

Это мой файл docker-compose.yml:

 version: '2.4'
services:
  traefik:
    image: asn/traefikv1
    build: traefikv1/
    ports:
      - "80:80"
      - "8080:8080" # Web GUI
    volumes:
      # Traefik static config file
     - ./traefikv1/traefik.toml:/etc/traefik/traefik.toml  

  wwwserver:
    build: .
    image: phpwebapp
    ports:
      # Random external port for HTTP direct access 
      - "80"
      - "8080"
    scale: 4
    mem_limit: 50m
    mem_reservation: 25m
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mariadb 

  mariadb:
    image: mariadb:latest
    environment:
      - MYSQL_ROOT_PASSWORD=secret
      - MYSQL_DATABASE=notesdb
      - MYSQL_USER=usuario
      - MYSQL_PASSWORD=secreto
    ports:
      - 3306:3306
  

И это мой traefik.toml, где определена проверка работоспособности:

 # Enable API and dashboard (:8080)
[api]

# Enable logs
[traefikLog]
[accessLog]

# Configure timeouts
[respondingTimeouts]

[file]

#Manual frontend/backend  configuration
[frontends]
  [frontends.frontend1]
    passHostHeader = true
    entryPoints = ["http"]
    backend = "wwwservers"
[backends]
  [backends.wwwservers]
      # Define www servers
      [backends.wwwservers.servers.server1]
          url = "http://pruebastraefik_wwwserver_1:80" 
      [backends.wwwservers.servers.server2]
          url = "http://pruebastraefik_wwwserver_2:80"    
      [backends.wwwservers.servers.server3]
          url = "http://pruebastraefik_wwwserver_3:80"
      [backends.wwwservers.servers.server4]
          url = "http://pruebastraefik_wwwserver_4:80"
      [backends.wwwservers.loadBalancer.healthCheck]
          path = "/health"
          interval = "10s"
          timeout = "3s"
          port= 80
  

Ответ №1:

Я думаю, что вам не хватает меток для ваших служб в файле компоновки. Также обратите внимание, что версия 2.4 является так называемой экспериментальной, я предлагаю вам переключиться на 2.3.

В глубине я считаю, что это происходит: самое главное, что вам не хватает ярлыков в службах создания докеров. Кроме того, файл TOML работает со службой traefik, а не с www-сервером, который вы хотите маршрутизировать. Такие теги, как «бэкэнды» и «интерфейсы», должны быть включены в соответствующий тег traefik, на мой взгляд, traefik их игнорирует.

Кроме того, кажется, что опция масштабирования создаст дополнительные контейнеры для запуска службы на том же хосте (?). Похоже, вы пытаетесь контролировать свои службы, определяя, что пытается обслуживать каждый масштабируемый узел.

Я запускаю несколько доменов и служб через роевой кластер, и traefik является моей основной точкой входа и управляет сетью кластера. Я пишу отдельные файлы стека с тегом «deploy» и дочерним тегом «labels», который включает все правила traefik для каждой службы в стеке, очень похожие на руководство по быстрому запуску на сайте, только с несколькими файлами compose и добавленным тегом deploy для режима docker swarm. Удачи