我正在尝试为我的GCP VM实现https支持。为此,我创建了所有负载平衡组件,即实例组,运行状况检查,后端服务,URL映射和目标代理。所有创建都没有错误。 但是现在当我为最后一步创建全局转发规则时,出现以下错误:
错误:(gcloud.compute.forwarding-rules.create)无法获取 资源: -字段“ resource.IPAddress”的值无效:“ 35.xxx.xxx.xxx”。指定的IP地址无效。
我正在使用以下命令:
gcloud compute forwarding-rules create fa-global-fwding-rule-1 --target-https-proxy=fa-https-proxy-1 --ports=443 --global --address=35.xxx.xxx.xxx
(IP添加用xxx屏蔽的数字)
我想念什么?
我已经有一个通过http运行的VM实例,在该实例中我已将其临时地址提升为静态地址(上面的地址是35.xxx.xxx.xxx)
此外,一旦实现了https支持,我希望http连接也能继续正常工作,以便在将它们移至https之前不会干扰我现有的api
有什么建议/帮助吗?
答案 0 :(得分:1)
GCP负载均衡器不会检查您选择的静态IP是区域性还是全局性。如果您不小心保留了“区域” IP而不是“全局” IP,则会引发该愚蠢的错误:
“ resource.IPAddress”字段的值无效:“ 35.xxx.xxx.xxx”。 指定的IP地址无效。
答案 1 :(得分:0)
我的命令没有发现任何问题,如果指定的IP地址正在使用或不可用,则通常是由于IP冲突而导致的此类错误。转发规则将负载均衡器的IP地址映射到将处理请求的目标代理,因此首先您需要创建IP地址。使用此命令: $ gcloud计算地址创建我的地址--global
然后创建转发规则。您的HTTPS负载平衡器将需要一个全局而不是区域性的IP地址。使用此命令:
$ gcloud计算转发规则创建my-https-forwarding-rule --global --address 123.123.123.123 --ip-protocol TCP --port-range 443 --target-https-proxy my-https-proxy
您可以确认您使用的是全球IP地址还是区域IP地址?
对于HTTP,您需要为HTTP创建完全独立的目标HTTP代理和转发规则。本质上,您需要具有两个负载平衡器来处理流量,然后在应用程序中实际重定向用户。请注意,我们为HTTP转发规则输入了相同的IP地址。这样一来,我们就可以侦听IP地址上的端口80和443。
答案 2 :(得分:-1)
没有迹象表明您的后端实例也在使用HTTPS协议监听443端口。
GCP负载平衡器不支持从HTTP到HTTPS的协议重定向,换句话说,仅前端监听443是不够的,后端服务器也必须这样做。
您可以选中此post,以了解如何在后端实例级别进行重定向。
此外,建议不要使用自签名证书,以避免在浏览时收到证书警告。如果您要寻找免费证书,建议您检查Letsencrypt。