Вопрос или проблема
В конце концов, после большого количества времени, потраченного на настройку, у меня закончились идеи. То, что должно быть довольно простым, становится довольно сложным. Надеюсь, кто-то другой сможет помочь мне найти решение.
Я пытаюсь запустить контейнер с Traefik. Вместо того чтобы помещать всю конфигурацию в файл docker-compose контейнера (docker-compose.yml), как делают многие, я размещаю конфигурацию в специальном файле (traefik.yml), так как это более гибко для меня.
У меня есть следующий файл docker-compose.yml для Traefik:
version: "3.8"
services:
traefik:
image: traefik:latest
hostname: traefik
container_name: traefik
restart: unless-stopped
command:
- "--configFile=/traefik.yml"
networks:
- traefik_gw_bridge
ports:
- 80:80
- 443:443
- 8080:8080
volumes:
- ./traefik.yml:/traefik.yml
- logs:/logs
- letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
healthcheck:
test: ["CMD", "traefik", "healthcheck", "--ping"]
interval: 10s
timeout: 6s
retries: 2
start_period: 5s
networks:
traefik_gw_bridge:
driver: bridge
external: true
volumes:
letsencrypt:
logs:
И это параметры конфигурации, которые я использую в traefik.yml:
api:
dashboard: true
insecure: false
ping:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
traefik:
address: ":8080"
http:
routers:
dashboard:
rule: "Host(`traefikdash.mydomain.com`)"
entryPoints:
- traefik
service: api@internal
middlewares:
- auth
middlewares:
auth:
basicAuth:
users:
- "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"
log:
filePath: "/logs/traefik.log"
format: json
level: DEBUG
accessLog:
filePath: "/logs/access.log"
bufferingSize: 150
certificatesResolvers:
le:
acme:
email: "[email protected]"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: "web"
Логически, в следующей части файла конфигурации я пытаюсь определить маршрутизатор для настройки базовой аутентификации с именем пользователя и паролем для панели управления:
http:
routers:
dashboard:
rule: "Host(`traefikdash.mydomain.com`)" # Замените `yourdomain.com` на ваш домен
entryPoints:
- traefik
service: api@internal
middlewares:
- auth
middlewares:
auth:
basicAuth:
users:
- "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"
Мне не удается получить желаемый результат. Когда я обращаюсь к traefikdash.mydomain.com
или traefikdash.mydomain.com:8080
или traefikdash.mydomain.com:8080/dashboard
/ traefikdash.mydomain.com/dashboard
, я просто получаю следующие ответы от Traefik и моего браузера:
- HTTP 404 Страница не найдена
- Ошибка соединения отказано
После того, как я попробовал различные типы конфигураций, я просто не могу найти много информации о том, как реализовать HTTP базовую аутентификацию для доступа к панели управления Traefik.
Ответ или решение
Проблема, с которой вы столкнулись, может быть вызвана несколькими факторами в конфигурации Traefik и доступе к Dashboard. Давайте разберем ваш docker-compose.yml
и traefik.yml
, а затем предложим некоторые изменения и рекомендации.
Анализ конфигурации
-
Правило роутера: Ваше правило для роутера
dashboard
настроено наHost(
traefikdash.mydomain.com)
, что значит, что вы должны получать доступ к Dashboard именно по этому адресу. Убедитесь, что DNS правильно настроен и указывает на ваш сервер, где запущен Traefik. -
Проблемы с портами: Вы используете
traefik
как отдельную точку входа сaddress: ":8080"
, но указали, что вашdashboard
должен быть доступен по тому же порту. Чтобы избежать путаницы, убедитесь, что вы используетеtraefikdash.mydomain.com
с портом 8080, но также проверьте, что у вас в сети нет других сервисов, использующих этот порт. -
Доступность Dashboard: Попробуйте получить доступ к Dashboard, используя путь
/dashboard
, т.е.traefikdash.mydomain.com/dashboard
. Эта URL должна сработать, если роутер правильно сконфигурирован. -
Ошибка 404: Если вы получаете ошибку 404, это может значить, что Traefik не видит роутер с заданным правилом. Проверьте логи Traefik на предмет ошибок, которые могут указать на проблемы с конфигурацией. Логи находятся в
/logs/traefik.log
.
Рекомендации по конфигурации
Обновите traefik.yml
следующим образом:
api:
dashboard: true
insecure: false
ping:
entryPoint: web
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
traefik:
address: ":8080"
http:
routers:
dashboard:
rule: "Host(`traefikdash.mydomain.com`)"
entryPoints:
- traefik
service: api@internal
middlewares:
- auth
middlewares:
auth:
basicAuth:
users:
- "admin:$apr1$Nzj4xQwY$QiXQ/eYHzKTFS.Lx.6XG71"
log:
filePath: "/logs/traefik.log"
format: json
level: DEBUG
accessLog:
filePath: "/logs/access.log"
bufferingSize: 150
certificatesResolvers:
le:
acme:
email: "[email protected]"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: "web"
Проверьте следующее:
- DNS-имя: Убедитесь, что ваше DNS-имя
traefikdash.mydomain.com
указывает на правильный IP-адрес вашего сервера. - Порты: Откройте порты 80, 443 и 8080 на вашем сервере (например, с помощью
ufw
илиiptables
). - Логи: Просмотр логов поможет диагностировать проблемы. Обратите внимание на любые ошибки, которые могут возникнуть при доступе к маршруту.
- Перезапустите контейнер: После внесения изменений в
traefik.yml
необходимо перезапустить контейнер Traefik, чтобы новые конфигурации вступили в силу:docker-compose down
иdocker-compose up -d
.
Заключение
Следуя этим рекомендациям и проверяя конфигурацию, вы должны смочь устранить проблему с доступом к Dashboard Traefik с использованием базовой аутентификации. Если проблема продолжает повторяться, вернитесь к логам и проверьте, не осталось ли каких-либо проблем с конфигурацией или доступом.