有没有办法在 GCP 中设置 "https to http" 中间件?

Is there a way to set up a "https to http" middle in GCP?

我希望这不是一个重复的问题。 我在 GCP 中基于 Grizzly 设置了一个简单的 Java 服务器。它是一个 HTTP 服务器,为 8080 上的请求提供服务。我无法设置 HTTPS 服务器(我试过了......)和服务器(响应 publicly 邮递员、curl 等)无法接收来自我的 public 网站的任何请求,因为该网站是在 HTTPS 上。 所以在发送请求的时候,明显出现了这个错误:

index.html was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint. This request has been blocked; the content must be served over HTTPS.

一个(非常...)天真的尝试使用具有 https 和 443 的 link 将请求发送到我的端点导致:

 failed to receive handshake, SSL/TLS connection failed

所以我的问题是 - 如果我无法定义 HTTPS 服务器(由于我自己的限制),有没有办法配置一个中间 vm,它将在 443 上接收客户端请求,将它发送到我的实际服务器在 8080 上,然后将响应转发回去?

GCP 中的 Cloud Load Balancing 服务恰恰专门用作中介。

要专门为您在 Cloud Shell 中的用例配置负载均衡器,您可以按照以下步骤操作:

  1. 配置默认区域。
gcloud config set compute/zone <your-vm-zone>
  1. 创建非托管实例组。
gcloud compute instance-groups unmanaged create ig-us-c1
  1. 将您的 VM 添加到之前创建的实例组。
 gcloud compute instance-groups unmanaged add-instances ig-us-c1 --instances=<your-instance-name>
  1. 为负载均衡器创建一个外部 ip。
gcloud compute addresses create <ip-name> \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

  1. 创建健康检查。
gcloud compute health-checks create http http-basic-check \
    --port 80
  1. 创建后端服务。
gcloud compute backend-services create web-backend-service \
        --load-balancing-scheme=EXTERNAL \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=http-basic-check \
        --global
  1. 将实例组作为后端添加到后端服务。
gcloud compute backend-services add-backend web-backend-service \
        --instance-group=ig-us-c1 \
        --instance-group-zone=<your-vm-zone> \
        --global
  1. 创建一个 URL 映射以将传入请求路由到默认后端服务。
gcloud compute url-maps create web-map-https \
        --default-service web-backend-service
  1. 创建目标 HTTPS 代理以将请求路由到您的 URL 地图。
gcloud compute target-https-proxies create https-lb-proxy \
        --url-map=web-map-https \
        --ssl-certificates=www-ssl-cert

注意:[SSL 证书] 可以是 Self managed or Google managed; for testing purposes you can take a look at this document 描述 self-managed SSL 证书的用法。

  1. 创建全局转发规则以将传入请求路由到代理。
gcloud compute forwarding-rules create https-content-rule \
        --load-balancing-scheme=EXTERNAL \
        --network-tier=PREMIUM \
        --address=<ip-name> \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
  1. 创建一个 DNS 区域并记录指向 Load Balancer 外部 ip 地址。
gcloud beta dns managed-zones create example-zone --description="" --dns-name="example.com." --visibility="private" --networks="default"
gcloud beta dns record-sets transaction start --zone="example-zone"
gcloud beta dns record-sets transaction add <lb-public-ip-address> --name="*.example.com." --ttl="300" --type="A" --zone="example-zone"
gcloud beta dns record-sets transaction execute --zone="example-zone"

您可以使用命令进行测试:curl https://<hostname.example.com>