如何根據 URL 將流量定向到 Compute 或 Cloud Run 服務
我們目前有一個在 Compute VM 上執行的 Web 應用程序,並且正在努力將其逐步遷移到 Cloud Run。(我們正在逐步這樣做,因為目前的後端是 PHP,我們正在用 Go 重寫它,一次一個端點)
我們的網站目前可訪問,例如:
https
://www.myapp.com 和 API:我們的計劃是讓新的 Cloud Run/Go API 可以通過“v2”路徑訪問:
https
://www.myapp.com/v2/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,您只需執行一次
希望這有助於照亮您的選擇