GCP 负载平衡("internal" 流量通过 HTTPS)
GCP load balancing ("internal" traffic over HTTPS)
我有一个包含 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) 负载平衡器,选项为 "From internet to my VMs"。对于后端配置,我使用我的实例组、协议 HTTP、命名端口 "http-port" 添加了一个后端服务。对于前端配置,我设置了 HTTPS 协议,创建了一个 IPv4 IP 地址,创建了一个 google-managed 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)。
除了我之前的评论。我在我的测试项目中按照您的步骤找出问题的原因。我安装了相同的配置并在后端使用 HTTP 检查它。正如预期的那样,我没有发现任何错误。之后,我将 SSL 证书安装到后端和负载均衡器。然后我将后端、负载均衡器和健康检查切换到 HTTPS,并在后端禁用了 HTTP。在这一点上,我也没有发现任何错误。
因此,我决定以某种方式在我的测试配置中出现 502 错误。我将负载均衡器的健康检查切换为 HTTP。几分钟后,我再次尝试访问我的测试服务,但出现了 502 错误。当我将健康检查切换回 HTTPS 时,502 错误消失了。
在此测试期间,我没有更改防火墙规则,但在我的实例模板中允许了 HTTP 和 HTTPS 流量,并且我使用了默认网络。
我有一个包含 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) 负载平衡器,选项为 "From internet to my VMs"。对于后端配置,我使用我的实例组、协议 HTTP、命名端口 "http-port" 添加了一个后端服务。对于前端配置,我设置了 HTTPS 协议,创建了一个 IPv4 IP 地址,创建了一个 google-managed 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)。
除了我之前的评论。我在我的测试项目中按照您的步骤找出问题的原因。我安装了相同的配置并在后端使用 HTTP 检查它。正如预期的那样,我没有发现任何错误。之后,我将 SSL 证书安装到后端和负载均衡器。然后我将后端、负载均衡器和健康检查切换到 HTTPS,并在后端禁用了 HTTP。在这一点上,我也没有发现任何错误。
因此,我决定以某种方式在我的测试配置中出现 502 错误。我将负载均衡器的健康检查切换为 HTTP。几分钟后,我再次尝试访问我的测试服务,但出现了 502 错误。当我将健康检查切换回 HTTPS 时,502 错误消失了。
在此测试期间,我没有更改防火墙规则,但在我的实例模板中允许了 HTTP 和 HTTPS 流量,并且我使用了默认网络。