2025年3月16日 星期日 甲辰(龙)年 月十五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > 网络服务

Fabio 一个 HTTP 和 TCP 反向代理

时间:12-14来源:作者:点击数:6

Fabio 是一个 HTTP 和 TCP 反向代理,它使用来自 Consul 的数据进行自我配置 。

传统的负载均衡器和反向代理需要配置一个配置文件。该配置包含代理向上游服务转发的主机名和路径。这个过程可以使用像 consul-template 这样的工具来自动 生成配置文件并触发重新加载。

Fabio 的工作原理是不同的,因为一旦发生变化,无需重新启动或重新加载,Fabio 就直接从存储在 Consul 中的数据更新其路由表。

当你在 Consul 注册一个服务时,你需要添加一个标签来宣布上游服务接受的路径,例如,urlprefix-/user 或者 urlprefix-/order,fabio将完成剩下的工作。

consul 启动

consul 的安装参考 consul 测试。

启动 consul:

  • $ consul agent -dev (-dev表示开发模式)

屏幕显示一些日志,表示consul安装并启动。验证 consul,需要进入另外一个终端,ssh 登录到刚启动了 consul 的这台机器,执行:

  • $ consul members
  • $ curl localhost:8500/v1/catalog/nodes (8500是consul的HTTP API端口)

会显示当前节点信息。如果上述命令正确执行就表示 consul 已经安装成功。上述命令行和 HTTP API 的功能相同。

样例服务安装

设置 golang 路径:

  • $ export GOPATH=/go
  • $ go get github.com/magiconair/fabio-example

要等一会儿到 /go 目录下去看,发现 /go/bin 目录下多了一个 fabio-example 的可执行程序。

  • $ ./fabio-example --help
  • Usage of ./fabio-example:
  • -addr string
  • host:port of the service (default "127.0.0.1:5000")
  • -name string
  • name of the service (default "fabio-example")
  • -prefix string
  • comma-sep list of host/path prefixes to register
  • $ ./fabio-example -name svc-a -prefix /foo

调用 consul 的 HTTP API 获取服务 svc-a 的元数据:

  • $ curl http://localhost:8500/v1/catalog/service/svc-a
  • [
  • {
  • "Node": "block3",
  • "Address": "127.0.0.1",
  • "TaggedAddresses": {
  • "lan": "127.0.0.1",
  • "wan": "127.0.0.1"
  • },
  • "ServiceID": "svc-a-127.0.0.1:5000",
  • "ServiceName": "svc-a",
  • "ServiceTags": [
  • "urlprefix-/foo"
  • ],
  • "ServiceAddress": "127.0.0.1",
  • "ServicePort": 5000,
  • "ServiceEnableTagOverride": false,
  • "CreateIndex": 7,
  • "ModifyIndex": 8
  • }
  • ]

需要注意的是 svc-a 服务的tag:urlprefix-/foo,这个 tag 符合 fabio 的路由定义约定,会被当作 fabio 的路由定义。安装 fabio 后再测试上述路由定义约定。

fabio 安装

安装地址是:https://github.com/eBay/fabio/releases

  • $ wget https://github.com/eBay/fabio/releases/download/v1.3.7/fabio-1.3.7-go1.7.4-linux_amd64
  • $ chmod +x fabio-1.3.7-go1.7.4-linux_amd64
  • $ ln -s fabio-1.3.7-go1.7.4-linux_amd64 /usr/local/bin/fabio

用 chmod 将下载的程序修改为可执行,然后在可执行目录 /usr/local/bin 下定义了一个软符号链接 fabio。用默认值启动fabio:

  • $ fabio

会提示 consul: connection to "localhost:8500" in datacenter "dc1"。这表明 fabio 已经找到了本地的 consul 服务。

以 docker 方式安装和运行 fabio

consul已经安装在宿主机,并监听了8500端口。运行fabio:

  • docker run --net="host" fabiolb/fabio

之所以使用docker的host网络模式启动fabio,是因为fabio依赖宿主机的consul服务(端口8500)。

测试 fabio 路由

现在consul、fabio-excample、fabio各占了一个终端,现在打开第4个终端,执行:

  • $ curl localhost:9999/foo
  • Serving /foo from svc-a on 127.0.0.1:5000

9999 端口是 fabio 的代理(proxy)端口。fabio 将 9999 端口收到的 /foo 路径下的请求,根据路由策略 (tag:urlprefix-/foo) 发往 127.0.0.1:5000 端口的 svc-a 服务。

代理 playground

在本机的 8080 端口上运行着一个 composer-playground 服务。在该服务上随便找一个URL充当健康检查URL(貌似只要响应状态码是200即可):

  • curl localhost:8080/config.json

为了将该服务注册到 consul,定义了一个 consul 配置文件 /etc/consul.d/playground.json

  • {
  • "service": {
  • "name": "playground",
  • "tags": [
  • "urlprefix-/playground"
  • ],
  • "address": "localhost",
  • "port": 8080,
  • "check": {
  • "id": "api",
  • "name": "playground health check",
  • "http": "http://localhost:8080/config.json",
  • "method": "GET",
  • "interval": "10s",
  • "timeout": "2s"
  • }
  • }
  • }

注意:向 Fabio 注册的服务必须在 consul 中定义健康检查,而且必须是PASSING状态,否则Fabio会拒绝反向代理该服务。 重启consul代理和Fabio:

  • consul agent -dev -config-dir=/etc/consul.d
  • fabio

测试 Fabio 的反向代理:

  • curl localhost:9999/playground

如果 Fabio 工作正常,会返回 composer-playground 的首页。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐