簡體   English   中英

帶有docker后端的traefik反向代理 - 在traefik的配置文件中配置前端規則而不是通過容器標簽

[英]traefik reverse-proxy with docker backend - configure frontend rules in traefik's config file and not via container label

為了在一個Docker容器前面使用traefik作為反向代理,其動態IP地址可能會隨着時間而改變,traefik附帶一個docker 后端 我設置的所有示例都遵循相同的模式:

首先,啟動traefik在docker模式,而無需額外的配置文件,啟動主機網絡模式(可選,讓traefik可以看到,如果需要在主機上的所有泊塢窗網),並安裝多克爾Unix套接字使traefik可以聽容器啟動和停止。

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug

然后,啟動另一個容器並至少設置以下標簽

  • traefik.backend:“some-backend-name”
  • traefik.frontend.rule:“主持人:localhost;方法:GET”(或者你的規則是什么)
  • traefik.port:80(或容器在內部暴露的任何端口)

例:

docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx

然后,執行curl localhost ,可以在traefik容器的日志中看到它接收了請求並將其路由到NGINX容器。

到目前為止,這么好......但是,我不喜歡我必須在應用程序本身(我的docker-中)配置我的反向代理轉發規則(例如轉發主機:some.host.name到容器xxx)這一事實。撰寫文件設置容器,標簽等通常位於)。 相反,我想將其與應用程序分開,並將其配置為traefik配置的一部分。

這有可能嗎? 我嘗試的是從示例nginx容器中traefik.frontend.rule標簽,而是為traefik安裝以下配置文件:

[frontends]
  [frontends.frontend1]
  backend = "some-backend-name"
    [frontends.frontend1.routes.test_1]
    rule = "Host: localhost; Method: GET"

因此, traefik的啟動命令變為:

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug

但是,這似乎沒有使用來自nginx容器的后端標簽附加配置文件中的前端規則。 curl localhost現在返回404 / Not found錯誤。

watch flag似乎只能在rule.toml第一次更改的條件下工作。

在您的情況下,我建議您編寫一個服務來更新您在etcd或zookeeper中的規則。 服務讀取etcd更改並更新etcd中的traefik配置。

這可能是一個操作順序問題。 在config( debug = true )中啟用調試日志記錄顯示traefik首先解析配置文件前端規則,然后才根據docker中運行的內容生成前端和后端。

這意味着當創建配置的前端時,docker后端不存在,並且它會拋出並出錯。

一種解決方案是將規則配置放在一個單獨的文件中(例如,docs中顯示的 rules.toml ),並將watch = true指令添加到您的配置中。 這意味着您定義的前端規則將在生成docker的后端后更新。

我們應該為此提交一個錯誤,因為它並不是完全合乎需要的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM