我在 GCP 中创建了一个负载均衡器,用于使用 HTTPS 将其转发到 HTTPS 后端组。 我已通过在实例上创建证书将实例配置为使用 HTTPS,当我从实例本身进行卷曲时,我得到以下内容
curl https://localhost
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
root@instance:/var/log/apache2# curl https://localhost -k
<WebPage content>
我检查了关于 从负载均衡器到后端的加密的 GCP 文档,并已按照所述配置了后端和运行状况检查。
但是健康检查显示UNHEALTHY,健康检查日志显示
healthCheckProbeResult: {
connectLatency: "0.000651s"
detailedHealthState: "TIMEOUT"
healthCheckProtocol: "HTTPS"
healthState: "UNHEALTHY"
ipAddress: "10.8.1.4"
previousDetailedHealthState: "UNKNOWN"
previousHealthState: "UNHEALTHY"
probeCompletionTimestamp: "2021-08-11T07:46:06.973978919Z"
probeRequest: "/user"
probeResultText: "HTTP response: , Error: Protocol error"
probeSourceIp: "35.191.1.154"
responseLatency: "0.002054s"
targetIp: "<internal IP>"
targetPort: 443
}
当我只使用HTTP时,通过更改apache和后端配置,站点工作正常。
我无法调试这里的实际问题。
我希望负载均衡器和后端之间进行加密。所以任何其他方法都会受到欢迎。
健康检查错误为TIMEOUT。这意味着您的后端确实接受了端口 443 上的连接。
你的问题没有详细说明Apache/Nginx如何?已配置。
检查您是否已在 Web 服务器中配置端口 443 侦听器。
检查您是否已启用端口 443 的 VPC 防火墙规则。
默认 VPC 防火墙规则 default-all-https 允许端口 443 上的流量。您可以选择将名为 https-server 的网络标记应用到虚拟机实例。
如果后端 Web 服务正在运行并侦听端口 443,以下命令将为 HTTPS 端口 443 启用默认防火墙规则。
将 https-server 网络标签应用到 Compute Engine 虚拟机实例:
gcloud compute instances add-tags [INSTANCE_NAME] \
--zone [INSTANCE_ZONE] \
--tags="https-server"
列出您的 Compute Engine 虚拟机实例并查看标签:
gcloud compute instances list --format="table(name,status,tags.list())"
注意:以上步骤有利于调试。但是,这将允许整个互联网连接到您的后端。更好的解决方案是创建一条防火墙规则,仅允许来自负载均衡器和运行状况检查服务的流量。允许的地址是:
以下命令将创建一条 VPC 防火墙规则,允许所有实例接收来自 Google Cloud Load Balancer 和运行状况检查服务的流量。可以微调此规则以分配给特定实例:
gcloud compute firewall-rules create "lb-rule" --allow=tcp:80,tcp:443 \
--source-ranges="10.0.0.0/22,10.0.0.0/14" \
--source-ranges="130.211.0.0/22,35.191.0.0/16" \
--description="Allow traffic from load balancer and health check services"
我在另一台使用 IIS 的后端服务器上遇到了类似的问题,发现问题的根本原因是 IIS 证书握手。您需要采取本文档中提到的步骤来解决该问题。