我有两个主机,host1和host2。 当前正在侦听ip:port的两台主机上都有HAProxy。 对于在两台主机上的本地主机:端口上侦听的服务,这将执行SSL终止。
现在,我们已经引入了高可用性,所以我们有一个浮动的IP(我们称之为VIP),它在任何时候都只驻留在两台主机中的一台上,客户端使用这个浮动IP访问服务,而不是一个绑定到NIC。
因此,要继续成功完成SSL终止,我们需要在当前拥有此VIP的节点上绑定此浮动VIP上的HAProxy。 在0.0.0.0上绑定HAProxy会相当容易,但不幸的是,由于我无法控制的事情,服务必须在HAProxy的同一端口上监听本地主机。 而且我也无法改变HAProxy可以监听的端口。
有没有办法configurationHAProxy侦听除localhost之外的所有主机?
我不知道从通配符*地址中排除127.0.0.1的方法。 这个答案说
[在Linux上]可以先将侦听的TCP套接字绑定到特定的IP地址和端口组合,然后再绑定另一个到通配符IP地址和相同的端口。
所以如果你先启动本地主机绑定的守护进程(让我们称之为httpservice)和通配符haproxy,那么一切都应该按照你的要求工作。
但是你需要计划如果httpservice死在你身上会发生什么。 您将无法重新启动它,因为haproxy会阻止您的端口。 为了使这更友好,你需要删除rc.d脚本(或systemctl单元),并创build一个共享的rc.d脚本:
rc.d脚本启动操作:
if httpservice dead stop haproxy wait until nothing is bound to *:port start httpservice wait until it binds to 127.0.0.1:port start haproxy else start haproxy
停止行动:
stop haproxy stop httpservice wait until nothing is bound to 127.0.0.1:port
丑陋地狱。
有一个关于被称为interface的bind关键字的选项 ,可能会取决于你的权限(重点是我的)。
接口 <interface>
将套接字限制到特定的接口。 指定时,仅从该特定接口收到的数据包由套接字处理。 目前这只在Linux上支持。 该接口必须是主系统接口,而不是别名接口。 如果将多个前端绑定到不同的接口,也可以将多个前端绑定到相同的地址。 请注意,绑定到networking接口需要root权限。 该参数仅与TCPv4 / TCPv6套接字兼容。
我从来没有使用它,但我认为它会看起来像这样:
frontend SSL-Terminator ... bind 0.0.0.0:443 ssl interface eth0 ...