Я пытаюсь настроить Traefik 2 для пересылки трафика с нескольких маршрутов во внутренние службы, такие как Portainer. Я пробовал, вероятно, все, и все же при запросе маршрута я получаю Gateway Timeout в лучшем случае.
Может кто-то направить меня в правильном направлении?
Это Traefik 2docker-compose.yaml Я использую:
version: "3.3"
services:
traefik:
container_name: traefik
image: traefik:v2.0
command:
- --global.sendanonymoususage=false
- --log.level=debug
- --log.format=common
- --providers.docker
- --providers.docker.exposedbydefault=false
- --api
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
- --entrypoints.portainer.address=:9000
- --accesslog.format=common
- --accesslog.filepath=access.log
- --certificatesresolvers.letsencrypt.acme.caserver=https://acme-v02.api.letsencrypt.org/directory
- --certificatesresolvers.letsencrypt.acme.email=someone@gmail.com
- --certificatesresolvers.letsencrypt.acme.storage=/acme.json
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./acme.json:/acme.json"
- "./log/access.log:/access.log"
ports:
- "80:80"
- "443:443"
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`command.domain.com`)"
- "traefik.http.routers.traefik.entrypoints=https"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.tls=true"
- "traefik.http.routers.traefik.tls.certresolver=letsencrypt"
- "traefik.http.routers.http-catchall.entrypoints=http"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.routers.traefik.middlewares=admin"
- "traefik.http.middlewares.admin.basicauth.users=user:$$apr1$$q8eZFHjF$$Fvmkk//V6Btlaf2i/ju5n/"
Панель инструментов Traefik прекрасно загружается и работает, но когда я запускаю службу, я хочу получить доступ через command.domain.com / portainer ( контейнер прослушивает порт 9000 ) к нему невозможно получить доступ. Portainer docker-compose.yaml Я использую:
version: "3.3"
services:
portainer:
container_name: portainer
image: portainer/portainer
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "./data:/data"
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.entrypoints=http"
- "traefik.http.routers.portainer.rule=Host(`command.domain.com`) && Path(`/portainer`)"
- "traefik.http.middlewares.portainer-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.portainer-redirect.redirectscheme.permanent=true"
- "traefik.http.routers.portainer.middlewares=portainer-redirect"
- "traefik.http.routers.portainer-ssl.entrypoints=https"
- "traefik.http.routers.portainer-ssl.rule=Host(`command.domain.com`) && Path(`/portainer`)"
- "traefik.http.routers.portainer-ssl.tls=true"
- "traefik.http.routers.portainer-ssl.tls.certresolver=letsencrypt"
- "traefik.http.routers.portainer-ssl.service=portainer-ssl"
- "traefik.http.services.portainer-ssl.loadbalancer.server.port=9000"
restart: always
Из того, что я понял и вижу, нет необходимости объявлять сети и порты в yamls. Это правда?
Редактировать
Хорошо, есть некоторые разработки:
Я заставил это работать, но несколько. Префикс пути должен быть удален, и официальная документация Traefik гласит: https://dzwonsemrish7.cloudfront.net/items/2o0K3K1s1f3p3s113a0W/Image%202019-10-29%20at%209.55.55%20PM.png
Я использую эти ярлыки и приложение загружается, как и ожидалось:
- "traefik.enable=true"
- "traefik.http.routers.portainer.entrypoints=http"
- "traefik.http.routers.portainer.rule=Host(\command.domain.com`) && PathPrefix(`/portainer/`)"
- "traefik.http.routers.portainer.middlewares=https-redirect,portainer-stripprefix"
- "traefik.http.middlewares.portainer-stripprefix.stripprefix.prefixes=/portainer/"
- "traefik.http.routers.portainer-secure.entrypoints=https"
- "traefik.http.routers.portainer-secure.rule=Host(`command.domain.com`) && PathPrefix(`/portainer/`)"
- "traefik.http.routers.portainer-secure.middlewares=traefik-auth,portainer-stripprefix"
- "traefik.http.routers.portainer-secure.tls=true"
- "traefik.http.routers.portainer-secure.tls.certresolver=letsencrypt"
- "traefik.http.routers.portainer.service=portainer"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
- "traefik.docker.network=proxy"
Теперь у меня появилась идея использоватьодин маршрут на контейнер, так что, в основном, / traefik, / portainer, / awx, / adminer и т. д., и первый застрял, поскольку Traefik манипулирует заголовком HTTP Content-Type , устанавливая все неявно заданные заголовки в text / plain и, делая это, он ломает множество интерфейсов, созданных из CSS и JS, одним из которых является панель мониторинга Traefik.
Таким образом, маршрут панели мониторинга загружается, но почти все ресурсы представляют собой простой текст ибраузер не может использовать их для макета. Есть идеи?