通过 stunnel 和 haproxy 使用虚拟 IP

通过 stunnel 和 haproxy 使用虚拟 IP

我们有一个负载均衡器设置,其中 HTTPS 请求经过以下步骤:-

Client -> DNS -> stunnel on Load-Balancer -> HAProxy on LB -> Web-Server

当 stunnel 正在监听负载均衡器的本地 IP 时,此设置可以完美运行。

然而,在我们的设置中,我们有 2 个负载均衡器,并且我们希望能够监听一个虚拟 IP,该虚拟 IP 一次只存在于一个 LB 上(如果第一个 LB 失败,keepalived 会将 IP 翻转到第二个 LB)。

HAProxy 执行此操作没有任何问题(并且我可以在我正在测试的负载均衡器上 ping 分配的虚拟 IP),但似乎 stunnel 讨厌这个概念。

有人之前实现过这个吗(下面是我的 stunnel 配置 - 正如你所见,我实际上正在监听 443 上的所有流量):-

cert= /etc/ssl/certs/mycert.crt
key = /etc/ssl/certs/mykey.key
;setuid = nobody
;setgid = nogroup

pid = /etc/stunnel/stunnel.pid
debug = 3
output = /etc/stunnel/stunnel.log

socket=l:TCP_NODELAY=1
socket=r:TCP_NODELAY=1

[https]
accept=443
connect=127.0.0.1:8443
TIMEOUTclose=0
xforwardedfor=yes

抱歉,这个问题问得太长了!

答案1

关键是允许程序(如 stunnel、HA-proxy)绑定到不存在的接口。这样,当 keepalived 将虚拟 IP 翻转到该框上时,程序已经在监听并等待该接口上的流量。

这可以通过修改您的,/etc/sysctl.conf包括以下键/值对来完成:

net.ipv4.ip_nonlocal_bind=1

更多内容请见:http://nbevans.wordpress.com/2011/03/01/safely-pairing-haproxy-with-virtual-network-interface-providers-like-keepalived-or-heartbeat/

然后,您最好修改 stunnel 和 HA-proxy 配置,以将绑定硬编码到特定的虚拟接口 IP。而不是让它处于“开放”状态。

相关内容