根據預設,Cloud Run 服務會使用動態 IP 位址集區,連線至網際網路上的外部端點。如果 Cloud Run 服務連線至需要使用 IP 位址防火牆的靜態 IP 位址外部端點 (例如資料庫或 API),您必須設定 Cloud Run 服務,以便使用靜態 IP 位址轉送要求。
本頁面說明如何讓 Cloud Run 服務使用靜態 IP 位址傳送要求。
建議您設定 Cloud Run,以便使用直接虛擬私有雲輸出功能將流量傳送至虛擬私有雲網路。不過,您可以選擇建立連接器。
工作總覽
如要讓 Cloud Run 服務使用靜態 IP 位址轉送要求,請設定 Cloud Run 服務的虛擬私有雲輸出流量,以便透過具有Cloud NAT 閘道 (已設定靜態 IP 位址) 的虛擬私有雲網路轉送所有輸出流量。
在本教學課程中,您會以手動模式設定 Cloud NAT,並為其指派單一靜態 IP 位址。如果 Cloud Run 工作負載大量增加,您可能需要為 Cloud NAT 指派多個靜態 IP 位址。進一步瞭解 Cloud NAT 閘道如何使用IP 位址和通訊埠。
透過 Cloud NAT 將流量進行路由,不會在網路堆疊中造成額外的跳躍,因為 Cloud NAT 閘道和 Cloud Router 只提供控制層,且封包不會經過 NAT 閘道或 Cloud Router。
設定網路位址轉譯 (NAT)
如果您使用直接虛擬私有雲輸出或無伺服器虛擬私有雲存取連接器,Cloud Run 服務的請求就會傳送至虛擬私有雲網路。如果您想使用靜態 IP 將傳出要求路由至外部端點,請設定 Cloud NAT 閘道。
gcloud
建立新的 Cloud Router 來編寫 Cloud NAT 閘道:
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
請在這個指令中替換下列值:
ROUTER_NAME
中提供要建立的 Cloud Router 資源名稱。NETWORK_NAME
替換為您先前找到的虛擬私人雲端網路名稱。REGION
與您要建立 Cloud NAT 閘道的地區。
保留靜態 IP 位址。當與保留 IP 位址資源相關聯的資源遭到刪除及重新建立時,保留 IP 位址資源會保留基礎 IP 位址:
gcloud compute addresses create ORIGIN_IP_NAME --region=REGION
請在這個指令中替換下列值:
ORIGIN_IP_NAME
與您要指派給 IP 位址資源的名稱。REGION
與將執行 Cloud NAT 路由器的區域。使用與 Cloud Run 服務相同的地區,盡量降低延遲時間和網路成本。
請在這個路由器上建立 Cloud NAT 閘道設定,以便使用您建立的靜態 IP 位址,將來自 VPC 網路的流量轉送:
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
請在這個指令中替換下列值:
NAT_NAME
與您要建立的 Cloud NAT 閘道資源名稱。ROUTER_NAME
替換為 Cloud Router 的名稱。REGION
與您要建立 Cloud NAT 閘道的地區。- 將
SUBNET_NAME
替換為子網路名稱。 ORIGIN_IP_NAME
改成您在上一個步驟中建立的保留 IP 位址資源名稱。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
建立新的 Cloud Router 來編寫 Cloud NAT 閘道:
請將
cr-static-ip-router
替換為子網路名稱。保留靜態 IP 位址。當與保留 IP 位址資源相關聯的資源遭到刪除及重新建立時,保留 IP 位址資源會保留基礎 IP 位址:
請將
cr-static-ip-addr
替換為子網路名稱。請在這個路由器上建立 Cloud NAT 閘道設定,以便使用您建立的靜態 IP 位址,將來自 VPC 網路的流量轉送:
將
cr-static-nat
替換為 Cloud NAT 閘道名稱。
透過虛擬私有雲網路轉送 Cloud Run 流量
設定 Cloud NAT 後,請使用直接虛擬私有雲輸出或無伺服器虛擬私有雲存取連接器部署或更新 Cloud Run 服務,並將虛擬私有雲輸出設為透過虛擬私有雲網路轉送所有流量:
gcloud
直接虛擬私有雲出口
如要部署或更新 Cloud Run 服務,以便使用直接虛擬私有雲輸出功能,並透過該功能轉送所有輸出流量,請執行下列指令:
gcloud run deploy SERVICE_NAME
--image=IMAGE_URL
--network=NETWORK
--subnet=SUBNET
--region=REGION
--vpc-egress=all-traffic
請在這個指令中替換下列值:
- SERVICE_NAME 換成要部署的 Cloud Run 服務名稱。
- IMAGE_URL 與容器映像檔的參照,例如
us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用的是 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
。 - 將 NETWORK 替換為虛擬私人雲端網路的名稱。
- 將 SUBNET 替換為子網路名稱。
- REGION 改為服務的地區。
無伺服器虛擬私有雲存取連接器
如要部署或更新 Cloud Run 服務,以便使用無伺服器虛擬私有雲存取連接器,並透過該連接器轉送所有輸出流量,請執行下列指令:
gcloud run deploy SERVICE_NAME
--image=IMAGE_URL
--vpc-connector=CONNECTOR_NAME
--region=REGION
--vpc-egress=all-traffic
請將下列值替換為此指令中的值:
* SERVICE_NAME 為您要部署的 Cloud Run 服務名稱。* IMAGE_URL 與容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest
。如果您使用的是 Artifact Registry,則必須先建立存放區 REPO_NAME。網址的形狀為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
。* CONNECTOR_NAME 與無伺服器虛擬私有雲存取連接器的名稱。* REGION 與服務的地區。
YAML
直接虛擬私有雲出口
如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
視需要更新。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]' run.googleapis.com/vpc-access-egress: all-traffic spec: containers: - image: IMAGE_URL
取代:
- SERVICE 改為 Cloud Run 服務名稱。
- 將 NETWORK 替換為虛擬私人雲端網路的名稱。
- 將 SUBNET 替換為子網路名稱。
- IMAGE_URL 與服務容器映像檔的網址。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
無伺服器虛擬私有雲存取連接器
如果您要建立新服務,請略過這個步驟。如果您要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
視需要更新。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: run.googleapis.com/vpc-access-connector: CONNECTOR_NAME spec: containers: - image: IMAGE_URL
取代:
- SERVICE 改為 Cloud Run 服務名稱。
- 將 CONNECTOR_NAME 替換為無伺服器虛擬私人雲端存取網路的名稱。
- IMAGE_URL 與服務容器映像檔的網址。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
這項 Cloud Run 服務會使用虛擬私有雲連接器,並透過該連接器轉送所有輸出流量:
將 us-docker.pkg.dev/cloudrun/container/hello
替換為容器映像檔的參照。
驗證靜態外部 IP 位址
完成前述步驟後,您已在虛擬私人雲端網路中設定 Cloud NAT,並使用預先定義的靜態 IP 位址,並將所有 Cloud Run 服務的傳出流量路由至虛擬私人雲端網路。Cloud Run 服務的要求會透過虛擬私有雲網路傳送,並使用靜態 IP 位址到達外部端點。
如要確認這項行為,並確認服務使用的來源 IP 位址,您可以向 API 或網站 (例如 curlmyip.org) 提出要求,以便顯示來源 IP 位址。
刪除靜態外部 IP 位址
如果您不再需要靜態外部 IP 位址,請參閱「釋出靜態外部 IP 位址」。