Load-Balancing
將虛擬 IP 與 stunnel 和 haproxy 一起使用
我們有一個負載均衡器設置,其中一個 HTTPS 請求流經以下步驟:-
Client -> DNS -> stunnel on Load-Balancer -> HAProxy on LB -> Web-Server
當 stunnel 監聽負載均衡器的本地 IP 時,此設置完美執行。
然而,在我們的設置中,我們有 2 個負載均衡器,我們希望能夠監聽一個虛擬 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
對不起,冗長的問題!
關鍵是允許程序(如 stunnel、HA-proxy)綁定不存在的介面。因此,當 keepalived 將虛擬 IP 翻轉到該框時,程序已經在偵聽並等待該介面上的流量。
這可以
/etc/sysctl.conf
通過包含以下鍵/值對來修改您的:net.ipv4.ip_nonlocal_bind=1
然後,您最好修改您的 stunnel 和 HA-proxy 配置,以硬編碼綁定到特定虛擬介面 IP。而不是讓它“開放”。