我有两台虚拟机在端口 8545 上运行 HTTP 服务器(如图所示),并放置在一个实例组中。
我在 GCP 中创建了一个 HTTP 负载均衡器来平衡来自最终用户的 HTTP 请求。但是,使用图中所示的设置和防火墙规则,健康检查失败,我也无法访问http://35.190.34.26:80/
Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.
但是,如果我添加一条允许所有内容的防火墙规则,(0.0.0.0/0 on 8545)
则健康检查将通过,并且我也可以访问http://35.190.34.26:80/
但是,我不想编写允许 8545 上的每个人的防火墙规则。配置防火墙的正确方法是什么,以便只有负载均衡器可以访问此端口上的实例组?
答案1
由于全局转发规则配置在端口 80 上,但后端实例在端口 8545 上提供流量,因此需要创建两个单独的防火墙规则,以允许来自 130.211.0.0/22 和 35.191.0.0/16 的流量通过这些端口。这些是负载均衡器用于连接到后端实例的 IP 地址范围。此规则允许来自负载均衡器和健康检查器的流量。
我建议检查后端实例,以确保它正在监听所有地址 (0.0.0.0/0) 并且未绑定到任何特定 IP。此外,在后端实例上运行 tcpdump 将有助于了解流量是否从上述 IP 范围到达实例并继续进一步调试。
有关 Google HTTP(S) 负载平衡的防火墙规则的更多信息,请参阅此帮助中心文章。
答案2
我对在 GCP 中安装具有 HA 和负载均衡器的 apache ranger 有类似的要求。只需创建一条防火墙规则,以允许 Ranger 端口 (6080) 上来自 130.211.0.0/22 和 35.191.0.0/16 的流量。
我们要做的一件重要的事情是在健康检查中->选择端口为 6080 的 TCP 协议(在您的情况下是 8545)。然后您就可以访问您的负载均衡器 URL。