0

我有一个包含 2 个实例的 GCP 实例组。两者都已启动并正在运行。我想配置一个负载均衡器 (HTTPS) 来管理流量。

我已经使用 HTTP 协议和由 google 管理的证书设置了转发规则。这一切都有效,但前提是负载均衡器和后端(实例)之间的流量是纯 HTTP。

到目前为止我所做的步骤

  • 我创建了一个模板,这个模板只是一台普通的 N1 系列机器。我选中了复选框以创建允许 http 和 https 流量的防火墙规则。
  • 我创建了一个名为“allow-ports”的防火墙规则。此防火墙规则针对网络中的所有实例,具有 0.0.0.0/0 IP 范围并允许端口 tcp = 80、443。我怎么看这个防火墙规则应该同时打开 http (80) 和 https (443)港口。
  • 我创建了一个带有端口映射的实例组。"http-port" = 80, "https-port" = 443。我使用我刚刚创建的模板。
  • 创建实例组时,我检查它是否正在运行。使用 SSH,我可以访问实例并在两者上安装 apache (sudo apt-get install -y apache2)。在浏览器中导航到他们的外部 IP 时,我看到了他们两个。
  • 我创建了一个 HTTP(S) 负载平衡器,带有“从互联网到我的虚拟机”选项。对于后端配置,我使用我的实例组、协议 HTTP、命名端口“http-port”添加了一个后端服务。对于前端配置,我设置了 HTTPS 协议,创建 IPv4 IP 地址,创建 google 管理的 ssl 证书,然后就完成了。顺便说一句,我还添加了健康检查。

现在......这些步骤有效(几分钟后)。使用云 DNS,我设置了一个指向负载均衡器 IP 地址的域名。去的时候,我看到了 apache 页面。

什么不起作用?

当我将后端配置更改为 HTTPS(并将端口命名为“https-port”)时,我收到 502 服务器错误。所以在我看来,有一些联系,但有一个错误。这可能是apache错误吗?

我花了一整天的时间,创建和重新创建实例组、防火墙规则、负载均衡器……但似乎没有任何效果。我肯定错过了一些东西,可能是一些愚蠢的东西,但我不知道它可能是什么。

我想达到什么目标?

我不仅想要客户端和负载均衡器之间的安全 (HTTPS) 连接,还想要负载均衡器和后端服务(实例组)之间的安全连接。因为 GCP 在创建后端服务时提供了使用 HTTPS 协议的选项,所以我觉得这是可以做到的。

老实说:我正在阅读一些关于内部流量是安全的事实的文章,因此不需要 HTTPS 连接。但这对我来说并不重要,我真的很想知道这是如何工作的!

编辑

我正在使用正确的 VPC(默认)。我还将防火墙规则从 0.0.0.0/0 编辑到 130.211.0.0/22 和 35.191.0.0/16(参见:https ://cloud.google.com/compute/docs/tutorials/globally-autoscaling-a-web -service-on-compute-engine?hl=nl#configure_the_load_balancer)。

4

1 回答 1

1

除了我之前的评论。我在我的测试项目中按照您的步骤来找出问题的原因。我安装了相同的配置,并在后端使用 HTTP 进行了检查。正如预期的那样,我没有发现任何错误。之后,我将 SSL 证书安装到后端和负载均衡器。然后我将后端、负载均衡器和健康检查切换到 HTTPS,并在后端禁用了 HTTP。在这一点上,我也没有发现错误。

所以,我决定以某种方式在我的测试配置中得到 502 错误。我将负载均衡器上的运行状况检查切换为 HTTP。几分钟后,我尝试再次访问我的测试服务并收到 502 错误。当我将运行状况检查切换回 HTTPS 502 时,错误消失了。

在此测试期间,我没有更改防火墙规则,但在我的实例模板中允许 HTTP 和 HTTPS 流量,并且我使用默认网络。

于 2020-01-23T16:21:09.030 回答