直連虛擬私有雲與虛擬私有雲網路

您可以啟用 Cloud Run 服務或工作 ,使用直連虛擬私有雲輸出將流量傳送至虛擬私有雲網路,不需使用無伺服器 VPC 存取連接器。

Cloud Run 支援下列直連虛擬私有雲設定:

事前準備

限制

Cloud Run 服務和工作有下列限制:

  • 使用直連虛擬私有雲輸出時,執行個體啟動時可能會延遲一分鐘以上才建立連線。建議您設定 HTTP 啟動探測,在應用程式接受要求前,測試與應用程式所用輸出目的地的連線。這項輸出連線能力測試應實作重試機制,或將啟動探測設定為適當的週期和門檻,做為重試機制。
  • 如果 Cloud Run 工作的執行時間超過 1 小時,連線可能會中斷。在維護事件期間,工作會從一部機器遷移至另一部機器,此時就可能發生這種情況。容器會在事件發生前 10 秒收到 SIGTSTP 信號,並在事件發生後收到 SIGCONT 信號。容器收到 SIGCONT 信號後,請重試連線。
  • 使用 Cloud NAT 時,如果透過直連虛擬私有雲輸出,執行個體啟動時可能會發生 30 秒以上的冷啟動延遲。為提升啟動效能,建議您搭配使用無伺服器 VPC 存取連接器和 Cloud NAT。
  • Cloud Run 支援的總處理量上限為每個容器執行個體 1 Gbps。超過這個數量會導致效能受限。
  • Cloud Run 用量配額會限制可設定使用直連虛擬私有雲輸出的容器執行個體數量上限。上限是依據 Cloud Run 修訂版本或工作執行作業設定。如要提高預設限制,請參閱如何提高配額。

  • Cloud Run 服務和工作 在網路基礎架構維護事件期間,可能會發生連線中斷。建議您使用可處理偶發連線重設的用戶端程式庫。
  • Network Intelligence Center 僅支援 IPv4 和 IPv6 子網路範圍的 Connectivity Tests 和 Flow Analyzer。

直連虛擬私有雲輸出不支援下列項目:

  • 虛擬私有雲流量記錄不會提供 Cloud Run 修訂版本的名稱。
  • 虛擬私有雲防火牆規則記錄
  • Packet Mirroring
  • 輸入防火牆規則中的網路標記或服務身分。
  • 防火牆規則無法使用附加至 Cloud Run 工作負載的 Resource Manager 標記。
  • 使用 Cloud Next Generation Firewall Enterprise 檢查 egress 流量,例如入侵偵測與防範服務、網址篩選服務和 TLS 檢查。

IP 位址分配

如要將 Cloud Run 服務或工作放在虛擬私有雲網路,請指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。Cloud Run 會從子網路分配 IP 位址。

IP 位址是暫時性的,因此請勿根據個別 IP 建立政策。如要根據 IP 建立政策 (例如防火牆規則),則必須使用整個子網路的 IP 位址範圍。

如要變更 Cloud Run 資源使用的網路或子網路,請建立新的修訂版本、工作任務或執行個體部署作業,並使用新的網路和子網路值。

擴充及縮減

為在流量暴增時快速擴充,Cloud Run 會一次保留 16 個 IP 位址 (28 子網路遮罩)。查看 Cloud Run 分配的 IP 位址。為確保 Cloud Run 有足夠的 IPv4 位址可用,子網路的 IPv4 位址範圍必須為 /26 以上。

為提高 IP 分配效率並簡化管理作業,請將多項資源放在同一個子網路。如果 IPv4 位址空間有限,請參閱「支援的 IPv4 範圍」一節,瞭解其他選項。

如要刪除子網路,您必須先刪除或重新部署 Cloud Run服務或工作 ,停止使用子網路,然後等待 1 到 2 小時。

服務的 IP 位址用量

在穩定狀態下,Cloud Run 使用的 IP 位址數量是容器執行個體數量的 2 倍。當修訂版本縮減時,Cloud Run 會保留其 IP 位址最多 20 分鐘。總共至少要預留 2 倍的 IP 位址數量,再加上緩衝空間,以因應修訂版本更新。

舉例來說,如果您升級修訂版本,讓 revision 1 從 100 個容器執行個體縮減至零,而 revision 2 從零擴充至 100 個,Cloud Run 會在縮減後保留 revision 1 IP 位址最多 20 分鐘。在 20 分鐘的保留期間內,您必須保留至少 400 個 IP 位址 ((100 + 100) * 2)。

工作使用的 IP

如果是 Cloud Run 工作,每項任務在執行期間和完成後 7 分鐘內,都會耗用 1 個 IP 位址。請確認子網路夠大,足以容納所有並行工作任務執行作業,且至少須保留 /26 子網路。

例如:

  • 每天執行且一律在下次執行前至少 7 分鐘完成的單一工作,最多會耗用子網路上的 1 個 IP 位址。
  • 一項包含 10 項工作的任務每 10 分鐘執行一次,每項工作執行 15 分鐘,每項工作會耗用 1 個 IP 位址 22 分鐘 (3 次執行會同時耗用 IP 位址),如以下範例所示。因此,工作在穩定狀態下會耗用 30 個 IP 位址。
  • 如果單一工作需要 1 分鐘才能執行完畢,且每分鐘執行 100 次,則需要大約 800 個 IP 位址,具體取決於確切的執行時間。

支援的 IPv4 範圍

Cloud Run 支援下列子網路 IPv4 範圍:

  • RFC 1918
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 192.168.0.0/16
  • RFC 6598
    • 100.64.0.0/10
  • E 類
    • 240.0.0.0/4

設定 IAM 權限

請使用下列任一方法,確保 Cloud Run 可存取虛擬私有雲網路:

  • Cloud Run 服務代理角色:根據預設,Cloud Run 服務代理具備 Cloud Run 服務代理角色 (roles/run.serviceAgent),其中包含必要權限。

  • 自訂權限:如要更精細地控管,請在專案中授予 Cloud Run 服務代理下列額外權限:

    • compute.networks.get
    • compute.subnetworks.get
    • 專案或特定子網路的 compute.subnetworks.use
    • compute.addresses.get
    • compute.addresses.list
    • compute.addresses.create (僅適用於具有外部 IPv6 的雙協定子網路)
    • compute.addresses.delete (僅適用於具備外部 IPv6 的雙協定子網路)
    • compute.addresses.createInternal
    • compute.addresses.deleteInternal
    • compute.regionOperations.get
  • Compute 網路使用者角色:如果不使用預設的 Cloud Run 服務代理角色或自訂權限,請將 Compute 網路使用者角色 (roles/compute.networkUser) 授予 Cloud Run 服務代理服務帳戶。如果子網路具有外部 IPv6,則還需要運算公開 IP 管理員角色 (roles/compute.publicIpAdmin)。

    例如,如要授予 Compute 網路使用者角色,請執行下列指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.s3ns-system.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"

    更改下列內容:

    • PROJECT_ID:專案 ID。
    • PROJECT_NUMBER:部署 Cloud Run 資源的專案編號。

將 Cloud Run 資源連線至虛擬私有雲網路

請根據您擁有的 Cloud Run 資源,參閱下列其中一節的說明:

將服務連線至虛擬私有雲網路

直連虛擬私有雲輸出功能可讓 Cloud Run 服務將流量傳送至虛擬私有雲網路,不需使用無伺服器 VPC 存取連接器。網路費用會與服務本身一樣,降至零。您也可以直接在 Cloud Run 服務修訂版本中新增網路標記,以更精細的方式控管網路安全,例如套用虛擬私有雲防火牆規則。

您可以使用Cloud de Confiance 控制台、Google Cloud CLI、YAML 或 Terraform,為服務設定直連虛擬私有雲輸出。

控制台

  1. 前往 Cloud de Confiance by S3NS 控制台的「Cloud Run」頁面:

    前往 Cloud Run。

  2. 如要設定要部署的新服務,請按一下「Create Service」(建立服務)。如要設定及部署現有服務,請按一下該服務。

  3. 如要設定新服務,請視需要填寫初始服務設定頁面,然後按一下「Containers, Networking, Security」(容器、網路、安全性),展開服務設定頁面。

  4. 按一下 [網路] 分頁標籤。

  5. 按一下「連線至虛擬私有雲,以傳出流量」。

  6. 按一下「直接將流量傳送至虛擬私有雲」。

  7. 在「Network」(網路) 欄位中,選取要傳送流量的虛擬私有雲網路。

  8. 在「Subnet」(子網路) 欄位中,選取服務接收 IP 位址的子網路。您可以在同一個子網路上部署多項服務。

  9. 選用:輸入要與服務建立關聯的網路標記名稱。網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2。

  10. 在「流量轉送」部分,選取下列其中一個選項:

    • 僅將傳至私人 IP 的要求轉送至虛擬私有雲:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將所有流量轉送至虛擬私有雲,透過虛擬私有雲網路傳送所有傳出流量。
  11. 按一下「建立」,建立新服務。依序點選「查看差異並重新部署」和「部署變更」,即可更新現有服務。

  12. 如要確認服務是否位於虛擬私有雲網路,請按一下服務,然後點選「Networking」(網路) 分頁標籤。網路和子網路會列在「VPC」資訊卡中。

    現在,您可以從 Cloud Run 服務傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。

gcloud

服務

如要透過 Google Cloud CLI 部署不含連接器的 Cloud Run 服務,請按照下列步驟操作:

  1. 將 gcloud 元件更新到最新版本:

    gcloud components update
  2. 確認專案已啟用 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用下列指令部署 Cloud Run 服務:

    gcloud run deploy SERVICE_NAME \
        --image=IMAGE_URL \
        --network=NETWORK \
        --subnet=SUBNET \
        --network-tags=NETWORK_TAG_NAMES \
        --vpc-egress=EGRESS_SETTING \
        --region=REGION

    更改項目:

    • 將 SERVICE_NAME 替換為 Cloud Run 服務名稱。
    • IMAGE_URLus-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • 將 NETWORK 替換為虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果只指定網路,子網路會使用與網路相同的名稱。
    • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
    • 選用:NETWORK_TAG_NAMES,以半形逗號分隔要與服務建立關聯的網路標記名稱。如果是服務,網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2。
    • EGRESS_SETTING 搭配輸出設定值:
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將 REGION 替換為服務的區域。
  4. 如要確認服務是否位於虛擬私有雲網路,請執行下列指令:

    gcloud run services describe SERVICE_NAME \
        --region=REGION

    更改項目:

    • SERVICE_NAME 改為您的服務名稱。
    • 將 REGION 替換為您在上一個步驟中指定的服務區域。

    輸出內容應包含網路、子網路和輸出設定的名稱,例如:

    VPC access:
      Network:       default
      Subnet:        subnet
      Egress:        private-ranges-only
    

現在,您可以從 Cloud Run 服務傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。

函式

如要透過 Google Cloud CLI 部署不含連接器的 Cloud Run 函式,請按照下列指示操作:

  1. 將 gcloud 元件更新到最新版本:

    gcloud components update
  2. 確認專案已啟用 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用下列指令部署 Cloud Run 函式:

    gcloud run deploy FUNCTION_NAME \
        --image=IMAGE_URL \
        --network=NETWORK \
        --subnet=SUBNET \
        --network-tags=NETWORK_TAG_NAMES \
        --vpc-egress=EGRESS_SETTING \
        --region=REGION \
        --function=FUNCTION_ENTRYPOINT

    更改項目:

    • 將 FUNCTION_NAME 替換成 Cloud Run 函式名稱。
    • IMAGE_URLus-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • 將 NETWORK 替換為虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果只指定網路,子網路會使用與網路相同的名稱。
    • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
    • 選用:NETWORK_TAG_NAMES,並以半形逗號分隔要與函式建立關聯的網路標記名稱。如果是函式,網路標記是在修訂版本層級指定。每個修訂版本都可以有不同的網路標記,例如 network-tag-2。
    • EGRESS_SETTING 搭配輸出設定值:
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將 REGION 替換成函式所在區域。
    • 選用:FUNCTION_ENTRYPOINT 原始碼中函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。此旗標的值必須是原始碼中既有的函式名稱或完整類別名稱。
  4. 如要確認函式位於虛擬私有雲網路,請執行下列指令:

    gcloud run services describe FUNCTION_NAME \
        --region=REGION

    更改項目:

    • 將 FUNCTION_NAME 替換成函式名稱。
    • REGION:您在上一個步驟中指定的函式區域。

    輸出內容應包含網路、子網路和輸出設定的名稱,例如:

    VPC access:
      Network:       default
      Subnet:        subnet
      Egress:        private-ranges-only
    

現在,您可以從 Cloud Run 函式傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。

YAML

  1. 如果您要建立新服務,請略過這個步驟。如要更新現有服務,請下載其 YAML 設定:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新下列屬性:

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: SERVICE_NAME
        labels:
          cloud.googleapis.com/location: REGION
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
              run.googleapis.com/vpc-access-egress: EGRESS_SETTING
          spec:
            containers:
            - image: IMAGE

    更改項目:

    • SERVICE_NAME 替換為 Cloud Run 服務名稱。服務名稱不得超過 49 個字元,且每個區域和專案的服務名稱不得重複。
    • REGION 替換為 Cloud Run 服務的區域,必須與子網路的區域相符。
    • 將 NETWORK 替換為虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果只指定網路,子網路會使用與網路相同的名稱。
    • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
    • 選用:NETWORK_TAG_NAMES 是要與服務建立關聯的網路標記名稱。如果是服務,網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2。
    • EGRESS_SETTING 搭配輸出設定值:
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • IMAGE:服務容器映像檔的網址。

    您也可以指定更多設定,例如環境變數或記憶體限制。

  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

  1. 請將以下內容新增到您的 main.tf 檔案中:

    /**
     * Copyright 2024 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    # Example configuration of a Cloud Run service with direct VPC
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "cloudrun-service"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        vpc_access {
          network_interfaces {
            network    = "default"
            subnetwork = "default"
            tags       = ["tag1", "tag2", "tag3"]
          }
        }
      }
    }
    

如要允許未經驗證的使用者存取服務,可以選擇公開服務。

將工作連線至虛擬私有雲網路

透過直連虛擬私有雲輸出,Cloud Run 工作可將流量傳送至虛擬私有雲網路,不需使用無伺服器虛擬私有雲存取連接器。您也可以直接在 Cloud Run 工作中新增網路標記,進一步控管網路安全,例如套用虛擬私有雲防火牆規則。

您可以使用Cloud de Confiance 控制台、Google Cloud CLI 或 YAML,為工作設定直連虛擬私有雲輸出。

控制台

  1. 前往 Cloud Run。

  2. 如要設定新工作,請按一下「Jobs」(工作) 分頁標籤,並視需要填寫初始工作設定頁面。如要設定現有工作,請按一下該工作,然後按一下「Edit」(編輯)。

  3. 按一下「Container, Variables & Secrets, Connections, Security」(容器、變數和密鑰、連線、安全性),展開工作屬性頁面。

  4. 按一下「連線」分頁標籤。

  5. 按一下「連線至虛擬私有雲,以傳出流量」。

  6. 按一下「直接將流量傳送至虛擬私有雲」。

  7. 在「Network」(網路) 欄位中,選取要傳送流量的虛擬私有雲網路。

  8. 在「Subnet」(子網路) 欄位中,選取工作接收 IP 位址的子網路。您可以在同一個子網路上執行多項工作。

  9. 在「流量轉送」部分,選取下列其中一個選項:

    • 僅將傳至私人 IP 的要求轉送至虛擬私有雲:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將所有流量轉送至虛擬私有雲,透過虛擬私有雲網路傳送所有傳出流量。
  10. 選用:輸入要與服務建立關聯的網路標記名稱。網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2。

  11. 選用:輸入要與工作建立關聯的網路標記名稱。如果是工作,則是在執行層級指定網路標記。每項工作執行作業都可以有不同的網路標記,例如 network-tag-2。

  12. 按一下「建立」或「更新」。

  13. 如要確認工作是否位於虛擬私有雲網路,請按一下工作,然後點選「Configuration」(設定) 分頁標籤。網路和子網路會列在「VPC」資訊卡中。

    現在可以執行 Cloud Run 工作,並從工作傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。

gcloud

如要透過 Google Cloud CLI 建立不含連接器的 Cloud Run 工作,請按照下列步驟操作:

  1. 將 gcloud 元件更新到最新版本:

    gcloud components update
  2. 確認專案已啟用 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用下列指令建立 Cloud Run 工作:

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION

    更改項目:

    • 將 JOB_NAME 替換為 Cloud Run 工作名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • 將 NETWORK 替換為虛擬私有雲網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。
    • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
    • 選用:將 NETWORK_TAG_NAMES 替換為要與工作建立關聯的網路標記名稱。如果是工作,網路標記是在執行層級指定。每項工作執行作業可以有不同的網路標記,例如 network-tag-2。
    • EGRESS_SETTING 搭配輸出設定值:
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • REGION:工作所在的區域。
  4. 如要確認工作是否在虛擬私有雲網路上,請執行下列指令:

    gcloud run jobs describe JOB_NAME \
      --region=REGION
      

    更改項目:

    • 將 JOB_NAME 替換成工作名稱。
    • REGION:您在上一個步驟中指定的工作區域。

    輸出內容應包含網路和子網路的名稱,例如:

    VPC network:
      Network:       default
      Subnet:        default
    

現在可以執行 Cloud Run 工作,並從工作傳送要求至虛擬私有雲網路上的任何資源,只要防火牆規則允許即可。

YAML

  1. 如果您要建立新工作,請略過這個步驟。如要更新現有工作,請下載其 YAML 設定:

    gcloud run jobs describe JOB --format export > job.yaml
  2. 更新下列屬性:

    apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: JOB_NAME
        labels:
          cloud.googleapis.com/location: REGION
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
              run.googleapis.com/vpc-access-egress: EGRESS_SETTING
          spec:
            containers:
            - image: IMAGE

    更改項目:

    • 將 JOB_NAME 替換為 Cloud Run 工作名稱。工作名稱不得超過 49 個字元,且每個區域和專案中的名稱不得重複。
    • REGION 替換為 Cloud Run 工作的區域,該區域必須與子網路的區域相符。
    • 將 NETWORK 替換為虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果只指定網路,子網路會使用與網路相同的名稱。
    • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
    • 選用:將 NETWORK_TAG_NAMES 替換為要與工作建立關聯的網路標記名稱。如果是工作,網路標記是在執行層級指定。每項工作執行作業可以有不同的網路標記,例如 network-tag-2。
    • EGRESS_SETTING 搭配輸出設定值:
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • IMAGE:工作容器映像檔的網址。
  3. 使用下列指令建立或更新工作:

    gcloud run jobs replace job.yaml

設定雙重堆疊 (IPv4 和 IPv6)

如要在 Cloud Run 資源上新增具有 IPv6 範圍的雙協定子網路,請參閱「設定雙協定」。

使用防火牆規則限制存取權

使用虛擬私有雲防火牆規則,限制對虛擬私有雲網路中資源的存取權。請使用下列其中一種策略,新增這些限制:

  • 使用子網路的 IP 範圍,建立參照服務或工作的輸入防火牆規則。
  • 建立參照服務或工作的輸出防火牆規則。

    在輸出防火牆規則中,使用連結的服務帳戶服務身分、子網路的 IP 範圍或相關聯的網路標記,參照您的服務或工作。

輸出網路標記

在輸出防火牆規則中使用網路標記,多添一層網路安全防護。

控制台

如要將網路標記與服務或工作建立關聯,請按照下列步驟操作:

  1. 前往 Cloud de Confiance 控制台的「Cloud Run」頁面。

    前往 Cloud Run。

  2. 按一下要與網路標記建立關聯的服務或工作,然後按一下「Edit」(編輯)。

  3. 如果是服務,請按一下「Networking」(網路) 分頁標籤;如果是工作,請按一下「Connections」(連線) 分頁標籤。

  4. 確認已選取「連線至虛擬私有雲,以傳出流量」和「直接將流量傳送至虛擬私有雲」。

  5. 在「Subnet」(子網路) 欄位中,選取服務接收 IP 位址的子網路。您可以在同一個子網路上部署或執行多項服務或工作。

  6. 在「Network tags」(網路標記) 欄位中,輸入要與服務或工作建立關聯的網路標記名稱。

  7. 如果是工作,請按一下「更新」。如果是服務,請依序點選「View diff & redeploy」(查看差異並重新部署) 和「Deploy changes」(部署變更)。

如果是服務,每個服務修訂版本都可以有一組不同的網路標記,因為網路標記是在修訂版本層級指定。如果是工作,工作執行作業的網路標記會與建立工作執行作業時的網路標記相同。

gcloud

如要將網路標記與服務或工作建立關聯,請使用 gcloud run deploy 指令:

gcloud run deploy SERVICE_JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --region=REGION

更改下列內容:

  • 將 SERVICE_JOB_NAME 替換成服務或工作名稱。
  • IMAGE_URL:服務或工作的圖片網址。
  • NETWORK:虛擬私有雲網路名稱。
  • 將 SUBNET 替換為子網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。您可以在同一個子網路上部署或執行多個 服務或工作 。
  • NETWORK_TAG_NAMES 替換為網路標記名稱,或以半形逗號分隔的網路標記清單。
  • 將 REGION 替換為區域名稱。

如果是服務,每個服務修訂版本都可以有一組不同的網路標記,因為網路標記是在修訂版本層級指定。如果是工作,工作執行作業的網路標記會與建立工作執行作業時的標記相同。

中斷 Cloud Run 資源連線

請根據您擁有的 Cloud Run 資源,參閱下列其中一節的說明:

取消連結服務

控制台

  • 如要從虛擬私有雲網路移除服務,請按照下列步驟操作:

    1. 前往 Cloud Run。

    2. 按一下所需服務。

    3. 按一下 [網路] 分頁標籤。

    4. 清除「連線至虛擬私有雲,以傳出流量」。

    5. 依序點選「查看差異並重新部署」和「部署變更」。

    6. 如要確認服務已不在虛擬私有雲網路上,請按一下「Networking」(網路) 分頁標籤。「VPC」卡片中不會再列出網路和子網路。

  • 如要只移除網路標記,同時保留服務與虛擬私有雲網路的連線,請按照下列步驟操作:

    1. 按一下要移除網路標記的服務。

    2. 按一下 [網路] 分頁標籤。

    3. 清除不想再與服務建立關聯的網路標記名稱。

    4. 依序點選「查看差異並重新部署」和「部署變更」。

gcloud

  • 如要從虛擬私有雲網路中移除服務,請執行下列指令:

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network
  • 如要只移除網路標記,但保留服務與虛擬私有雲網路的連線,請執行下列指令:

    gcloud run services update SERVICE_NAME --region=REGION \
    --clear-network-tags

    更改下列內容:

    • SERVICE_NAME:Cloud Run 服務的名稱。
    • REGION:Cloud Run 服務的區域。

YAML

  • 如要從虛擬私有雲網路移除服務,請按照下列步驟操作:

    1. 下載服務的 YAML 設定:

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. 從 service.yaml 檔案中移除下列內容:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      地點

      • NETWORK:虛擬私有雲網路的名稱。
      • SUBNET:子網路名稱。
      • 選用:NETWORK_TAG_NAMES:網路標記的名稱 (如果您已將標記與服務建立關聯)。
    3. 執行下列指令,部署服務修訂版本:

      gcloud run services replace service.yaml
  • 如要移除網路標記,但保留服務與虛擬私有雲網路的連線,請按照下列步驟操作:

    1. 下載服務的 YAML 設定:

      gcloud run services describe SERVICE_NAME --format export > service.yaml
    2. 從 service.yaml 檔案的內容中移除 tags 變數,保留 network 和 subnetwork 變數,如以下範例所示:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'

      地點

      • NETWORK:虛擬私有雲網路的名稱。
      • SUBNET:子網路名稱。
    3. 執行下列指令,部署服務修訂版本:

      gcloud run services replace service.yaml

取消連結工作

控制台

  • 如要從虛擬私有雲網路中移除工作,請按照下列步驟操作:

    1. 前往 Cloud Run。

    2. 按一下要移除的工作,然後點選「Edit and deploy new revision」(編輯及部署新的修訂版本)。

    3. 按一下「連線」分頁標籤。

    4. 清除「連線至虛擬私有雲,以傳出流量」。

    5. 按一下「Update」。

    6. 如要確認工作已不在虛擬私有雲網路中,請按一下「Configuration」(設定) 分頁標籤。「VPC」資訊卡中不會再列出該網路和子網路。

  • 如要只移除網路標記,但保留工作與虛擬私有雲網路的連線:

    1. 按一下含有要移除網路標記的工作,然後點選「Edit and deploy new revision」(編輯及部署新的修訂版本)。

    2. 按一下「連線」分頁標籤。

    3. 清除不再與工作建立關聯的網路標記名稱。

    4. 按一下「Update」。

gcloud

  • 如要從虛擬私有雲網路移除工作,請執行下列指令:

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network
      
  • 如要移除網路標記,但保留工作與虛擬私有雲網路的連線,請執行下列指令:

    gcloud run jobs update JOB_NAME --region=REGION \
      --clear-network-tags
      

    更改下列內容:

    • JOB_NAME:Cloud Run 工作名稱。
    • REGION:Cloud Run 工作的區域。

YAML

  • 如要從虛擬私有雲網路中移除工作,請按照下列步驟操作:

    1. 下載工作的 YAML 設定:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. 從 job.yaml 檔案中移除下列內容:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'

      更改下列內容:

      • NETWORK:虛擬私有雲網路的名稱。
      • SUBNET:子網路名稱。
      • 選用:如果網路標記與工作相關聯,請將 NETWORK_TAG_NAMES 替換為網路標記名稱。
    3. 執行下列指令來更新工作:

      gcloud run jobs replace job.yaml
  • 如要只移除網路標記,但保留工作與虛擬私有雲網路的連線:

    1. 下載工作的 YAML 設定:

      gcloud run jobs describe JOB_NAME --format export > job.yaml
    2. 從 job.yaml 檔案的內容中移除 tags 變數,保留 network 和 subnetwork 變數,如以下範例所示:

      run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET"}]'

      更改下列內容:

      • NETWORK:虛擬私有雲網路的名稱。
      • SUBNET:子網路名稱。
    3. 執行下列指令來更新工作:

      gcloud run jobs replace job.yaml

疑難排解

無法刪除子網路

如要刪除子網路,必須先刪除或重新部署所有使用該子網路的資源。如果 Cloud Run 使用子網路,請先將 Cloud Run 服務或工作 與虛擬私有雲網路中斷連線,或移至其他子網路,再刪除子網路。

直連虛擬私有雲輸出子網路的 IPv4 位址用盡

嘗試部署時,系統會顯示下列錯誤:

Instance failed to start because of insufficient free IP addresses in the
subnetwork SUBNET_ID when attempting to create an address in the
subnetwork. Please consider moving to a subnetwork with more available IP
addresses.

如果虛擬私有雲網路的子網路用盡 IPv4 位址,Cloud Logging 會記錄這項資訊。發生這種情況時,Cloud Run 無法啟動任何服務執行個體或工作任務,直到有更多 IPv4 位址可用為止。

如要解決這個問題,請按照 IP 位址耗盡策略操作。

查看分配的 IP 位址

您無法手動刪除保留的位址。嘗試刪除分配給 Cloud Run 的 IP 位址時,會發生下列錯誤:

The address resource 'ADDRESS_NAME' is already being used by
'//serverless.googleapis.com/projects/PROJECT_ID/locations/REGION/addressReservations/ADDRESS_NAME'

如要查看 Cloud Run 分配的 IP 位址,請前往Cloud de Confiance 控制台的「IP addresses」(IP 位址) 頁面,找出「In use by」(使用中) 欄設為「Serverless」(無伺服器) 的位址。

或者,您也可以透過 Google Cloud CLI 執行下列指令:

gcloud compute addresses list --filter="purpose=SERVERLESS"

自訂 MTU 相關問題

如果自訂 MTU 發生問題,請確認您使用 Cloud Run 的預設 MTU 設定。