簡介python
Traefik是一個與Nginx、HAProxy有些類似的HTTP反向代理服務器,兼有負載均衡的功能。Nginx和HAProxy都有一個相同的問題就是,後端服務(一般稱之爲upstream或backend)變化(是否能正常工做、上線、下線、擴展)時,不容易動態更新Nginx和HAProxy的配置文件和重載服務,儘管有一些相似於Registrator, Consul 和Consul-Template 這樣的工具能夠來作這樣的事。git
圖1:微服務常見的一種請求分發圖。github
與Nginx、HAProxy不一樣的是,Traefik更適合須要服務發現和服務註冊的應用場景。例如,Traefik與Docker相結合很是容易,只須要指定label便可(雖然能夠使用docker run指定label,但更推薦使用docker-compose.yml指定)。演示的例子直接能夠參考官方網站,也能夠參考下面的例子,很是簡單並通俗易懂。須要指出的是Traefik並非只能與Docker相結合,Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Amazon ECS, Rest API, file...均可以。具體的能夠參考官方網站和Google it。web
圖2:Traefik是如何管理請求的docker
一個簡單的演示:apache
1.建立Traefik服務,能夠使用Docker也能夠使用命令行的方式。後端
注意:不熟悉docker-compose的能夠先學習一下docker-compose的語法和應用,或者直接忽略它,再根據下文的相對目錄結構、文件和命令建立。服務器
docker-compose.yml 文件內容以下:負載均衡
version: '2' services: traefik: p_w_picpath: traefik:latest restart: unless-stopped command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG networks: - webgateway ports: - "80:80" - "8080:8080" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock - /dev/null:/traefik.toml networks: webgateway: driver: bridge
2.使用whoami應用做爲一個簡易的HTTP Web服務:less
docker-compose.yml 文件內容以下:
version: '2' services: whoami: p_w_picpath: emilevauge/whoami networks: - web labels: - "traefik.backend=whoami" - "traefik.frontend.rule=Host:whoami.docker.localhost" networks: web: external: name: traefikself_webgateway
3.經過docker-compose logs traefik命令查看Traefik日誌:
4.使用docker-compose scale whoami=3 命令擴展3個whoami應用,觀察訪問狀況,經過CURL結果能夠發現默認是輪詢的wrr。
5.Traefik有一個Dashboard Web UI,能夠經過網頁瞭解當前Traefik中的運行狀況和節點的健康狀態。
更多參考:
官方網站(英文):https://docs.traefik.io/
使用Docker和Traefik構建微服務(英文) http://blog.hypriot.com/post/microservices-bliss-with-docker-and-traefik/
tag:traefik,docker,微服務
--end--