設定雙重堆疊 (IPv4 和 IPv6)

雙協定子網路可讓 App Engine 資源透過直連虛擬私有雲輸出,將 IPv4 和 IPv6 流量傳送至虛擬私有雲網路。您可以將現有的僅限 IPv4 (單一堆疊) 子網路變更為雙協定子網路。

子網路類型

虛擬私有雲網路支援下列 Compute Engine 子網路類型:

雙堆疊限制

變更現有 App Engine 資源的堆疊類型前,請考量下列限制:

  • 雙重堆疊支援僅適用於自訂模式虛擬私有雲網路中的子網路。如要為雙協定子網路啟用內部存取權類型,必須啟用虛擬私有雲網路內部 IPv6 範圍。設定虛擬私有雲網路,或將其轉換為自訂模式。

  • 相較於僅支援 IPv4 的子網路,雙協定子網路的冷啟動延遲時間可能較長,導致應用程式擴充速度受限。

  • 不支援 NAT64。

事前準備

請確認 App Engine 服務代理具備 Compute 公開 IP 管理員角色 (roles/compute.publicIpAdmin),才能使用具備外部 IPv6 的子網路。

設定雙協定子網路

雙協定子網路同時具有 IPv4 和 IPv6 位址範圍。

如要設定雙協定子網路,可以使用 Google Cloud 控制台或 Google Cloud CLI:

控制台

  1. 前往 Google Cloud 控制台,啟用 Compute Engine API:

    啟用 Compute Engine API

  2. 前往「VPC networks」(虛擬私有雲網路) 頁面:

    前往「VPC networks」(虛擬私有雲網路)

  3. 如要建立新的自訂模式網路,請按一下「Create VPC network」(建立虛擬私有雲網路)。如果您使用的是現有虛擬私有雲網路,請按一下虛擬私有雲網路的名稱,顯示「VPC network details」(虛擬私有雲網路詳細資料) 頁面。

  4. 如要建立新網路或轉換現有網路,請輸入名稱,並確認「Subnet creation mode」(子網路建立模式) 設為「Custom」(自訂),然後選取「Configure a ULA internal IPv6 range for this VPC Network」(為這個虛擬私有雲網路設定 ULA 內部 IPv6 範圍)。

  5. 在「子網路」分頁中,點選「新增子網路」。在隨即顯示的面板中:

    1. 提供「Name」(名稱)。
    2. 選擇「Region」(區域)。
    3. 在「IP stack type」(IP 堆疊類型),選取「IPv4 and IPv6 (dual-stack)」(IPv4 和 IPv6 (雙重堆疊))。
    4. 輸入 IPv4 範圍。這是子網路的主要 IPv4 範圍。
    5. 選取「IPv6 access type」(IPv6 存取權類型)。

      如果沒有「Internal」(內部) 選項,但您需要這個選項,請確認網路已指派內部 IPv6 範圍。

    6. 按一下「新增」。

gcloud

  1. 如要建立支援雙協定子網路的自訂模式網路,請執行 gcloud compute networks create 指令。

    如要為這個網路中的任何子網路設定「內部」IPv6 範圍,請使用 --enable-ula-internal-ipv6 旗標。這個選項會從 Google Cloud 用於內部 IPv6 子網路範圍的fd20::/20範圍內,指派 /48 ULA 前置字元。

    gcloud compute networks create NETWORK \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6

    將 NETWORK 替換為要包含新子網路的虛擬私有雲網路名稱。

  2. 如要轉換自動模式網路或更新自訂模式網路,使其支援雙協定子網路,請按照下列步驟操作:

    1. 如要轉換自動模式網路,請將網路切換為自訂子網路模式:

      gcloud compute networks update NETWORK \
        --switch-to-custom-subnet-mode
    2. 在網路上啟用內部 IPv6 範圍:

      gcloud compute networks update NETWORK \
        --enable-ula-internal-ipv6

      將 NETWORK 替換為包含新子網路的虛擬私有雲網路名稱。

  3. 如要建立具有 IPv6 範圍的雙協定子網路,請使用雙協定設定執行 subnets create 指令:

    gcloud compute networks subnets create SUBNET \
      --network=NETWORK \
      --range=PRIMARY_IPv4_RANGE \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=IPV6_ACCESS_TYPE \
      --region=REGION

    更改下列內容:

    • SUBNET:新子網路的名稱。
    • NETWORK:要包含新子網路的虛擬私有雲網路名稱。
    • PRIMARY_IPv4_RANGE:新子網路的主要 IPv4 範圍,採用 CIDR 標記法。詳情請參閱「IPv4 子網路範圍」。
    • IPV6_ACCESS_TYPE:新子網路的 IPv6 存取權類型,可以是 internal 或 external。
    • REGION:要建立新子網路的 Google Cloud 區域。

將雙協定子網路新增至 App Engine 資源

建立雙協定子網路後,請使用 YAML 或 Terraform 將子網路新增至 App Engine 服務。如要為尚未使用直連虛擬私有雲輸出的服務啟用這項功能,請部署新版本,並將流量遷移至該版本。您也可以先刪除已部署的版本,而不是覆寫現有的版本 ID。

YAML

  1. 在 app.yaml 檔案中,於 vpc_access 欄位指定網路和子網路:

    vpc_access:
    network_interface:
     network: NETWORK
     subnet: SUBNET
    vpc_egress: EGRESS_SETTING

    更改下列內容:

    • NETWORK:您在上一個步驟中建立的網路名稱。

    • SUBNET:您在上一個步驟中建立的子網路名稱。

    • 選用:EGRESS_SETTING 可控管傳出流量的轉送方式。這個欄位支援下列設定:

      • all-traffic:所有傳出要求都會透過虛擬私有雲網路轉送。
      • private-ranges-only (預設):只有傳送至內部 IP 位址的流量會透過虛擬私有雲網路轉送。網際網路流量會使用預設的 App Engine 路徑。
  2. 執行下列指令,將應用程式部署至 App Engine:

    gcloud app deploy

Terraform

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

  1. 在 Terraform 設定中,將下列 vpc_access 區塊新增至 google_app_engine_standard_app_version 資源:

    vpc_access {
    vpc_egress = "EGRESS_SETTING"
    network_interfaces {
     network    = "NETWORK"
     subnetwork = "SUBNET"
    }
    }

    更改下列內容:

    • NETWORK:您在上一個步驟中建立的虛擬私有雲網路名稱。
    • SUBNET:您在上一個步驟中建立的子網路名稱。
    • 選用:EGRESS_SETTING 可控管傳出流量的轉送方式。這個欄位支援下列設定:
    • ALL_TRAFFIC:所有傳出要求都會透過虛擬私有雲網路轉送。
    • PRIVATE_IP_RANGES (預設):只有傳送至內部 IP 位址的流量會透過虛擬私有雲網路轉送。網際網路流量會使用預設的 App Engine 路徑。
  2. 如果版本已部署,但未啟用直連虛擬私有雲輸出功能,請將 version_id 欄位更新為新值。您無法在現有版本上啟用直連虛擬私有雲輸出。

  3. 套用設定:

    terraform apply

將子網路從單一堆疊變更為雙重堆疊

如要在自訂模式虛擬私有雲網路中,將 IPv6 子網路範圍新增至現有的僅限 IPv4 子網路,請參閱「將子網路的堆疊類型變更為雙重堆疊」。接著,在雙協定子網路上部署 App Engine 服務。

將子網路從雙堆疊變更為單一堆疊

如要將資源的雙協定子網路變更為單一協定子網路,請參閱「將雙協定子網路變更為僅限 IPv4」。接著,在單一堆疊子網路上部署 App Engine 服務。

驗證網路和子網路

如要確認資源是否位於虛擬私有雲網路,請執行下列指令:

gcloud app versions describe VERSION --service=SERVICE

更改下列內容:

  • VERSION:已部署的服務版本
  • SERVICE:已部署的服務

以下輸出範例顯示您的網路和子網路:

  vpcAccess:
    networkInterfaces:
    - network: projects/YOUR_PROJECT/global/networks/YOUR_NETWORK
      subnet: projects/YOUR_PROJECT/regions/YOUR_REGION/subnetworks/YOUR_SUBNET
    vpcEgress: ALL_TRAFFIC/PRIVATE_IP_RANGES