traefik簡介

ArthurClear 8年前發布 | 18K 次閱讀 traefik 微服務

traefik(https://traefik.io/)是一款開源的反向代理與負載均衡工具。它最大的優點是能夠與常見的微服務系統直接整合,可以實現自動化動態配置。目前支持Docker, Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper, BoltDB, Rest API等等后端模型。

traefik的具體模型如下: traefik

為什么選擇traefik?

事實上在之前我對LB的選擇一直更傾向于使用HAProxy。但是選擇traefik主要是有以下特點讓我們決定使用:

  • Golang編寫,單文件部署,與系統無關,同時也提供小尺寸Docker鏡像。
  • 支持Docker/Etcd后端,天然連接我們的微服務集群。
  • 內置Web UI,管理相對方便。
  • 自動配置ACME(Let's Encrypt)證書功能。
  • 性能尚可,我們也沒有到壓榨LB性能的階段,易用性更重要。

除了這些以外,traefik還有以下特點:

  • Restful API支持。
  • 支持后端健康狀態檢查,根據狀態自動配置。
  • 支持動態加載配置文件和graceful重啟。
  • 支持WebSocket和HTTP/2。

除了上面提到的微服務化集群支持,一些AB測試階段也可以通過frontend的路由特性進行動態分配,當然這些對HAProxy等軟件都是標準支持的。

traefik的配置

traefik支持的配置方式支持文件方式進行配置,這個也是比較常見的配置方式,我們這里簡單介紹一下。

traefik支持的toml方式進行配置,官方提供了一個示例的traefik.toml文件用于演示配置。除此之外,后端服務一般是采用單獨文件進行存儲,比如演示配置中指定的rules.toml。

具體一個例子,如果我們有兩個后端,127.0.0.1:7727,127.0.0.1:7728,我們希望所有的Chrome用戶都可以訪問127.0.0.1:7727,其它人都訪問127.0.0.1:7728,這樣這個rules.toml應該如何配置呢?

# rules.toml
[backends]
  [backends.backend1]
    [backends.backend1.servers.server1]
    url = "http://127.0.0.1:7727"
  [backends.backend2]
    [backends.backend2.servers.server1]
    url = "http://127.0.0.1:7728"


[frontends]
  [frontends.frontend1]
  entrypoints = ["http"]
  backend = "backend1"
    [frontends.frontend1.routes.test_1]
    rule = "HeadersRegexp: User-Agent, Chrome"
  [frontends.frontend2]
  entrypoints = ["http"]
  backend = "backend2"

首先定義兩個后端服務,每個后端服務可以支持多個服務單元,這里我們只有一個。前端frontends用于匹配請求落到哪個后端服務中。我們這里定義一個規則test_1,設置規則為根據HTTP請求頭部正則進行分配:如果UserAgent中包含Chrome字樣,則訪問到127.0.0.1:7727。匹配的規則方式包含了以下幾種方式:

  • Headers/HeaderRegexp: 頭部匹配方式,分別對應按值和正則表達式兩種方式。
  • Host/HostRegexp: 按照請求主機名進行匹配,與頭部信息相似。
  • Method: 按照請求方式區分。
  • Path/PathStrip/PathPrefix/PathPrefixStrip: 按照路徑區分后端。

traefik與微服務集群

這個有人已經寫過相關的文章了,我在這里簡單推薦一下: Microservices Bliss with Docker and Traefik 中文譯文)。我就不做額外的描述了。

 

來自:https://ipfans.github.io/2016/08/introduce-traefik-load-balance/

 

 本文由用戶 ArthurClear 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!