首页 > 解决方案 > traefik - 通过新子域公开辅助内部端口

问题描述

我编写了一个侦听两个端口的 .NET API 应用程序:

我正在通过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.

标签: dockerdocker-composetraefik

解决方案


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

参考:为每个容器指定多个路由器和服务


推荐阅读