Træfɪk

QQ群:136092269 Traefik中国

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

概览

假设你已经在你的基础设施上部署了一堆微服务。你可能使用了一个服务发现系统(例如 etcd 或 consul)或者一个资源管理框架(swarm,Mesos/Marathon)来管理所有这些服务。 如果你想让你的用户去从互联网访问你的某些微服务, 你就必需使用虚拟hosts或前缀路径来配置一个反向代理:

  • 域名 api.domain.com 将指向你的私有网络中的微服务 api
  • 路径 domain.com/web 将指向你的私有网络中的微服务 web
  • 域名 backoffice.domain.com 将指向你的私有网络中的微服务 backoffice ,在你的多台实例之间负载均衡
    但一个微服务的结构时动态的。。。 服务在会经常被添加、移除、杀死或更新,可能一天之内就会发生许多次。

传统的反向代理原生不支持动态配置。你不可能轻易的通过热更新更改它们的配置。

这时,Træfɪk就诞生了。

架构

Træfɪk 可以监听你的服务发现、管理API,并且每当你的微服务被添加、移除、杀死或更新都会被感知,并且可以自动生成它们的配置文件。 指向到你服务的路由将会被直接创建出来。

运行它并忘记它吧!

快速上手

你可以通过这个 Katacoda 教程 快速感受Traefik是如何在多个Docker容器间负载均衡的。

这里有一个 Ed RobinsonContainerCamp UK 会议中的演讲。 你将从中发现 Træfɪk 的基本特性并看到更多Træfɪk与Kubernetes的示例。

Traefik ContainerCamp UK

这里有一个 Emile Vauge 在法国 Devoxx France 2016 会议中的演讲。 你将从中发现 Træfɪk 的基本特性并看到更多Træfɪk与Docker, Mesos/Marathon 和 Let’s Encrypt的示例。

Traefik Devoxx France

获取

二进制文件

版本下载 页面下载最新的可执行文件并以这个 示例配置文件 运行:

  1. ./traefik -c traefik.toml

Docker

通过Docker镜像:

  1. docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik

测试

你可以简单的通过Docker compose测试 Træfɪk, 将这个 docker-compose.yml 文件放在名称叫做 traefik的目录下:

  1. version: '2'
  2. services:
  3. proxy:
  4. image: traefik
  5. command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG
  6. networks:
  7. - webgateway
  8. ports:
  9. - "80:80"
  10. - "8080:8080"
  11. volumes:
  12. - /var/run/docker.sock:/var/run/docker.sock
  13. - /dev/null:/traefik.toml
  14. networks:
  15. webgateway:
  16. driver: bridge

在名称叫做 traefik 的目录下运行:

  1. docker-compose up -d

在浏览器中你可以打开 http://localhost:8080 来访问 Træfɪk 的控制后台来发现下面的魔法。

现在, 创建一个名称为test 的目录,并在目录中使用以下内容创建一个 docker-compose.yml 文件:

  1. version: '2'
  2. services:
  3. whoami:
  4. image: emilevauge/whoami
  5. networks:
  6. - web
  7. labels:
  8. - "traefik.backend=whoami"
  9. - "traefik.frontend.rule=Host:whoami.docker.localhost"
  10. networks:
  11. web:
  12. external:
  13. name: traefik_webgateway

然后, 在 test 目录下按顺序执行以下命令:

  1. docker-compose up -d
  2. docker-compose scale whoami=2

最后, 测试 test_whoami_1test_whoami_2这两个服务之间的负载均衡:

  1. $ curl -H Host:whoami.docker.localhost http://127.0.0.1
  2. Hostname: ef194d07634a
  3. IP: 127.0.0.1
  4. IP: ::1
  5. IP: 172.17.0.4
  6. IP: fe80::42:acff:fe11:4
  7. GET / HTTP/1.1
  8. Host: 172.17.0.4:80
  9. User-Agent: curl/7.35.0
  10. Accept: */*
  11. Accept-Encoding: gzip
  12. X-Forwarded-For: 172.17.0.1
  13. X-Forwarded-Host: 172.17.0.4:80
  14. X-Forwarded-Proto: http
  15. X-Forwarded-Server: dbb60406010d
  16. $ curl -H Host:whoami.docker.localhost http://127.0.0.1
  17. Hostname: 6c3c5df0c79a
  18. IP: 127.0.0.1
  19. IP: ::1
  20. IP: 172.17.0.3
  21. IP: fe80::42:acff:fe11:3
  22. GET / HTTP/1.1
  23. Host: 172.17.0.3:80
  24. User-Agent: curl/7.35.0
  25. Accept: */*
  26. Accept-Encoding: gzip
  27. X-Forwarded-For: 172.17.0.1
  28. X-Forwarded-Host: 172.17.0.3:80
  29. X-Forwarded-Proto: http
  30. X-Forwarded-Server: dbb60406010d