как установить имя службы панели управления traefik

Вопрос или проблема

поскольку у меня возникают трудности с перенаправлением реального IP на docker-приложения, я теперь запускаю docker traefik в режиме хост-сети.

traefik и сервисы работают. Вот моя конфигурация:

docker-compose.yaml:

---
services:
  traefik:
    image: traefik:latest
    container_name: traefik
    network_mode: host
    volumes:
      - ./traefik.yaml:/traefik.yaml
      - ./letsencrypt/:/letsencrypt/
      - /run/docker.sock:/var/run/docker.sock:ro
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.rule=Host(`frontal.cestpasla.norhere.net`)
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.service=api@internal
      - traefik.http.services.traefik-0000traefik.loadbalancer.server.port=8080
      - traefik.http.routers.traefik.tls.certresolver=myresolver
      - traefik.http.routers.traefik.middlewares=traefik-auth
      - traefik.http.middlewares.traefik-auth.basicauth.users=me:encryptedpassword

Статический yaml файл traefik:

---
api:
  dashboard:
providers:
  docker:
    exposedByDefault: false
entrypoints:
  web:
    address: 10.20.0.2:80
  websecure:
    address: 10.20.0.2:443
certificatesresolvers:
  myresolver:
    acme:
      tlschallenge: true
      email: [email protected]
      storage: /letsencrypt/acme.json
#log:
#  level: DEBUG

Проблемная строка:

      - traefik.http.services.traefik-0000traefik.loadbalancer.server.port=8080

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

2025-03-12T11:25:38Z ERR error="service \"traefik-0000traefik\" error: port is missing" container=traefik-0000traefik-09ccfe569180f81f22b135fd75082ed017ce95a7dc0ade1ab5a7e2bfbd960886 providerName=docker

Вопрос:

Если мне нужно использовать строку конфигурации для сервиса панели управления, могу ли я хотя бы выбрать имя сервиса, например, traefik_dashboard или что-то подобное? И как?

Ответ или решение

Для успешной настройки сервиса Traefik Dashboard и изменения его имени, требуется понимание нескольких ключевых аспектов работы Traefik, особенно в контексте использования Docker и network_mode: host. Ваше текущее решение вызывает некоторые проблемы с перенаправлением реальных IP-адресов к приложениям Docker, но в целом Traefik и сервисы работают, как указано в вашей конфигурации.

Теория

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

Когда вы работаете в network_mode: host, Traefik напрямую взаимодействует с сетевым стеком хоста, что существенно упрощает настройку прокси. Однако в таком режиме могут возникать сложности с именами сервисов, особенно когда Docker Compose проект находится в папке с необычным именем.

Пример

В вашей конфигурации определено, что Dashoard по умолчанию связано с внутренним API Traefik с именем сервиса traefik-0000traefik, вероятнее всего это связано с путем к проекту, который в вашем случае содержит 0000.traefik. Это повлияло на автоматическую генерацию имени сервиса в Docker. Кроме того, вы указали порт для Dashboard через маппинг на 8080, что является стандартным для Traefik Dashboard.

Ваша проблема связана с ошибкой:

service "traefik-0000traefik" error: port is missing

Эта ошибка возникает, если Traefik не может определить на какой порт направить запросы к Dashboard.

Применение

Чтобы решить проблему и изменить имя сервиса Dashboard, вы можете сделать следующее:

  1. Переименовать папку проекта или внести изменения в Docker Compose: Если имя папки содержит специфические символы или форматы (как 0000.traefik), это может повлиять на образуемые имена ресурсов. Назовите папку более нейтрально, например, traefik_project.

  2. Использование Labels: Укажите кастомное имя сервиса через лейблы. Вот пример того, как можно настроить это в docker-compose.yaml:

labels:
  - traefik.enable=true
  - traefik.http.routers.traefik-dashboard.rule=Host(`frontal.cestpasla.norhere.net`)
  - traefik.http.routers.traefik-dashboard.entrypoints=websecure
  - traefik.http.routers.traefik-dashboard.service=api@internal
  - traefik.http.services.traefik_dashboard.loadbalancer.server.port=8080
  - traefik.http.routers.traefik-dashboard.tls.certresolver=myresolver
  - traefik.http.routers.traefik-dashboard.middlewares=traefik-auth

Обратите внимание, что traefik_dashboard используется вместо traefik-0000traefik.

  1. Проверка конфигурации Traefik: Убедитесь, что в вашем traefik.yaml все настройки соответствуют требованиям, и нет конфликтующих записей.

  2. Рестарт сервисов: После внесения изменений, обязательно пересоздайте контейнеры, чтобы новые настройки вступили в силу:

docker-compose down
docker-compose up -d
  1. Проверка логов и статуса: Используйте docker logs и проверку статуса контейнера для выявления возможных проблем после внесения изменений.

Эти шаги помогут вам кастомизировать имя сервиса Dashboard и решить текущую проблему в конфигурации. Это важно для правильного ориентирования в логах и удобства администрирования.

Оцените материал
Добавить комментарий

Капча загружается...