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

How to grant internet access to application servers through load balancer

我已经在 J​​elastic 中设置了一个环境,包括一个负载均衡器(测试 Apache 和 Nginx,结果相同),具有 public IP 和一个应用程序服务器 运行 Univention UCS DC Master docker 图片(我也尝试过简单的 Ubuntu 20.04 安装)。

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

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

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

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

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

感谢您的宝贵时间。

克里斯蒂亚诺

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

谢谢大家!

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

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

Destination     GW       Genmask
0.0.0.0         LB @IP   255.255.255.0

您的 VM 防火墙不应使用 iptables 阻止 in/out 流量的 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

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