使用 traefik 2 在同一容器上的多个路由器和服务

nev*_*ess 7 gitlab docker traefik

我目前正在尝试让 traefik 在单个容器上使用多个路由器和服务,但它不起作用,我不知道这是否是有意为之。

为什么?

具体来说,我正在使用 gitlab 综合容器,并希望在综合容器内使用/访问多个服务,因为 gitlab 不仅提供“gitlab 网站”。

我尝试了什么?

我只是尝试通过标签将另一个路由器添加到我的 docker compose 文件中

这就是我所拥有的:

labels:
  - "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
  - "traefik.http.services.gitlab.loadbalancer.server.port=80"
Run Code Online (Sandbox Code Playgroud)

这就是我要的:

labels:
  - "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
  - "traefik.http.services.gitlab.loadbalancer.server.port=80"
  - "traefik.http.routers.registry.rule=Host(`registry.gitlab.example.com`)"
  - "traefik.http.services.registry.loadbalancer.server.port=5000"
Run Code Online (Sandbox Code Playgroud)

这是行不通的,因为 traefik 可能对路由到哪个服务的内容感到困惑,而且我找不到一种机制可以告诉 traefik 在这种情况下确切地告诉 traefik 哪个路由器转到哪个服务。

这甚至可能还是我只是缺少一点traefik魔术?

nev*_*ess 18

我找到了我的问题的解决方案。

确实有一点我错过了:

  • traefik.http.routers.myRouter.service=myService

使用此标签,我可以将路由器指向特定服务,并且应该能够向一个容器添加多个服务:

labels:
  - "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
  - "traefik.http.routers.gitlab.service=gitlab"
  - "traefik.http.services.gitlab.loadbalancer.server.port=80"
  - "traefik.http.routers.registry.rule=Host(`registry.gitlab.example.com`)"
  - "traefik.http.routers.registry.service=registry"
  - "traefik.http.services.registry.loadbalancer.server.port=5000"
Run Code Online (Sandbox Code Playgroud)

这里每个路由器都显式地指向一个特定的服务,该服务通常是隐式发生的。

  • 您能详细说明一下吗?我也有同样的情况。我很难找到您在第一条消息中尝试的内容与此消息之间的联系。您能否给我一个运行两个服务的容器的示例,就像您的消息中一样?谢谢 (2认同)