Traefik 基于路径的路由抛出 404

问题描述 投票:0回答:0

您好,我正在使用 Nomad / Consul 和 Traefik 堆栈。 我使用 Nomad 作为服务配置了 traefik 堆栈,如下所示:

job "traefikv3" {
  datacenters = ["dc1"]
  type        = "system"

  group "traefik" {
    count = 1

    network {
      port  "http"{
         static = 80
      }
      port  "admin"{
         static = 8081
      }
    }

    service {
      name = "traefik-http"
      provider = "nomad"
      port = "http"
    }

    task "server" {
      driver = "docker"
      config {
        image = "registry.local/traefik:v2.9"
        network_mode = "host"
        ports = ["admin", "http"]
        args = [
          "--api.dashboard=true",
          "--api.insecure=true", ### For Test only, please do not use that in production
          "--entrypoints.web.address=:${NOMAD_PORT_http}",
          "--entrypoints.traefik.address=:${NOMAD_PORT_admin}",
          "--providers.consulcatalog=true",
          "--providers.consulcatalog.exposedByDefault=false",
          "--providers.consulcatalog.endpoint.address=http://<CONSUL ENDPOINT>:8500",
          "--providers.consulcatalog.prefix=traefik",
          "--providers.consulcatalog.defaultrule=Host(`traefik.local.com`)",
          "--log.filePath=/var/log/traefik//traefik.log",
          "--log.level=DEBUG"
        ]
      }
    }
  }
}  

我看到 traefik 在我所有的 Nomad 代理主机上运行,如下所示,我可以浏览每个

我现在在 Nomad 中创建服务,定义如下:

job "email-handler-api" {
  datacenters = ["dc1"]

  group "api" {
     scaling {
      min     = 1
      max     = 10
      enabled = true
}
spread {
attribute = "${node.unique.id}"
}
    network {
      port  "http"{
        to = 80
      }
    }
    service {
      name = "emailhandler-api"
      port = "http"

      tags = [
        "traefik.enable=true",        
        "traefik.http.routers.http.rule=Path(`/emailhandler-api`)",
      ]
      check {
        type     = "http"
        path     = "/index.html"
        interval = "10s"
        timeout  = "5s"
      }
    }

    task "server" {
      env {
        PORT    = "${NOMAD_PORT_http}"
        NODE_IP = "${NOMAD_IP_http}"
        ASPNETCORE_ENVIRONMENT = "dev"
        HashiVaultRoleId_arch = "e94158b9-1709-3aeb-d08a-2c010871eecd"
      }

      driver = "docker"

      config {
        image = "registry.local/emailhandler.webapi:0.1.9"
        ports = ["http"]
        force_pull = true
      }
    }
  }
}

我在领事那里看到服务很健康。

我可以直接从游牧代理 IP 和随机分配的端点浏览。 IP端口和服务工作正常

Traefik 还显示服务已注册好

然后我为其中一个 traefik 主机创建了一个 treafik.local.com 的主机条目。 当我尝试浏览 http://traefik.local.com/emailhandler-api/ 我得到 404

如果我在没有路径的情况下尝试,服务正在运行。它只是主机和路径组合,似乎不起作用。

traefik consul
© www.soinside.com 2019 - 2024. All rights reserved.