#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 отлично! Я добавлю это в ответ