Google-Cloud-Platform

如何根據 URL 將流量定向到 Compute 或 Cloud Run 服務

  • December 27, 2021

我們目前有一個在 Compute VM 上執行的 Web 應用程序,並且正在努力將其逐步遷移到 Cloud Run。(我們正在逐步這樣做,因為目前的後端是 PHP,我們正在用 Go 重寫它,一次一個端點)

我們的網站目前可訪問,例如:

https
://www.myapp.com 和 API:

https ://www.myapp.com/books

我們的計劃是讓新的 Cloud Run/Go API 可以通過“v2”路徑訪問:

https
://www.myapp.com/v2/books 或子域

https://v2.myapp.com/books

然後根據遷移完成的內容決定在客戶端使用哪個 API。

我想知道解決這個問題的好方法是什麼。

我考慮過的事情(作為 GCP 初學者)

  • 我們已經在 Compute VM 上執行了 nginx,因此為https://www.myapp.com/v2設置反向代理一開始似乎是個好主意,但目前似乎無法從通過私有 IP 計算,因此請求必須通過 Internet 發出,從而減慢速度(也不確定反向代理到外部 URL 是否會導致身份驗證等問題?)
  • 使用https://v2.myapp.com/books選項,為 Cloud Run 映射自定義域似乎仍處於預覽版中,因此我對在生產系統中使用它猶豫不決,理想情況下我們也希望使用我們自己的 SSL 證書似乎不受支持。
  • Firebase 託管選項似乎有點複雜,並且請求超時為 60 秒,這對於我們得到的某些影片上傳等來說太短了。
  • NEG 的負載均衡器會增加一些複雜性/成本,但這似乎是另一種選擇。看起來無伺服器 NEG 無法連接到 Compute 並且託管 VM NEG 無法連接到 Cloud Run,那麼在這種情況下我需要一個嗎?

在下面評論您提到的所有 4 個選項

  • 我們已經在 Compute VM 上執行了 nginx,因此為https://www.myapp.com/v2設置反向代理一開始似乎是個好主意,但目前似乎無法從通過私有 IP 計算,因此請求必須通過 Internet 發出,從而減慢速度(也不確定反向代理到外部 URL 是否會導致身份驗證等問題?)

這在技術上是正確的,您可以將 Cloud Run 服務設置為僅接受來自 VPC 的流量(這稱為入口選項,您可以在此處的文件中閱讀有關它的資訊

$$ 1 $$)。當您這樣做時,您的 Cloud Run 服務將繼續在看似公共 URL(部署服務時生成的 URL)上提供服務。但是該 URL 只能從 VPC 訪問,即使看起來客戶端將呼叫 Internet 服務,該流量仍保留在我們的網路中並且永遠不會離開我們的主幹網,因此從技術上講,這不應該增加延遲。

  • 使用https://v2.myapp.com/books選項,為 Cloud Run 映射自定義域似乎仍處於預覽版中,因此我對在生產系統中使用它猶豫不決,理想情況下我們也希望使用我們自己的 SSL 證書似乎不受支持。

我不建議在生產中使用預覽功能,存在功能會以向後不兼容的方式更改的風險。關於使用您自己的 SSL 證書的主題,您可以在 Cloud Run 服務(設置為私有)前部署一個 HTTP LoadBalancer,並自定義 LoadBalancer 以滿足您的需求。

  • Firebase 託管選項似乎有點複雜,並且請求超時為 60 秒,這對於我們得到的某些影片上傳等來說太短了。

我對 Firebase 不是很熟悉。

  • NEG 的負載均衡器會增加一些複雜性/成本,但這似乎是另一種選擇。看起來無伺服器 NEG 無法連接到 Compute 並且託管 VM NEG 無法連接到 Cloud Run,那麼在這種情況下我需要一個嗎?

LoadBalancer 選項看起來很複雜,但實際上並不復雜,您可以使用 Terraform 之類的東西來配置 LoadBalancer,您只需執行一次

希望這有助於照亮您的選擇

$$ 1 $$ https://cloud.google.com/run/docs/securing/ingress

引用自:https://serverfault.com/questions/1088037