【问题标题】:Traefik won't route pathTraefik 不会路由路径
【发布时间】:2020-09-05 18:34:54
【问题描述】:

为了测试 Traefik,我制作了一个类似 whoami 的应用,在 Traefik 的 getting states 文档中显示,它以友好的消息响应对 '/' 和 '/sub' 端点的 GET HTTP 请求。我已经验证,改变 whoami 以通过不同的路径来回答确实有效,但由于某种原因,即使我的配置与 whoami 类似,Traefik 也不会解析我的应用程序。我知道首先想到的是,如果我以与 whoami 相同的方式配置我的应用程序,那么问题将出在我的应用程序上,但 curl 确实确认我可以从 Traefik 的容器访问我的应用程序,所以它让我想知道 Traefik 中是否包含 whoami 应用程序可以工作而我的应用程序不能工作的东西。我知道这是一个愚蠢的假设,但我看不出我的应用程序除了响应 HTTP Get 请求还需要做什么。您可以查看该应用程序以及我如何将所有内容都提供给here,只需查看build.sh。我解决的另一个问题是在集群模式下配置 Traefik,我必须创建一个 Traefik 图像,而不是将配置作为参数传递。主要配置显示在下面的代码中,traefik_rp 只是一个带有 tom 文件的 traefik 图像,将其设置为 sarmMode。

version: '3'

services:
  traefik:
    # The official v2 Traefik docker image
    image: traefik_rp
    # Enables the web UI and tells Traefik to listen to docker
    command: --api.insecure=true --providers.docker
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
      
  simple_app:
    image: simpleapp
    environment: 
      ASPNETCORE_ENVIRONMENT: Release
    labels:
      - "traefik.http.routers.simple_app_service.rule=Path(`/simpleapp`)"

  whoami:
    # A container that exposes an API to show its IP address
    image: containous/whoami
    labels:
      - "traefik.http.routers.whoami.rule=Path(`/`)"

最好的问候。

【问题讨论】:

  • 您可以将--log.level=DEBUG 添加到traefik 服务的command 行,并在尝试请求时共享配置日志和任何日志。

标签: .net docker configuration traefik swarm


【解决方案1】:

我检查了文档太简单了,但尝试将其添加到标签中:

   labels:
  - traefik.enable=true
  - traefik.frontend.entryPoints=http,https

【讨论】:

  • 嗨 Karel,感谢您的快速回复,它仍然收到“HTTP ERROR 404”。这真的很奇怪,为什么 whoami 应用程序不需要我尝试实现的应用程序可能缺少的任何其他配置。
  • 我不知道你的“simpleapp”看起来如何。也许您需要正确映射端口并设置 traefik 网络。
  • 最初我已将端口号配置标签添加到我的应用程序中,因为它正在侦听默认 (80) 之外的另一个端口,但只是为了“相同”地将我的应用程序设置为 whoami 应用程序,我已经更改了它还要监听端口 80 并删除 compose 文件中的端口标签。所以是的,它已正确映射。
【解决方案2】:

Traefik 不会从 HTTP 请求中清除路由,它会以接收到的相同方式传递给应用程序。因此,您的应用程序必须响应在 Traefik 上配置的相同路由。 whoami 应用程序可能被编程为吐出 HTTP 响应,而不管访问的路由如何,而我编写的应用程序只回答根 ('/') 路径。

【讨论】:

    【解决方案3】:

    尝试PathPrefix 而不是Path。否则只会匹配 /simpleapp。你想要/simpleapp/simpleapp//simpleapp/sub

      simple_app:
        image: simpleapp
        environment: 
          ASPNETCORE_ENVIRONMENT: Release
        labels:
          - "traefik.http.routers.simple_app_service.rule=PathPrefix(`/simpleapp`)"
    

    正如其他答案所建议的那样,确保您的应用程序也处理 /simpleapp 前缀。否则需要使用StripPrefix

    【讨论】:

    • 这个救了我的命 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多