fabio的主要用例是将来自internet的HTTP(S)和TCP请求分发给前端(FE)服务,后者可以处理这些请求。在这个场景中,前端提供服务然后使用Consul中的服务发现特性来查找它们需要的后端(BE)服务,以便为请求提供服务。
这意味着fabio目前没有用作FE-BE或BE-BE路由器来在服务之间路由通信,因为Consul的服务发现已经解决了这个问题。话虽如此,没有什么能阻止fabio被这样使用。这只是意味着我们没有这样做。
直接部署
在下面的设置中,fabio被配置为监听公共ip,可以选择终止一个或多个域(每个域一个ip)的SSL通信。
+--> service-a
|
internet -- HTTP/HTTPS --> fabio -- HTTP --+--> service-b
|
+--> service-c
为了扩展fabio,您可以将其与前端服务一起部署,前端服务提供高可用性并分配网络带宽。
+- HTTP/HTTPS -> fabio -+- HTTP -> service-a (host-a)
| |
internet --+- HTTP/HTTPS -> fabio -+- HTTP -> service-b (host-b)
| |
+- HTTP/HTTPS -> fabio -+- HTTP -> service-c (host-c)
在已有的网关后
在下面的设置中,fabio被配置为接收来自现有网关的所有传入流量,该网关也终止了一个或多个域的SSL。
+--> service-a
|
internet -- HTTP/HTTPS --> LB -- HTTP --> fabio -- HTTP --+--> service-b
|
+--> service-c
同样,为了扩展fabio,您可以将其与前端服务一起部署,前端服务提供高可用性并分配网络带宽
+- HTTP -> fabio -+-> service-a (host-a)
| |
internet -- HTTP/HTTPS --> LB -+- HTTP -> fabio -+-> service-b (host-b)
| |
+- HTTP -> fabio -+-> service-c (host-c)
Amazon ELB
您可以在Amazon ELB后面部署fabio,并启用代理协议支持来获取客户端的远程地址和端口。
+- HTTP w/PROXY proto -> fabio -+-> service-a (host-a)
| |
internet -- HTTP/HTTPS --> ELB -+- HTTP w/PROXY proto -> fabio -+-> service-b (host-b)
| |
+- HTTP w/PROXY proto -> fabio -+-> service-c (host-c)
Amazon API 网关
您可以将fabio部署为Amazon API网关的目标。
internet -- HTTP/HTTPS --> API GW -+- HTTP -> fabio -+-> service-b (host-b)
或支持代理协议的ELB:
+- HTTP w/PROXY -> fabio -+-> service-a (host-a)
| |
internet -- HTTP/HTTPS --> API GW --> ELB -+- HTTP w/PROXY -> fabio -+-> service-b (host-b)
| |
+- HTTP w/PROXY -> fabio -+-> service-c (host-c)
您可以使用客户端证书对API网关的调用进行身份验证。这要求您在fabio上配置一个使用有效证书的HTTPS监听器。
internet -- HTTPS --> API GW -+- HTTPS w/client cert -> fabio -+-> service
为了使fabio能够验证Amazon生成的证书,您需要配置aws.apigw.cert.cn,如下所示:
proxy.addr = 1.2.3.4:9999;your/cert.pem;your/key.pem;api-gw-cert.pem
aws.apigw.cert.cn = ApiGateway
api-gw-cert.pem是在AWS管理控制台生成的证书。您的/cert.pem和/key.pemis是HTTPS证书的证书/密钥对。由于Amazon API网关证书没有设置CA标志,fabio需要信任它们以便客户端证书身份验证工作。否则,您将得到一个TLS握手错误:验证客户端证书失败。
注意:在1.2版和以后的支持动态证书存储的版本中,不会支持aws.apigw.cert.cn参数。您将不得不将caupgcn=ApiGateway参数添加到证书源配置中。有关详细信息,请参阅证书存储。