traefik — предоставляет дополнительный внутренний порт через новый поддомен

#docker #docker-compose #traefik

Вопрос:

Я написал приложение .NET API, которое прослушивает два порта:

  • 5000 для регулярных HTTP-запросов (HTTP1)
  • 5001 для gRPC (HTTP2)

Я развертываю свои изображения docker-compose с помощью меток:

 labels:
  - "traefik.enable=true"
  - "traefik.http.routers.myApi.rule=Host(`api.example.com`)"
  - "traefik.http.routers.myApientrypoints=websecure"
  - "traefik.http.routers.myApitls.certresolver=myresolver"
 

Теперь мой вопрос: если мой контейнер содержит 5000, а также 5001, как мне настроить новый поддомен, чтобы я мог разрешать регулярный веб — трафик, а также gRPC ?

Так что:

 HTTP1 https://api.example.com -> container:5000
HTTP2 https://api-grpc.example.com -> container:5001
 

Если есть лучший способ добиться того же, пожалуйста, дайте мне знать. Я не могу gRPC прослушивать тот же порт, что и веб-трафик, из-за строгих HTTP2 требований, и я бы предпочел не использовать gRPC-web .

Ответ №1:

 labels:
  - traefik.http.routers.http-router.rule=Host(`api.example.com`)
  - traefik.http.routers.http-router.service=http-service
  - traefik.http.services.http-service.loadbalancer.server.port=5000
  - traefik.http.routers.grpc-router.rule=Host(`api-grpc.example.com`)
  - traefik.http.routers.grpc-router.service=grpc-service
  - traefik.http.services.grpc-service.loadbalancer.server.port=5001
  - traefik.http.services.grpc-service.loadbalancer.server.scheme=h2c
 

Ссылка: Указание более одного маршрутизатора и службы для каждого контейнера

Комментарии:

1. Прекрасный и лаконичный ответ, спасибо! Просто не хватало «traefik.http.services.grpc-service.loadbalancer.server.scheme=h2c», и теперь это работает!

2. @TroelsLarsen отлично! Я добавлю это в ответ