引言

Fabio是可以从consul中自动获取相关配置信息的HTTP/TCP反向代理。

传统的负载均衡器和反向代理服务都将配置信息写到文件中,这些配置包含代理的上游服务器的主机名和路径。这个过程可以使用像consul-template这样的工具生成配置文件并自动触发重新加载。

Fabio的工作原理有所不同,一旦存储在consul中的路由表发生变化,Fabio的相关配置也会立即发生变更,这个过程并不需要重启或者重新加载。

在向consul中注册服务时需要为其填一个一个标签,这个标签声明了该服务的路径。例如: urlprefix-/userurlprefix-/order,然后Fabio将会完成后续工作。

快速开始

使用源码、预编译包、Docker或者Homebrew安装

go get github.com/fabiolb/fabio                     (>= go1.8)

brew install fabio                                  (OSX/macOS stable)

docker pull fabiolb/fabio                           (Docker)

https://github.com/fabiolb/fabio/releases           (pre-built binaries)

比如ubuntu下使用预编译包进行安装:
- 下载预编译的二进制文件

$ mkdir /opt/fabio
$ cd /opt/fabio
$ wget https://github.com/fabiolb/fabio/releases/download/v1.5.10/fabio-1.5.10-go1.11.1-linux_amd64
  • 修改文件权限
$ chmod +x fabio-1.5.10-go1.11.1-linux_amd64
  • 建立软连接
$ ln -s fabio-1.5.10-go1.11.1-linux_amd64 fabio

现在就可以使用./fabio命令开启fabio了,当然也可以将这个命令加入到环境变量中去,这样就可以在任意位置开启服务了。

consul中注册服务

需要确保所注册的服务拥有为你的ServiceID不包含空格的服务名。

consul中注册健康监测机制

由于Fabio仅会监听标记为passing的服务,所以需要确保注册的服务为通过(passing)状态。

路由存储在Consul Service Tags中,您需要为服务所服务的每个host/path前缀添加单独的urlprefix-标签。

例如,如果您的服务处理user/product,则添加两个标签urlprefix-/userurlprefix-/product。 您可以根据需要注册任意数量的前缀

fabio可以转发HTTP,HTTPS和TCP流量。 以下是一些配置示例:

# HTTP/S examples
# Make sure the prefix for HTTP routes contains at least one slash (/).
urlprefix-/css                                     # path route
urlprefix-i.com/static                             # host specific path route
urlprefix-mysite.com/                              # host specific catch all route
urlprefix-/foo/bar strip=/foo                      # path stripping (forward '/bar' to upstream)
urlprefix-/foo/bar proto=https                     # HTTPS upstream
urlprefix-/foo/bar proto=https tlsskipverify=true  # HTTPS upstream and self-signed cert

# TCP examples
urlprefix-:3306 proto=tcp                          # route external port 3306
    
# GRPC/S examples
urlprefix-/my.service/Method proto=grpc                      # method specific route
urlprefix-/my.service proto=grpc                             # service specific route
urlprefix-/my.service proto=grpcs                            # TLS upstream
urlprefix-/my.service proto=grpcs grpcservername=my.service  # TLS upstream with servername override
urlprefix-/my.service proto=grpcs tlsskipverify=true         # TLS upstream and self-signed cert

启动Fabio(不指定配置文件)

$ fabio

这种方式启动意味着默认在本机的localhost:8500运行着一个consul服务。

观察输出日志查看fabio如何选择其服务路径。

关于对Docker的支持,将在后面详细讲解。

尝试着开启/关闭服务,看看路由表是如何变化的。

测试是否可以通过Fabio访问其上游服务

# for urlprefix-/foo
curl -i http://localhost:9999/foo

# for urlprefix-mysite.com/foo
curl -i -H 'Host: mysite.com' http://localhost:9999/foo

将所有HTTP流量通过端口9999发送到fabio

引言 · 原文地址

快速开始 · 原文地址

——————————————————————————
行路不知花开处,蓦然回首芷兰香。