如何通过负载均衡器授予对应用程序服务器的互联网访问权限

问题描述

我在 jelastic 中设置了一个环境,包括一个负载平衡器(测试了 Apache 和 Nginx,结果相同),具有公共 IP 和运行 Univention UCS DC Master docker 映像的应用程序服务器(我还尝试了一个简单的 Ubuntu 20.04 安装) .

现在应用服务器有一个私有 IP 地址并且可以从 Internet 正确访问,我也可以正确地通过 SSH 连接到负载均衡器和应用服务器。

我似乎无法实现的一件事是让应用服务器访问互联网(出站流量)。

我尝试在应用服务器中设置网络并尝试了一些 Nginx 负载平衡配置,但说实话我以前从未使用过负载平衡器,我觉得配置负载平衡并不能解决我的问题(可能错了)。

当然,我的目的是学习负载平衡,但如果有人能给我指出正确的方向,我将不胜感激。

问题:需要在 jelastic 或服务器中配置什么才能让负载均衡器后面的机器访问互联网?

感谢您抽出宝贵时间。

克里斯蒂亚诺

解决方法

我能够通过简单地将公共 IP 地址分离并重新附加到服务器来解决这个问题,所以这不是设置问题,只是 Jelastic 中的某些东西卡住了..

谢谢大家!

编辑:实际上为了有效解决问题,我必须从univention/ucs docker镜像中分离公共IP地址,将其附加到环境中的另一个节点(即我拥有的Ubuntu服务器),然后附加公共IP回到univention docker镜像。不知道为什么,但对我有用。

,

要让机器访问互联网,您应该使用负载均衡器作为 gw 在其中添加一个路由,如下所示:

Destination     GW       Genmask
0.0.0.0         LB @IP   255.255.255.0

您的虚拟机防火墙不应使用 iptables 阻止 80 和 443 端口的输入/输出流量:

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

在您的负载均衡器中,您应该使用连接到此子网的 LB 接口伪装传出流量(更改源 ip)并将输入流量转发到您的 vms 子网:

sudo iptables --table NAT -A POSTROUTING --out-interface eth0 -j MASQUERADE
sudo iptables -A FORWARD -p tcp -dport 80 -i eth0 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -p tcp -dport 443 -i eth0 -o eth1 -j ACCEPT

您应该在负载均衡器中启用 ip 转发

echo 1 > /proc/sys/net/ipv4/ip_forward