28.7 服务代理工具

服务代理(又叫反向代理)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。服务代理服务器也可以作为负载均衡器,隐藏后端真正服务器的细节,提高统一访问接口地址。参见图28-15。

28.7 服务代理工具 - 图1

图28-15 服务代理工具的功能

下面介绍支持Docker环境的一些服务代理开源项目。

28.7.1 Traefik

Traefik项目官方网址为https://traefik.io/。代码网址为https://github.com/containous/traefik

Traefix是一个可以用来简化微服务部署的HTTP代理服务器和负载均衡服务器,支持多种后端服务,包括Docker、Swarm、Mesos/Marathon、Kubernetes、Consul、Etcd、Zookeeper、BoltDB、Rest API、file等。

传统的代理服务器不适应于动态环境,配置的动态改变一般难以实现,而微服务架构恰恰是动态的,服务的添加、去除和升级经常发生。Traefix可以监听服务注册/编排的API,当服务状态发生改变时,可动态更新反向代理服务器的配置。功能逻辑图参见图28-16。

28.7 服务代理工具 - 图2

图28-16 Traefik服务代理流程

还提供可视化的WebUI进行配置和状态监测,如图28-17所示。

28.7 服务代理工具 - 图3

图28-17 Traefik的可视化管理界面

运行方式包括二进制模式和容器模式。

二进制模式运行时需下载binary和配置文件(https://github.com/containous/traefik/releaseshttps://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml),然后直接运行:


  1. $ ./traefik -c traefik.toml

容器模式的命令如下:


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

28.7.2 Muguet

Muguet代码网址为:https://github.com/mattallty/muguet

Muguet除了提供服务代理功能外,还提供DNS解析功能,这样应用可以使用域名来访问容器,而不需要再使用静态端口和IP。功能逻辑图如下图28-18所示。

28.7 服务代理工具 - 图4

图28-18 Muguet进行反向代理和域名解析的过程

Muguet的安装和使用都比较简单:


  1. Install Muguet
  2. $ npm install -g muguet
  3. Start Muguet (as root)
  4. $ sudo muguet up
  5. Usage
  6. $ sudo muguet up [options]

Muguet提供WebUI,默认域名http://muguet.docker,如图28-19所示。

28.7.3 nginx-proxy

nginx-proxy代码网址为https://github.com/jwilder/nginx-proxy

nignx-proxy以容器方式运行Nginx和docker-gen,其中docker-gen负责产生代理配置文件并在容器启动时进行加载。使用方法如下。

28.7 服务代理工具 - 图5

图28-19 Muguet的Web管理界面

运行nignx-proxy:


  1. $ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder
  2. /nginx-proxy

运行需要proxy的容器:


  1. $ docker run -d -e VIRTUAL_HOST=demo.tenxcloud.net --expose 8080 index.
  2. tenxcloud.com/tenxcloud/tomcat

注意,需要设置VIRTUAL_HOST环境变量修改DNS,使其值指向niginx-proxy所在机器IP,同时需要使用—expose暴露容器服务端口。访问http://demo.tenxcloud.com即可,参见图28-20。

28.7 服务代理工具 - 图6

图28-20 Nginx的管理界面