docker - 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"
现在,我的问题是 - 如果我的容器 EXPOSE 5000 和 5001 一样,我该如何设置一个新的子域,以便我可以允许正常的网络流量以及gRPC
?
以便:
HTTP1 https://api.example.com -> container:5000
HTTP2 https://api-grpc.example.com -> container:5001
如果有更好的方法来达到同样的效果,请告诉我。gRPC
由于严格的要求,我不能在与网络流量相同的端口上监听HTTP2
,我宁愿不使用gRPC-web
.
解决方案
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
推荐阅读
- function - 为什么当我直接输出从
我该如何阻止它? - wordpress - 使用另一个网站到达 wordpress 管理页面
- azure - 如何获取在应用程序网关上 ping 我的应用程序的所有 IP 地址
- javascript - 将 vuex 模块持久化到 nativescript-vue 中的存储中
- python - 有没有更好的验证密码的方法?
- visual-studio-code - Visual Studio Code Chrome 调试扩展打开一个新的 Chrome 页面,而不是在 VSC GUI 中调试
- c# - 如何使用基于 TabControl 中选定选项卡的特定类?
- c# - 如何制作枚举值和整数的二维数组
- python - 将一个列表中的每个项目拆分为具有键值对的二维列表
- mysql - MySQL 使用引用连接表