將應用程式負載平衡器轉換為 IPv6

本文說明如何將應用程式負載平衡器資源和後端從 僅限 IPv4 (單一堆疊) 轉換為 IPv4 和 IPv6 (雙重堆疊)。使用 IPv6 的主要優點是可以分配更大的 IP 位址集區。您可以根據偏好設定負載平衡器,以便終止輸入的 IPv6 流量,並透過 IPv4 或 IPv6 連線將此流量傳送至後端。詳情請參閱「應用程式負載平衡器和 Proxy 網路負載平衡器的 IPv6」一文。

在本文件中,「僅 IPv4」(單一堆疊) 是指僅使用 IPv4 位址的資源,「IPv4 和 IPv6」(雙重堆疊) 是指同時使用 IPv4 和 IPv6 位址的資源。

事前準備

開始轉換程序前,請注意下列條件:

  • 您必須使用下列任一類型的 Application Load Balancer:

    • 全域外部應用程式負載平衡器
    • 區域性外部應用程式負載平衡器
    • 跨區域內部應用程式負載平衡器
    • 區域性內部應用程式負載平衡器

    傳統版應用程式負載平衡器不支援雙重堆疊後端或子網路。如要進一步瞭解 IPv6 支援功能,請參閱「Application Load Balancer 和 Proxy Network Load Balancer 的 IPv6 支援」。

  • 負載平衡器必須具有 VM 執行個體群組後端,或是具有 GCE_VM_IP_PORT 端點的區域網路端點群組 (NEG) 後端。其他後端類型不支援雙堆疊。

此外,轉換程序會因負載平衡器類型而異。

  • 針對全域外部應用程式負載平衡器,您需要將後端轉換為雙重堆疊,並建立可處理傳入 IPv6 流量的 IPv6 轉送規則。

  • 如要跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,您只需將後端轉換為雙層架構。這些負載平衡器不支援 IPv6 轉送規則。

如要瞭解如何設定應用程式負載平衡器,請參閱下列說明文件:

找出要轉換的資源

記下負載平衡器相關聯的資源名稱。您稍後需要提供這些名稱。

  1. 如要列出所有子網路,請使用 gcloud compute networks subnets list 指令

    gcloud compute networks subnets list
    

    請記下僅含 IPv4 位址的子網路名稱,以便轉換為雙堆疊。這個名稱稍後會稱為 SUBNET。虛擬私有雲網路稍後會稱為 NETWORK

  2. 如要列出所有後端服務,請使用 gcloud compute backend-services list 指令

    gcloud compute backend-services list
    

    記下要轉換為雙層架構的後端服務名稱。這個名稱稍後會稱為 BACKEND_SERVICE

  3. 如要列出所有網址對應,請使用 gcloud compute url-maps list 指令

    gcloud compute url-maps list
    

    請記下與負載平衡器相關聯的網址對應項目名稱。這個名稱稍後會稱為 URL_MAP

  4. 如果您已使用負載平衡器,請使用 gcloud compute instances list 指令查看後端的 IP 堆疊類型:

    gcloud compute instances list \
        --format= \
        "table(
        name,
        zone.basename(),
        networkInterfaces[].stackType.notnull().list(),
        networkInterfaces[].ipv6AccessConfigs[0].externalIpv6.notnull().list():label=EXTERNAL_IPV6,
        networkInterfaces[].ipv6Address.notnull().list():label=INTERNAL_IPV6)"
    
  5. 如要列出所有 VM 執行個體和執行個體範本,請使用 gcloud compute instances list 指令gcloud compute instance-templates list 指令

    gcloud compute instances list
    
    gcloud compute instance-templates list
    

    記下要轉換為雙層架構的執行個體和執行個體範本名稱。這個名稱稍後會稱為 VM_INSTANCEINSTANCE_TEMPLATES

  6. 如要列出所有執行個體群組,請使用 gcloud compute instance-groups list 指令

    gcloud compute instance-groups list
    

    記下要轉換為雙層架構的網路端點群組名稱。這個名稱稍後會稱為 INSTANCE_GROUP

  7. 如要列出所有區域網路端點群組 (NEG),請使用 gcloud compute network-endpoint-groups list 指令

    gcloud compute network-endpoint-groups list
    

    請記下要轉換為雙堆疊的區域 NEG 後端名稱。這個名稱稍後會稱為 ZONAL_NEG

  8. 如要列出所有目標 Proxy,請使用 gcloud compute target-http-proxies list 指令

    gcloud compute target-http-proxies list
    

    請記下與負載平衡器相關聯的目標 Proxy 名稱。這個名稱稍後會稱為 TARGET_PROXY

從單一堆疊轉換為雙重堆疊後端

本節說明如何將使用 IPv4 專用 (單一堆疊) 位址的負載平衡器資源和後端,轉換為 IPv4 和 IPv6 (雙重堆疊) 位址。

更新子網路

只有自訂模式的虛擬私有雲網路支援雙重堆疊子網路。自動模式虛擬私有雲網路或舊版網路不支援雙重堆疊子網路。雖然自動模式網路非常適合用於提早探索,但是大部分的實際工作環境更適合使用自訂模式虛擬私有雲。建議您在自訂模式中使用 VPC。

如要將 VPC 更新為雙堆疊設定,請按照下列步驟操作:

  1. 如果您使用的是自動模式虛擬私有雲網路,請務必先將自動模式虛擬私有雲網路轉換為自訂模式

    如果您使用 default 網路,則必須將其轉換為自訂模式虛擬私有雲網路。

  2. 如要啟用 IPv6,請參閱「 將子網路的堆疊類型變更為雙重堆疊」。

    請確認子網路的 IPv6 存取權類型已設為 External

  3. 選用:如要為這個網路中的子網路設定內部 IPv6 位址範圍,請完成下列步驟:

    1. 在「虛擬私有雲網路 ULA 內部 IPv6 範圍」部分,選取「已啟用」
    2. 在「Allocate internal IPv6 range」(分配內部 IPv6 範圍) 部分,選取「自動」或「手動」

      如果您選取「手動」,請在 fd20::/20 範圍內輸入 /48 範圍。如果範圍已在使用中,系統會提示您提供其他範圍。

更新僅限 Proxy 的子網路

如果您使用的是 Envoy 型負載平衡器,建議您將僅代理程式子網路堆疊類型變更為雙堆疊。如要瞭解支援僅限 Proxy 子網路的負載平衡器,請參閱「支援的負載平衡器」。

您無法以與一般子網路相同的方式更新僅限 Proxy 的子網路 (purpose=REGIONAL_MANAGED_PROXY) 堆疊類型 (使用 subnets update command)。您必須使用雙重堆疊堆疊類型建立備用的僅限 Proxy 子網路,然後將其升級為活動角色。這是因為每個地區和每個 VPC 網路只能啟用一個僅限 Proxy 的子網路。

在虛擬私有雲網路上指派內部 IPv6 範圍後,請按照下列步驟將僅限 Proxy 的子網路堆疊類型變更為雙重堆疊。

主控台

  1. 在活動的僅限 Proxy 子網路所在的相同區域中建立備份的僅限 Proxy 子網路,並將 IP 堆疊類型指定為雙堆疊。

    1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
      前往「VPC networks」(VPC 網路) 頁面
    2. 按一下要新增僅限 Proxy 子網路的 VPC 網路名稱。
    3. 按一下 [新增子網路]
    4. 輸入名稱。
    5. 請選取區域。
    6. 在「用途」部分,選取「區域受管理 Proxy」
    7. 在「角色」部分,選取「備份」
    8. 在「IP 堆疊類型」中,選取「IPv4 和 IPv6 (雙重堆疊)」
    9. 輸入 IP 位址範圍
    10. 按一下「新增」。
  2. 建立或修改適用於後端 VM 或端點的防火牆允許輸入規則,以便納入備份僅限 Proxy 子網路的主要 IP 位址範圍。

  3. 將備份的僅限 Proxy 子網路升級為活動角色。這項操作也會將先前活動的僅限 Proxy 子網路降級為備份角色:

    1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
      前往「VPC networks」(VPC 網路) 頁面
    2. 按一下要修改的虛擬私有雲端網路名稱。
    3. 在「為負載平衡預留的僅限 Proxy 子網路」下方,找出先前步驟中建立的備份子網路。
    4. 按一下「Activate」。
    5. 指定選用的排空逾時
    6. 按一下「啟用子網路」
  4. 在排除連線逾時之後,或者您確認與後端 VM 或端點的連線都不是來自先前處於活動狀態 (現為備份) 的僅限 Proxy 子網路中的 Proxy 之後,可以執行以下操作:

    • 修改適用於後端 VM 或端點的防火牆允許輸入規則,如此便不會包含先前活動 (現為備份) 的僅限 Proxy 子網路的主要 IP 範圍。
    • 刪除先前活動 (現為備份) 的僅限 Proxy 子網路,以釋放該子網路用於其主要 IP 位址範圍的 IP 位址。

gcloud

下列步驟假設您已擁有現有的僅限 Proxy 子網路。

  1. 使用 gcloud compute networks subnets create 指令,在相同區域中建立備份的僅限 Proxy 子網路,並指定雙層堆疊 (--stack-type=IPV4_IPV6) 的堆疊類型。這個子網路會以 --role=BACKUP 標記指派為備份。

    gcloud compute networks subnets create BACKUP_PROXY_ONLY_SUBNET_NAME \
      --purpose=REGIONAL_MANAGED_PROXY \
      --role=BACKUP \
      --region=REGION \
      --network=VPC_NETWORK_NAME \
      --range=BACKUP_PROXY_ONLY_SUBNET_RANGE \
      --stack-type=IPV4_IPV6
    

    更改下列內容:

    • BACKUP_PROXY_ONLY_SUBNET_NAME:新建立的備用 Proxy 專用子網路名稱
    • REGION:新建立的備用僅限 Proxy 子網路的地區。這個地區應與目前的有效僅限 Proxy 子網路相同。
    • VPC_NETWORK_NAME:新建立的僅限 Proxy 備援子網路的網路。這個網路必須與目前的 Proxy 專用子網路相同。
    • VPC_NETWORK_NAME:虛擬私有雲網路名稱
    • BACKUP_PROXY_ONLY_SUBNET_RANGE:新建立的僅限 Proxy 備份子網路的 CIDR 範圍
  2. 建立或修改適用於後端 VM 或端點的防火牆允許輸入規則,以便納入備份僅限 Proxy 子網路的主要 IP 位址範圍。防火牆規則應已接受來自活動子網路的連線。

    gcloud compute firewall-rules update PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges ACTIVE_PROXY_ONLY_SUBNET_RANGE,BACKUP_PROXY_ONLY_SUBNET_RANGE
    

    更改下列內容:

    • PROXY_ONLY_SUBNET_FIREWALL_RULE:防火牆規則的名稱,可讓來自僅限 Proxy 子網路的流量傳送至後端執行個體或端點
    • ACTIVE_PROXY_ONLY_SUBNET_RANGE:目前活動的僅限 Proxy 子網路 CIDR 範圍
    • BACKUP_PROXY_ONLY_SUBNET_RANGE:備用 Proxy 專用子網路的 CIDR 範圍
  3. 更新新的子網路,將其設為該地區的 ACTIVE 僅限 Proxy 子網路,並等待系統排除舊的子網路。這也會將先前活動的僅限 Proxy 子網路降級為備份角色。

    如要立即排除 IP 位址範圍,請將 --drain-timeout 設為 0s。若 Proxy 在要排除的子網路裡有指派的位址,這會馬上停止所有連到這些 Proxy 的連線。

    gcloud compute networks subnets update BACKUP_PROXY_ONLY_SUBNET_NAME \
      --region=REGION \
      --role=ACTIVE \
      --drain-timeout=CONNECTION_DRAINING_TIMEOUT
    

    更改下列內容:

    • BACKUP_PROXY_ONLY_SUBNET_NAME:新建立的備用 Proxy 專用子網路名稱
    • REGION:新建立的備用僅限 Proxy 子網路的地區。這個地區應與目前的有效僅限 Proxy 子網路相同。
    • CONNECTION_DRAINING_TIMEOUT: Google Cloud 用來從先前活動的僅限 Proxy 子網路中,移去 Proxy 現有連線的時間 (以秒為單位)。
  4. 使用 listdescribe 指令監控排除狀態。正在排除子網路時,其狀態為 DRAINING

    gcloud compute networks subnets list
    

    等待排空除完成。當已排除舊的僅限 Proxy 子網路時,該子網路的狀態為 READY

  5. 更新僅限 Proxy 子網路的防火牆規則,僅允許來自新子網路的連線。

    gcloud compute firewall-rules PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges BACKUP_PROXY_ONLY_SUBNET_RANGE
    
  6. 確認與後端 VM 或端點的連線都不是來自先前處於活動狀態 (現為備份) 的僅限 Proxy 子網路中的 Proxy 之後,您就可以刪除舊子網路。

    gcloud compute networks subnets delete ACTIVE_PROXY_ONLY_SUBNET_NAME \
      --region=REGION
    

更新 VM 執行個體或範本

如果 VM 連線的子網路已設定 IPv6 範圍,您就可以在 VM 執行個體上設定 IPv6 位址。只有下列後端支援 IPv6 位址:

  • 執行個體群組後端:一或多個代管、非代管或代管和非代管執行個體群組後端的組合。
  • 區域性 NEG:一或多個 GCE_VM_IP_PORT 類型的區域性 NEG。

更新 VM 執行個體

您無法編輯屬於代管或非代管執行個體群組的 VM 執行個體。如要將 VM 執行個體更新為雙層堆疊,請按照下列步驟操作:

  1. 從群組中刪除特定執行個體
  2. 建立雙堆疊 VM
  3. 在 MIG 中使用指定名稱建立執行個體

更新 VM 執行個體範本

您無法更新現有的執行個體範本。如果需要進行變更,您可以建立另一個具有類似屬性的範本。如要將 VM 執行個體範本更新為雙層,請按照下列步驟操作:

主控台

  1. 前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。

    前往「Instance templates」(執行個體範本) 頁面

    1. 按一下要複製及更新的執行個體範本。
    2. 按一下「建立類似」
    3. 展開「Advanced options」(進階選項) 區段。
    4. 在「網路標記」中輸入 allow-health-check-ipv6
    5. 在「Network interfaces」(網路介面) 區段中,按一下「Add a network interface」(新增網路介面)
    6. 在「Network」清單中,選取自訂模式虛擬私有雲網路。
    7. 在「Subnetwork」(子網路) 清單中選取「SUBNET」。
    8. 在「IP 堆疊類型」中,選取「IPv4 和 IPv6 (雙重堆疊)」
    9. 按一下 [建立]。
  2. 在與負載平衡器相關聯的代管執行個體群組 MIG 啟動基本滾動式更新

更新可用區 NEG

無法編輯區域性 NEG 端點。您必須刪除 IPv4 端點,並建立新的雙堆疊端點,同時包含 IPv4 和 IPv6 位址。

如要在 REGION_A 區域中設定區域性 NEG (含 GCE_VM_IP_PORT 類型端點),請先在 GCP_NEG_ZONE 區域中建立 VM。然後將 VM 網路端點新增至區域 NEG。

建立 VM

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 點選「建立執行個體」

  3. 將「Name」(名稱) 設為 vm-a1

  4. 在「區域」部分,選擇 REGION_A,然後在「可用區」欄位中選擇任何值。這個區域在本程序中稱為 GCP_NEG_ZONE

  5. 在「Boot disk」(開機磁碟) 專區中,確認已為開機磁碟選項選取「Debian GNU/Linux 12 (bookworm)」。如有需要,請按一下「Choose」(選擇),以變更圖片。

  6. 展開「進階選項」部分,然後進行下列變更:

    • 展開「Networking」(網路) 區段。
    • 在「Network tags」(網路標記) 欄位中輸入 allow-health-check
    • 在「Network interfaces」(網路介面) 部分進行以下變更:
      • Network (網路):NETWORK
      • Subnet (子網路):SUBNET
      • IP 堆疊類型IPv4 和 IPv6 (雙重堆疊)
    • 按一下 [完成]
    • 按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中,複製並貼上下列指令碼內容。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  7. 按一下 [建立]。

  8. 使用下列名稱和區域組合,重複執行以下步驟來建立第二個 VM:

    • 名稱:vm-a2,區域:GCP_NEG_ZONE

gcloud

使用下列組合建立 VM 的名稱和區域,然後執行以下指令兩次來建立 VM。兩個 VM 的指令碼內容皆相同。

  • vm-a1VM_NAME 和您選擇的任何 GCP_NEG_ZONE 區域。
  • vm-a2 和相同 GCP_NEG_ZONE 區域的 VM_NAME

    gcloud compute instances create VM_NAME \
        --zone=GCP_NEG_ZONE \
        --stack-type=IPV4_IPV6 \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-health-check \
        --subnet=SUBNET \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    

將端點新增至可用區性 NEG

主控台

如何將端點新增至區域 NEG:

  1. 在 Google Cloud 控制台中,前往「Network endpoint groups」(網路端點群組) 頁面。

    前往「網路端點群組」

  2. 在「名稱」清單中,按一下網路端點群組的名稱 (ZONAL_NEG)。畫面上會顯示「Network endpoint group details」(網路端點群組詳細資料) 頁面。

  3. 在「Network endpoints in this group」(這個群組中的網路端點) 區段中,選取先前建立的 NEG 端點。按一下「移除端點」

  4. 在「Network endpoints in this group」(這個群組中的網路端點) 區段中,按一下「Add network endpoint」(新增網路端點)

  5. 選取 VM 執行個體

  6. 在「Network interface」部分,系統會顯示 VM 的名稱、區域和子網路。

  7. 在「IPv4 位址」欄位中,輸入新網路端點的 IPv4 位址。

  8. 在「IPv6 位址」欄位中,輸入新網路端點的 IPv6 位址。

  9. 選擇「Port type」(通訊埠類型)

    1. 如果您選取「預設」,則端點會使用網路端點群組中所有端點的預設通訊埠 80。這對我們的範例來說已足夠,因為 Apache 伺服器會透過通訊埠 80 提供要求。
    2. 如果您選取「Custom」(自訂),請輸入端點要使用的「Port number」(通訊埠編號)
  10. 如要新增更多端點,請按一下「Add network endpoint」(新增網路端點),然後重複執行上述步驟。

  11. 新增所有端點後,按一下「建立」

gcloud

  1. 將端點 (GCE_VM_IP_PORT 端點) 新增至 ZONAL_NEG

    gcloud compute network-endpoint-groups update ZONAL_NEG \
        --zone=GCP_NEG_ZONE \
        --add-endpoint='instance=vm-a1,ip=IPv4_ADDRESS, \
          ipv6=IPv6_ADDRESS,port=80' \
        --add-endpoint='instance=vm-a2,ip=IPv4_ADDRESS, \
          ipv6=IPv6_ADDRESS,port=80'
    

更改下列內容:

IPv4_ADDRESS:網路端點的 IPv4 位址。IPv4 必須屬於 Compute Engine 中的 VM (主要 IP 或別名 IP 範圍的一部分)。如果未指定 IP 位址,系統會使用網路端點群組所屬網路中 VM 執行個體的主要 IP 位址。

IPv6_ADDRESS:網路端點的 IPv6 位址。IPv6 位址必須屬於網路端點群組所屬網路中的 VM 執行個體 (外部 IPv6 位址)。

為 IPv6 健康狀態檢查探測器建立防火牆規則

您必須建立防火牆規則,以允許從 Google Cloud 探測系統的 IP 範圍進行健康狀態檢查。詳情請參閱探測 IP 範圍

請確認輸入規則適用於要進行負載平衡的執行個體,且允許來自 Google Cloud 健康檢查系統的流量。這個範例會使用目標標記 allow-health-check-ipv6 來識別套用此規則的 VM 執行個體。

如果沒有這個防火牆規則,預設拒絕輸入規則會封鎖傳入至後端執行個體的 IPv6 流量。

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」

  2. 如要允許 IPv6 子網路流量,請再次按一下「Create firewall rule」(建立防火牆規則),然後輸入以下資訊:

    • Name (名稱):fw-allow-lb-access-ipv6
    • Network (網路):NETWORK
    • Priority (優先順序):1000
    • 流量方向ingress
    • 目標指定的目標標記
    • 「Target tags」(目標標記)allow-health-check-ipv6
    • Source filter (來源篩選器):IPv6 範圍
    • 來源 IPv6 範圍

      • 針對全域外部應用程式負載平衡器和全域外部 Proxy 網路負載平衡器,請輸入 2600:2d00:1:b029::/642600:2d00:1:1::/64

      • 如要跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器、區域性內部應用程式負載平衡器、跨區域內部 Proxy 網路負載平衡器、區域性外部 Proxy 網路負載平衡器,以及區域性內部 Proxy 網路負載平衡器,請輸入 2600:2d00:1:b029::/64

    • 「Protocols and ports」(通訊協定和通訊埠)「Allow all」(全部允許)

  3. 按一下 [建立]。

gcloud

  1. 建立 fw-allow-lb-access-ipv6 防火牆規則,允許與子網路進行通訊。

    針對全域外部應用程式負載平衡器和全域外部 Proxy 網路負載平衡器,請使用下列指令:

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check-ipv6 \
        --source-ranges=2600:2d00:1:b029::/64,2600:2d00:1:1::/64 \
        --rules=all
    

    如要跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器、區域性內部應用程式負載平衡器、跨區域內部 Proxy 網路負載平衡器、區域性外部 Proxy 網路負載平衡器和區域性內部 Proxy 網路負載平衡器,請使用下列指令:

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check-ipv6 \
        --source-ranges=2600:2d00:1:b029::/64 \
        --rules=all
    

為僅限 Proxy 的子網路建立防火牆規則

如果您使用區域性外部應用程式負載平衡器或內部應用程式負載平衡器,則必須更新 ingress 防火牆規則 fw-allow-lb-access-ipv6,允許從 Proxy 專用子網路傳送至後端的流量。

如要取得僅限 Proxy 子網路的 IPv6 位址範圍,請執行下列指令:

gcloud compute networks subnets describe PROXY_ONLY_SUBNET \
    --region=REGION \
    --format="value(internalIpv6Prefix)"

請注意內部 IPv6 位址範圍,這個範圍稍後會稱為 IPV6_PROXY_ONLY_SUBNET_RANGE

如要更新僅限 Proxy 子網路的防火牆規則 fw-allow-lb-access-ipv6,請按照下列步驟操作:

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」

  2. 在「VPC 防火牆規則」面板中,按一下 fw-allow-lb-access-ipv6

    • 來源 IPv6 範圍2600:2d00:1:b029::/64IPV6_PROXY_ONLY_SUBNET_RANGE
  3. 按一下 [儲存]

gcloud

  1. 更新 fw-allow-lb-access-ipv6 防火牆規則,允許與僅限 Proxy 子網路進行通訊:

    gcloud compute firewall-rules update fw-allow-lb-access-ipv6 \
        --source-ranges=2600:2d00:1:b029::/64,IPV6_PROXY_ONLY_SUBNET_RANGE
    

建立新的後端服務和 IPv6 轉送規則

本節說明建立新的後端服務和 IPv6 轉送規則的程序。請注意,您只能為全球外部應用程式負載平衡器建立 IPv6 轉送規則。跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器和區域內部應用程式負載平衡器不支援 IPv6 轉送規則。

在這個過程中,BACKEND_SERVICEBACKEND_SERVICE_IPV6 都能提供流量。為避免流量中斷,請建立新的後端服務,並將 IP 位址選取政策設為 Prefer IPv6。建立新的後端服務後,您可以將流量轉送至新的 IPv6 後端服務

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「負載平衡」

  2. 按一下負載平衡器的名稱。

  3. 按一下 [編輯]

設定後端服務:

  1. 按一下「後端設定」
  2. 在「後端服務」欄位中,選取「建立後端服務」
  3. 將「Name」設為 BACKEND_SERVICE_IPV6
  4. 在「Backend type」部分,選取「Zonal network endpoint group」
  5. 在「IP 位址選擇政策」清單中,選取「偏好使用 IPv6」
  6. 在「Protocol」欄位中,選取「HTTP」
  7. 在「New Backend」面板中,執行下列操作:
    1. 在「network endpoint group」清單中,選取 ZONAL_NEG
    2. 在「Maximum RPS」部分輸入 10
  8. 在「Health check」清單中,選取 HTTP 健康狀態檢查。
  9. 按一下 [完成]

設定 IPv6 前端:

跨區域內部應用程式負載平衡器、區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,不支援使用 IPv6 的轉送規則。

  1. 按一下「前端設定」
  2. 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)
  3. 在「Name」欄位中,輸入轉送規則的名稱。
  4. 在「Protocol」欄位中選取 HTTP
  5. 將「IP version」(IP 版本) 設為 IPv6
  6. 按一下 [完成]
  7. 按一下 [Update]

設定轉送規則

  1. 按一下「轉送規則」
  2. 按一下「進階型主機與路徑規則」
  3. 按一下 [Update]

gcloud

  1. 建立健康狀態檢查:

     gcloud compute health-checks create http HEALTH_CHECK \
         --port 80
    
  2. 針對 HTTP 流量建立後端服務:

    全球

    如要查看全域外部應用程式負載平衡器,請使用下列指令:

    gcloud compute backend-services create BACKEND_SERVICE_IPV6 \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --ip-address-selection-policy=PREFER_IPV6 \
        --health-checks=HEALTH_CHECK \
        --global
    

    跨區域

    如要使用跨區域內部應用程式負載平衡器,請使用以下指令:

    gcloud compute backend-services create BACKEND_SERVICE_IPV6 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=HTTP \
        --ip-address-selection-policy=PREFER_IPV6 \
        --health-checks=HEALTH_CHECK \
        --global
    

    區域

    如要查看區域性外部應用程式負載平衡器,請使用下列指令:

    gcloud compute backend-services create BACKEND_SERVICE_IPV6 \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --ip-address-selection-policy=PREFER_IPV6 \
        --health-checks=HEALTH_CHECK \
        --region=REGION
    

    如要使用區域性內部應用程式負載平衡器,請使用下列指令:

    gcloud compute backend-services create BACKEND_SERVICE_IPV6 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=HTTP \
        --ip-address-selection-policy=PREFER_IPV6 \
        --health-checks=HEALTH_CHECK \
        --region=REGION
    
  3. 將雙層區域 NEG 新增至後端服務,做為後端使用。

    全球

    如要查看全域外部應用程式負載平衡器,請使用下列指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --network-endpoint-group=ZONAL_NEG \
         --network-endpoint-group-zone=ZONE \
         --max-rate-per-endpoint=10 \
         --global
    

    跨區域

    如要使用跨區域內部應用程式負載平衡器,請使用以下指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --network-endpoint-group=ZONAL_NEG \
         --network-endpoint-group-zone=ZONE \
         --max-rate-per-endpoint=10 \
         --global
    

    區域

    如要使用區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請使用下列指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --network-endpoint-group=ZONAL_NEG \
         --network-endpoint-group-zone=ZONE \
         --max-rate-per-endpoint=10 \
         --region=REGION
    
  4. 將雙層堆疊執行個體群組新增至後端服務,做為後端使用。

    全球

    如要查看全域外部應用程式負載平衡器,請使用下列指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --instance-group=INSTANCE_GROUP \
         --global
    

    跨區域

    如要使用跨區域內部應用程式負載平衡器,請使用以下指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --instance-group=INSTANCE_GROUP \
         --global
    

    區域

    如要使用區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請使用下列指令:

     gcloud compute backend-services add-backend BACKEND_SERVICE_IPV6 \
         --instance-group=INSTANCE_GROUP \
         --region=REGION
    
  5. 僅適用於全球外部應用程式負載平衡器。為全域外部應用程式負載平衡器建立 IPv6 轉送規則。使用以下指令:

     gcloud compute forwarding-rules create FORWARDING_RULE_IPV6 \
         --load-balancing-scheme=EXTERNAL_MANAGED \
         --network-tier=PREMIUM \
         --global \
         --target-http-proxy=TARGET_PROXY \
         --ports=443
    

將流量轉送至新的 IPv6 後端服務

更新網址對應,將部分用戶端流量導向至新的 IPv6 後端服務 BACKEND_SERVICE_IPV6

  1. 使用下列指令編輯網址對應:

    全球

    如要查看全域外部應用程式負載平衡器,請使用下列指令:

      gcloud compute url-maps edit URL_MAP \
          --global
      

    跨區域

    如要使用跨區域內部應用程式負載平衡器,請使用以下指令:

      gcloud compute url-maps edit URL_MAP \
          --global
      

    區域

    如要使用區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,請使用下列指令:

       gcloud compute url-maps edit URL_MAP \
           --region=REGION
       
  2. 在隨即顯示的文字編輯器中,新增 routeRuleweightedBackendServices 動作,將部分 IPv6 流量導向 BACKEND_SERVICE_IPV6

    defaultService: global/backendServices/BACKEND_SERVICE
    hostRules:
    - hosts:
      - '*'
      pathMatcher: matcher1
    name: URL_MAP
    pathMatchers:
    - defaultService: global/backendServices/BACKEND_SERVICE
      name: matcher1
      routeRules:
      - matchRules:
        - prefixMatch: ''
        priority: 1
        routeAction:
          weightedBackendServices:
          - backendService: global/backendServices/BACKEND_SERVICE
            weight: 95
          - backendService: global/backendServices/BACKEND_SERVICE_IPV6
            weight: 5
    

如要逐步遷移至 IPv6,請多次編輯網址對應,將新後端服務 BACKEND_SERVICE_IPV6 的權重百分比逐漸提高至 100%。

設定 IP 位址選擇政策

將資源和後端轉換為雙重堆疊後,您可以使用 IP 位址選取政策,指定從後端服務傳送至後端的流量類型。

IP_ADDRESS_SELECTION_POLICY 替換為下列任一值:

IP 位址選擇政策 說明
僅限 IPv4 無論從用戶端傳送至 GFE 的流量為何,都只將 IPv4 流量傳送至後端服務的後端。只有 IPv4 健康狀態檢查可用於檢查後端的健康狀態。
偏好使用 IPv6

將後端的 IPv6 連線優先於 IPv4 連線 (如果有含 IPv6 位址的正常後端)。

健康狀態檢查會定期監控後端的 IPv6 和 IPv4 連線。GFE 會先嘗試 IPv6 連線;如果 IPv6 連線中斷或速度太慢,GFE 會使用 happy eyeballs 備用連線,並連線至 IPv4。

即使其中一個 IPv6 或 IPv4 連線不健康,後端仍會視為健康,且 GFE 可嘗試兩個連線,最終由使用者決定要使用哪一個。

僅限 IPv6

無論從用戶端傳送至 Proxy 的流量為何,都只將 IPv6 流量傳送至後端服務的後端。僅使用 IPv6 健康狀態檢查來檢查後端的健康狀態。

系統不會驗證後端流量類型是否符合 IP 位址選擇政策。舉例來說,如果您只有 IPv4 後端,並選取 Only IPv6 做為 IP 位址選取政策,由於流量無法抵達這些後端,且 HTTP 503 回應碼會傳回至用戶端,因此這項設定會導致後端不健康。

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「負載平衡」

  2. 按一下負載平衡器的名稱。

  3. 按一下 [編輯]

  4. 按一下「後端設定」

  5. 在「Backend service」(後端服務) 欄位中,選取 BACKEND_SERVICE_IPV6

  6. 「後端類型」必須是「區域性網路端點群組」或「執行個體群組」

  7. 在「IP 位址選擇政策」清單中選取「IP_ADDRESS_SELECTION_POLICY」。

  8. 按一下 [完成]

gcloud

更新後端服務的 IP 位址選擇政策:

全球

如要查看全域外部應用程式負載平衡器,請使用下列指令:

gcloud compute backend-services update BACKEND_SERVICE_IPV6 \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --ip-address-selection-policy=IP_ADDRESS_SELECTION_POLICY \
    --global

跨區域

如要使用跨區域內部應用程式負載平衡器,請使用以下指令:

gcloud compute backend-services update BACKEND_SERVICE_IPV6 \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --ip-address-selection-policy=IP_ADDRESS_SELECTION_POLICY \
    --global

區域

如要查看區域性外部應用程式負載平衡器,請使用下列指令:

gcloud compute backend-services update BACKEND_SERVICE_IPV6 \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --ip-address-selection-policy=IP_ADDRESS_SELECTION_POLICY \
    --region=REGION

如要使用區域性內部應用程式負載平衡器,請使用下列指令:

gcloud compute backend-services update BACKEND_SERVICE_IPV6 \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --ip-address-selection-policy=IP_ADDRESS_SELECTION_POLICY \
    --region=REGION

測試負載平衡器

您必須驗證所有必要資源是否已更新為雙層架構。更新所有資源後,流量就會自動流向後端。您可以查看記錄,確認轉換是否完成。

測試負載平衡器,確認遷移作業成功,且流量可如預期地傳送至後端。

查詢負載平衡器 IP 位址

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「負載平衡」

  2. 按一下負載平衡器的名稱。

  3. 在「Frontend」部分中,系統會顯示兩個負載平衡器 IP 位址。在這個程序中,IPv4 位址稱為 IP_ADDRESS_IPV4,IPv6 位址則稱為 IP_ADDRESS_IPV6

  4. 在「Backends」區段中,如果 IP 位址選取政策為 Prefer IPv6,系統會為後端顯示兩種健康狀態檢查狀態。

將流量傳送至負載平衡器

在這個範例中,curl 指令的要求會隨機分配至後端。

外部負載平衡器

  1. 重複執行下列指令幾次,直到所有後端 VM 都回應為止:

    curl -m1 IP_ADDRESS_IPV4:PORT
    
    curl -m1 IP_ADDRESS_IPV6:PORT
    

    舉例來說,如果 IPv6 位址為 [fd20:1db0:b882:802:0:46:0:0]:80,指令會類似以下內容:

    curl -m1 [fd20:1db0:b882:802:0:46:0:0]:80
    

適用於內部負載平衡器

  1. 在與負載平衡器相同的 VPC 網路和地區中,建立測試用戶端 VM。但不必位於相同的子網路或區域。

    gcloud compute instances create client-vm \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh \
        --subnet=SUBNET
    
  2. 使用 SSH 連線至用戶端執行個體。

    gcloud compute ssh client-vm \
        --zone=ZONE
    
  3. 重複執行下列指令幾次,直到所有後端 VM 都回應為止:

    curl -m1 IP_ADDRESS_IPV4:PORT
    
    curl -m1 IP_ADDRESS_IPV6:PORT
    

    舉例來說,如果 IPv6 位址為 [fd20:1db0:b882:802:0:46:0:0]:80,指令會類似以下內容:

    curl -m1 [fd20:1db0:b882:802:0:46:0:0]:80
    

檢查記錄

每個記錄項目都會擷取後端的目的地 IPv4 和 IPv6 位址。由於我們支援雙堆疊,因此請務必觀察後端使用的 IP 位址。

您可以查看記錄,確認流量是否會轉送至 IPv6 或回復至 IPv4。

HttpRequest 包含與後端相關聯的 backend_ip 位址。您可以查看記錄,並比較 backend_ip 的目的地 IPv4 和 IPv6 位址,確認系統使用哪個 IP 位址。