Я хотел бы обслуживать службу создания докеров через traefik с переадресацией портов. У меня было много попыток, и лучшее, чего я смог достичь, описано ниже:
Сначала я создаю две сети:
docker network create frontend # To expose traefik
docker network create backend # To bind backend services
Конфигурация traefik примерно такая (разработка, дашборд включен на :8080
):
version: "3.6"
services:
proxy:
image: traefik:latest
restart: unless-stopped
command:
- "--log.level=DEBUG"
- "--api"
- "--api.dashboard"
- "--api.insecure"
- "--providers.docker"
- "--providers.docker.exposedbydefault=false"
# Service entrypoint:
- "--entrypoints.lora-server.address=:8090"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
labels:
- "traefik.enable=true"
- "traefik.docker.network=frontend"
- "traefik.http.routers.traefik.entrypoints=traefik"
- "traefik.http.routers.traefik.service=api@internal"
networks:
- backend
- frontend
ports:
- "8080:8080"
- "8090:8090"
networks:
frontend:
external: true
backend:
external: true
Серверная служба описана здесь (форк от ChripStack, но это может быть что угодно):
version: "3"
services:
# [...]
chirpstack-application-server:
image: chirpstack/chirpstack-application-server:3
networks:
- backend
volumes:
- ./configuration/chirpstack-application-server:/etc/chirpstack-application-server
labels:
- "traefik.enable=true"
- "traefik.docker.network=backend"
- "traefik.http.routers.chirpstack.entrypoints=lora-server"
- "traefik.http.routers.chirpstack.rule=Host(`{host:}`)"
- "traefik.http.routers.chirpstack.service=chirpstack-application-server@docker"
- "traefik.http.services.chirpstack-application-server.loadbalancer.server.port=8080"
# [...]
networks:
backend:
external: true
Служба также изначально работает на :8080
, и я хотел бы получить к ней доступ на :8090
через traefik.
Когда я запускаю оба приложения, traefik регистрирует новую службу и не жалуется (ни ошибок, ни предупреждений, поток кажется завершенным, по крайней мере, из интерфейса панели инструментов).
time="2020-07-30T11:47:47Z" level=debug msg="Creating middleware" middlewareType=Pipelining serviceName=chirpstack-application-server@docker entryPointName=lora-server routerName=chirpstack@docker middlewareName=pipelining
time="2020-07-30T11:47:47Z" level=debug msg="Creating load-balancer" entryPointName=lora-server routerName=chirpstack@docker serviceName=chirpstack-application-server@docker
time="2020-07-30T11:47:47Z" level=debug msg="Creating server 0 http://192.168.112.9:8080" entryPointName=lora-server routerName=chirpstack@docker serviceName=chirpstack-application-server@docker serverName=0
time="2020-07-30T11:47:47Z" level=debug msg="Added outgoing tracing middleware chirpstack-application-server@docker" middlewareName=tracing entryPointName=lora-server routerName=chirpstack@docker middlewareType=TracingForwarder
Но я не смог получить доступ к сервису, при попытке подключиться http://host:8090
получаю ошибку 404.
Насколько я понимаю, кажется, что traefik не знает, как он должен завершить поток между двумя сетями: http://frontend:8090 -> http://backend:8080
(потому что я нигде не упоминал об этом).
Что мне нужно изменить в моей конфигурации, чтобы она заработала? Как я могу указать traefik, что он должен направлять HTTP-трафик с frontend:8090
на backend:8080
? Ваша помощь очень ценится.