负载均衡器无法连接到后端
Load Balancer not able to connect with backend
我已经在 OCI 计算上部署了 Spring 启动应用程序,并且运行良好。 Compute 是使用 public ip 创建的,并更新了安全列表以允许来自 Internet 的连接。但是,我无法从互联网上到达终点。为此,我想到了配置负载均衡器。
在单独的子网 (10.0.1.0/24)、路由 table 和安全列表中创建了负载均衡器。配置 LB 的安全列表以将所有协议数据包发送到计算的 CIDR(10.0.0.0/24),并配置计算的安全列表以接受来自 LB 的数据包。我期待 LB 与后端建立联系。但是,它不是。
我可以从互联网上打 LB :-
Lb 的路由 table 所有 ip 都通过互联网网关路由。没有像 VCN 中那样为计算的 CIDR 定义路由。
LB 有自己的安全列表,允许计算出的数据包和来自 Internet 的传入数据包,如下所示:
Compute 的安全列表接受来自 LB 的数据包:
如果我在这里遗漏了什么,请告诉我。
我的互联网网关:-
我的后端设置来自 LB 的连接配置:
LB 无法与后端建立连接,似乎没有可用的日志信息:
应用程序工作正常,如果我从计算节点访问:
LB 有一个运行状况检查,可以测试与您的服务的连接。如果失败,LB 将使您的后端停止轮换,并为您提供您所看到的关键健康状况。
您可以通过查看后端集并单击“更新运行状况检查”按钮来访问它。
编辑:
最终我想通了,你应该 运行 在你的后端执行以下命令:
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
使用您配置应用程序侦听的端口。
我使用了 httpd 而不是 spring,但我也做了以下操作
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -F -R -v /var/www/html
我不太熟悉 selinux,但您可能需要为您的应用程序做一些类似的事情。
此外,在同一子网中设置第二台主机以登录并测试连接到另一台主机将有助于故障排除,因为它将验证您的应用程序是否可以在其所在主机之外的所有地方访问。一旦是,LB 应该会正常运行。
TL;DR 在我的例子中,它有助于将安全列表规则从 stateful 切换到 stateless 在 2 个相关子网上(其中负载均衡器已托管且后端位于此处)。
在我们的部署中,我有一个负载均衡器,其 public IP 位于一个子网上,而该负载均衡器的后端位于另一个子网上。两个子网都有一个入口和一个出口规则 - 允许一切(即 0.0.0.0/0
和所有端口允许)。仍然无法从负载均衡器访问后端,并且健康检查失败。
即使在我的情况下 documentation 在有状态和无状态之间切换应该不会产生影响,但它解决了我的问题。
我已经在 OCI 计算上部署了 Spring 启动应用程序,并且运行良好。 Compute 是使用 public ip 创建的,并更新了安全列表以允许来自 Internet 的连接。但是,我无法从互联网上到达终点。为此,我想到了配置负载均衡器。
在单独的子网 (10.0.1.0/24)、路由 table 和安全列表中创建了负载均衡器。配置 LB 的安全列表以将所有协议数据包发送到计算的 CIDR(10.0.0.0/24),并配置计算的安全列表以接受来自 LB 的数据包。我期待 LB 与后端建立联系。但是,它不是。
我可以从互联网上打 LB :-
Lb 的路由 table 所有 ip 都通过互联网网关路由。没有像 VCN 中那样为计算的 CIDR 定义路由。
LB 有自己的安全列表,允许计算出的数据包和来自 Internet 的传入数据包,如下所示:
Compute 的安全列表接受来自 LB 的数据包:
如果我在这里遗漏了什么,请告诉我。
我的互联网网关:-
我的后端设置来自 LB 的连接配置:
LB 无法与后端建立连接,似乎没有可用的日志信息:
应用程序工作正常,如果我从计算节点访问:
LB 有一个运行状况检查,可以测试与您的服务的连接。如果失败,LB 将使您的后端停止轮换,并为您提供您所看到的关键健康状况。
您可以通过查看后端集并单击“更新运行状况检查”按钮来访问它。
编辑: 最终我想通了,你应该 运行 在你的后端执行以下命令:
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
使用您配置应用程序侦听的端口。
我使用了 httpd 而不是 spring,但我也做了以下操作
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -F -R -v /var/www/html
我不太熟悉 selinux,但您可能需要为您的应用程序做一些类似的事情。
此外,在同一子网中设置第二台主机以登录并测试连接到另一台主机将有助于故障排除,因为它将验证您的应用程序是否可以在其所在主机之外的所有地方访问。一旦是,LB 应该会正常运行。
TL;DR 在我的例子中,它有助于将安全列表规则从 stateful 切换到 stateless 在 2 个相关子网上(其中负载均衡器已托管且后端位于此处)。
在我们的部署中,我有一个负载均衡器,其 public IP 位于一个子网上,而该负载均衡器的后端位于另一个子网上。两个子网都有一个入口和一个出口规则 - 允许一切(即 0.0.0.0/0
和所有端口允许)。仍然无法从负载均衡器访问后端,并且健康检查失败。
即使在我的情况下 documentation 在有状态和无状态之间切换应该不会产生影响,但它解决了我的问题。