如何通过负载均衡器授予对应用程序服务器的 Internet 访问权限
How to grant internet access to application servers through load balancer
我已经在 Jelastic 中设置了一个环境,包括一个负载均衡器(测试 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
我已经在 Jelastic 中设置了一个环境,包括一个负载均衡器(测试 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