2017-07-17 249 views
1

我在服务前有一个traefik实例。该服务在端口9000上运行。但是,我希望port:8000将请求代理到此服务。两人都跑马拉松。使用不同于后端端口的前端端口

我尝试使用traefik.port标签,但它似乎假设后端也在8000上运行,当我从8000/Dashboard上的后端块进行判断时。

我也尝试过其他解决方案,如

traefik.frontend.rule=Host:traefikhost:8000没有成功

的文档是真的不清楚在这种情况下

回答

2

您需要使用traefik.port来定义后端的端口。你的情况应该是traefik.port=9000

默认Traefik将侦听端口80,只要你想它来听您需要定义地址entryPoints,像--entryPoints='Name:http Address::8000'另一个端口,在这个例子中,将监听端口8000

我会给你一个使用码头的例子,然后你可以做一个与马拉松并行。

运行Traefik为侦听端口8000

docker service create \ 
    --name traefik \ 
    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ 
    --network traefik-net \ 
    --publish 8080:8080 \ 
    --publish 8000:8000 \ 
    traefik \ 
     --entryPoints="Name:http Address::8000" \ 
     --defaultentrypoints="http" \ 
     --checknewversion=false \ 
     --docker \ 
     --docker.swarmmode \ 
     --docker.domain=mydomain.com \ 
     --docker.watch \ 
     --docker.exposedbydefault=false \ 
     --web \ 
     --loglevel=DEBUG 

后台侦听端口9000

docker service create \ 
    --name myweb \ 
    --mount type=bind,source=$PWD/httpd.conf,target=/usr/local/apache2/conf/httpd.conf \ 
    --label traefik.port=9000 \ 
    --label traefik.enable=true \ 
    --network traefik-net \ 
    httpd 

测试,检查Traefik api

$ curl -s "http://localhost:8080/api" | jq . 
{ 
    "docker": { 
    "backends": { 
     "backend-myweb": { 
     "servers": { 
      "server-myweb-1": { 
      "url": "http://10.0.0.5:9000", 
      "weight": 0 
      } 
     }, 
     "loadBalancer": { 
      "method": "wrr" 
     } 
     } 
    }, 
    "frontends": { 
     "frontend-Host-myweb-mydomain-com": { 
     "entryPoints": [ 
      "http" 
     ], 
     "backend": "backend-myweb", 
     "routes": { 
      "route-frontend-Host-myweb-mydomain-com": { 
      "rule": "Host:myweb.mydomain.com" 
      } 
     }, 
     "passHostHeader": true, 
     "priority": 0, 
     "basicAuth": [] 
     } 
    } 
    } 
} 

现在要求你的后台服务:

$ curl -H "Host: myweb.mydomain.com" "http://localhost:8000/" 
<html><body><h1>It works!</h1></body></html> 
+0

我注意到你正在改变traefik本身的配置。这是否意味着我无法控制服务本身的前端端口? – Ahmadposten

+0

正如你所看到的'api'输出,前端不处理端口,谁是Traefik本身。正如我所知,你不能让Traefik动态监听端口。事实上,这正是我们为什么使用Traefik,为了避免动态处理端口的原因,我们定义了标准端口,它反向代理端口和从后端动态创建的IP。 – Azize