![使用 NGINX/HAproxy 进行透明 TCP 负载平衡](https://linux22.com/image/752522/%E4%BD%BF%E7%94%A8%20NGINX%2FHAproxy%20%E8%BF%9B%E8%A1%8C%E9%80%8F%E6%98%8E%20TCP%20%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1.png)
我已经尝试了几天,但仍然无法使用 HAproxy/NGINX 让透明 TCP 负载均衡器正常工作。
问题是:一切正常,直到我尝试启用透明度。 NGINX 和 HAproxy 都进行负载平衡,但将 localhost 作为用户 IP。
我尝试改变这一点:
将它们更改为以 root 身份运行。
对于 NGINX:
配置了 iptables,添加了路由表等。关于“默认网关应该是 NGINX 服务器 ip”的部分我不明白,因为 NGINX 和应用程序在同一台机器上运行,没有任何容器。
对于 HAproxy:
- 根据文章设置 iptables 并更改 sysctl 转发选项:https://www.loadbalancer.org/blog/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
- 但是,我不明白“但是,如果要使用客户端的源 IP 地址,则 HAProxy 服务器必须位于返回流量的路径中。”这部分,原因与 NGINX 相同。
因此,一般问题是:我在 xxxx:30000 上有 HAproxy/NGINX 负载平衡。在同一台机器上,我在 xxxx:30001 和 xxxx:30002 有应用程序。
我如何平衡此配置的负载?需要哪些额外的路由规则?我需要为某些重新路由创建虚拟子网吗?因为到目前为止,负载均衡器似乎可以连接到应用程序,但无法将答案返回给用户。
答案1
我不确定你是否能在同一台主机上做到这一点。
TPROXY 即使在最好的情况下也很复杂。我只见过它在两个独立子网和独立主机(虚拟或物理)上工作良好。
你确定不能用更简单的东西吗直接反射式模式?
我知道 LVS DSR 在同一台主机上运行。
或者HAPROXY 代理协议(如果您的应用程序支持它)。
理论上,我猜测 TPROXY 应该可以在单个主机上运行,所以也许有聪明的人会回答:-)。