Я провел еще несколько исследований, касающихся Traefik V2. Решение для нескольких конечных точек заключается в явном названии ваших сервисов. Вот пример:
whoami:
image: "containous/whoami"
container_name: "simple-service"
labels:
- "traefik.enable=true"
- "traefik.http.routers.whoami.rule=Host(`whoami.docker`)"
- "traefik.http.routers.whoami.entrypoints=web"
- "traefik.http.routers.whoami.service=whoami"
- "traefik.http.services.whoami.loadbalancer.server.port=80"
- "traefik.http.routers.altwhoami.rule=Host(`alt.docker`)"
- "traefik.http.routers.altwhoami.entrypoints=web"
- "traefik.http.routers.altwhoami.service=altwhoami"
- "traefik.http.services.altwhoami.loadbalancer.server.port=80"
Итак, чтобы исправить вашу реализацию traefik, вам нужно добавить traefik.http.routers.whoami.service = service-name метки.
Надеюсь, это поможет.
Редактировать:
Для маршрутизации AMQP через traefik необходим TCP-маршрутизатор. Я создал небольшой рабочий пример для rabbitmq:
version: "3.3"
services:
traefik:
image: "traefik"
container_name: "traefik"
command:
- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.rabbitmq.address=:5672"
ports:
- "80:80"
- "8080:8080"
- "5672:5672"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
rabbitmq:
image: "rabbitmq:management-alpine"
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.docker`)"
- "traefik.http.routers.rabbitmq.entrypoints=web"
- "traefik.http.routers.rabbitmq.service=rabbitmq"
- "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
- "traefik.tcp.routers.ingress.rule=HostSNI(`*`)"
#- "traefik.tcp.routers.ingress.rule=HostSNI(`ingress.docker`)"
- "traefik.tcp.routers.ingress.entrypoints=rabbitmq"
#- "traefik.tcp.routers.ingress.tls=true"
#- "traefik.tcp.routers.ingress.tls.passthrough=true"
- "traefik.tcp.services.ingress.loadbalancer.server.port=5672"
Это перенаправит трафик TCP c через порт 5672 через traefik в ваш контейнер (убедитесь, что вы правильно настроили конфигурацию traefik).
Вы можете заметить довольно открытое правило HostSNI(*)
. Если вы хотите ограничить это правило одним хостом / доменом, вам нужно включить поддержку TLS в rabbitmq, чтобы traefik правильно отфильтровал эти запросы.
Проверьте закомментированные строки в информации о конвертации трафик в поддержку tls. Вы можете либо разрешить traefik обрабатывать TLS, либо напрямую передать его в rabbitmq.