【问题标题】:request forwarding on specific port with traefik(v2) router使用 traefik(v2) 路由器在特定端口上请求转发
【发布时间】:2020-01-17 06:49:27
【问题描述】:

我正在使用 traefik 版本 2(或 2.x),我想使用 traefik 路由器将所有请求从端口 80 转发到不同的端口,例如 8081。所以像http://localhost/xx 这样的请求将被转发到http://localhost:8081/xx URL。

我是 traefik 的新手,我正在使用 docker 进行此配置。 下面是我的 docker-compose.yml 文件配置。配置此 traefik 仪表板后,会在 http://localhost:8080/dashboard/#/ URL 上加载,但请求转发不起作用。

version: "3"

services:
  traefik:
    image: "traefik:v2.1.0"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.services.whoami.loadbalancer.server.port=8081"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.whoami.rule=Host(`localhost`)"

对此的任何帮助将不胜感激。

【问题讨论】:

  • 在最后一行,您定义了一个主机。它是干什么用的?如果您尝试以这种方式提供 traefik 端点,则只需将 traefik 放在那里,而不是 localhost。
  • 我使用 localhost 作为我的主机。

标签: docker traefik


【解决方案1】:

您需要将您的服务端口映射到8081

这是一个完整的工作/测试示例,您可以在其中访问 whoami
通过转到http://whoami.docker.local:8081http://whoami.docker.local

version: "3"

services:
    traefik:
        image: traefik
        command:
            - --api.insecure=true
            - --providers.docker=true
        ports:
            - "80:80"
            - "8080:8080"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
        labels:
            - traefik.http.routers.api.rule=Host(`traefik.docker.local`)
            - traefik.http.routers.api.service=api@internal

    whoami:
        image: containous/whoami
        ports:
            - "8081:80"
        labels:
            - traefik.http.routers.whoami.rule=Host(`whoami.docker.local`)
            - traefik.http.routers.whoami.service=whoami@docker
            - traefik.http.services.whoami.loadbalancer.server.port=80

根据您的要求,它适用于端口 808081

root@d:~# lsof -i :80,8081

COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
docker-pr 28208 root    4u  IPv6 51666675      0t0  TCP *:tproxy (LISTEN)
docker-pr 28265 root    4u  IPv6 51671715      0t0  TCP *:http (LISTEN)

但如果您解释为什么要访问:8081,可能会更容易提供帮助,
因为使用了traefik,所以我们不必进行那种重定向。

【讨论】:

  • 谢谢。但仍然无法通过此配置获得预期的行为。
  • @DhavalGoti 编辑了我的答案。添加了完整的工作示例。
  • 我正在使用 Springboot 应用程序进行 url 转发,而不是在 8081 端口上运行的包含/whoami 网络服务器。因此,当我点击localhost/x 之类的 URL 时,spring 应用程序会根据提供的 x 值重定向。使用此配置,当我点击 URL localhost/x 时,我仍然会收到“错误网关”。
  • 在本例中,http://whoami.docker.local:8081 不会通过 traefik 路由。
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多