如果您必须为AWS ELB后面的服务提供静态IP端点,那么有什么select?

我有一个AWS服务器背后的Web服务,只有很less的EC2服务器。 据我所知,ELBterminal不可能拥有一个静态IP,因为它是一个基于DNS的负载平衡解决scheme,这是ELB团队做出的一个devise决定。

然而,我们整合的第三方合作伙伴之一,由于其内部基础设施的限制(我知道)要求我们的服务器的IP。

经过一番研究,我打算在静态IP后面准备一个SSL传递反向代理,并将请求传递给我们的ELB端点。 该服务器将只被该客户端使用。 我可能会使用HAProxy,因为代理服务器需要dynamicparsingELB的IP。

优点

  • AWS ELB背后的基础架构没有变化。
  • 无需额外的SSLauthentication。

缺点

  • 引入单点故障,但只影响客户。
  • 客户端需要自己为我们的域名分配IP,或者我们为这个服务器设置另一个域名。
  • 没有以前的经验设立这样的储备代理。

这是我没有改变基础设施的唯一方法,我想听听你的意见,如果你处于这种情况,你会怎么做?

如果成本不是问题,Akamai的客户端访问控制(CAC)提供静态IP地址解决scheme。 这是昂贵的,但它应该运作良好。

如果您想自己构build,则可以使用弹性IP构build两个实例(并将这两个IP地址提供给第三方合作伙伴),然后使用Route53进行健康检查以避免SPoF。

最后,我使用TCP SSL传递反向代理解决scheme,这里是我的HAProxyconfiguration:

global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon defaults timeout connect 10s timeout client 1m timeout server 1m option tcplog log-format %ci:%cp\ [%t]\ %ft\ %b/%s/%si\ %Tw/%Tc/%Tt\ %B\ %ts\ %ac/%fc/%bc/%sc/%rc\ %sq/%bq log global resolvers dns nameserver google 8.8.8.8 # pass 80 port request to AWS ELB listen http-proxy bind *:80 mode tcp server elb my.elb.amazonaws.com:80 check resolvers dns # pass 443 port request to AWS ELB listen https-proxy bind *:443 mode tcp server elb my.elb.amazonaws.com:443 check resolvers dns 

一些解释:

  • 代理侦听端口80和443的连接,然后传递给ELB端点。
  • HAProxy将使用我指定的DNSdynamicparsingIP
  • 使用TCP模式,因此不需要为代理创build额外的SSLauthentication

我做了一些testing,效果很好。

但是,我注意到了一个缺点(或者只是不知道如何解决)

  • 无法将真正的客户端IP置于HTTP标头中,因为它处于TCP模式

这可能会导致问题,如果你想允许一些IP访问某些服务。