Traefik 不会路由路径

Traefik won't route path

为了测试 Traefik,我制作了一个应用程序,如 Traefik 的说明 文档中所示的 whoami,它以友好的消息响应对“/”和“/”的 GET HTTP 请求子端点。我已经验证更改 whoami 以通过不同的路径回答确实有效,但出于某种原因,Traefik 不会解析我的应用程序,即使我已经像对 whoami 一样配置它。我知道首先想到的是,如果我以与 whoami 相同的方式配置我的应用程序,那么问题将出在我的应用程序上,但 curl 确实确认我可以从 Traefik 的容器访问我的应用程序,所以它得到了我想知道 Traefik 中是否内置了 whoami 应用程序可以工作而我的应用程序不能工作的东西。我知道这是一个愚蠢的假设,但我看不出我的应用程序除了响应 HTTP Get 请求之外还需要做什么。您可以看到该应用程序以及我如何调出所有内容 here,只需要查看 build.sh。我解决的另一个问题是在 swarm 模式下配置 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(`/`)"

此致。

我检查文档的时间太短了,但请尝试将其添加到标签中:

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

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

尝试 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.