您好,我正在使用 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 主机创建了一个 treafik.local.com 的主机条目。 当我尝试浏览 http://traefik.local.com/emailhandler-api/ 我得到 404
如果我在没有路径的情况下尝试,服务正在运行。它只是主机和路径组合,似乎不起作用。