針對多個 IP 通訊協定設定外部直通式網路負載平衡器

本指南提供操作說明,協助您建立以後端服務為依據的外部直通式網路負載平衡器,以便負載平衡 TCP、UDP、ESP、GRE、ICMP 和 ICMPv6 流量。您可以使用這類設定,為使用 TCP 或 UDP 以外的 IP 通訊協定進行負載平衡流量。目標集區型外部直通式網路負載平衡器不支援這項功能。

如要針對 TCP 或 UDP 以外的 IP 通訊協定設定外部轉送網路負載平衡器,請建立轉送規則,並將通訊協定設為 L3_DEFAULT。此轉送規則會指向通訊協定設為 UNSPECIFIED 的後端服務。

在這個範例中,我們使用兩個外部直通網路負載平衡器,將流量分配給 us-central1 區域中兩個區域性代管執行個體群組的後端 VM。兩個負載平衡器都會透過相同的外部 IP 位址接收流量。

一個負載平衡器的轉送規則使用 TCP 通訊協定和 80 通訊埠,另一個負載平衡器的轉送規則使用 L3_DEFAULT 通訊協定。抵達通訊埠 80 上 IP 位址的 TCP 流量會由 TCP 轉送規則處理。所有不符合 TCP 專屬轉送規則的流量,都會由 L3_DEFAULT 轉送規則處理。

使用可用區代管執行個體群組的外部直通式網路負載平衡器。
具有區域管理執行個體群組的外部直通式網路負載平衡器 (按一下可放大)。

這個情境會將流量分散至健康狀態良好的執行個體。為支援這項功能,您需要建立 TCP 健康狀態檢查,確保流量只會傳送至健康的執行個體。

外部直通式網路負載平衡器是一種區域負載平衡器。所有負載平衡器元件都必須位於同一個區域。

事前準備

安裝 Google Cloud CLI。如需工具的完整總覽,請參閱 gcloud CLI 總覽。您可以在 API 和 gcloud 參考資料中找到與負載平衡相關的指令。

如果您先前沒有執行過 gcloud CLI,請先執行 gcloud init 指令進行驗證。

本指南假設您已熟悉 bash

設定網路和子網路

本頁範例使用名為 lb-network 的自訂模式虛擬私有雲網路。如果您只想處理 IPv4 流量,可以使用自動模式虛擬私有雲網路。不過,IPv6 流量需要自訂模式子網路

IPv6 流量也需要雙重堆疊子網路 (stack-type 設為 IPv4_IPv6)。在自訂模式虛擬私有雲網路中建立雙重堆疊子網路時,您可以為子網路選擇 IPv6 存取類型。在這個範例中,我們將子網路的 ipv6-access-type 參數設為 EXTERNAL。也就是說,這個子網路中的新 VM 可同時指派外部 IPv4 位址和外部 IPv6 位址。轉送規則也可以同時指派外部 IPv4 位址和外部 IPv6 位址。

本例中使用的後端和負載平衡器元件位於以下地區和子網路:

  • 區域:us-central1
  • 子網路:lb-subnet,主要 IPv4 位址範圍為 10.1.2.0/24。雖然您可以選擇在子網路上設定哪個 IPv4 位址範圍,但系統會自動指派 IPv6 位址範圍。Google 提供固定大小 (/64) 的 IPv6 CIDR 區塊。

如要建立範例網路和子網路,請按照以下步驟操作。

主控台

如要同時支援 IPv4 和 IPv6 流量,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

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

  2. 按一下「建立虛擬私有雲網路」

  3. 輸入 lb-network 的「Name」

  4. 在「Subnets」(子網路) 區段中:

    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,設定下列欄位,然後按一下「Done」
      • Name (名稱):lb-subnet
      • Region (區域):us-central1
      • IP 堆疊類型IPv4 和 IPv6 (雙重堆疊)
      • IPv4 範圍10.1.2.0/24
        雖然您可以為子網路設定 IPv4 位址範圍,但無法選擇子網路的 IPv6 位址範圍。Google 提供固定大小 (/64) 的 IPv6 CIDR 區塊。
      • IPv6 存取權類型外部
  5. 按一下 [建立]。

如要支援僅 IPv4 流量,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

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

  2. 按一下「建立虛擬私有雲網路」

  3. 輸入 lb-network 的「Name」

  4. 在「Subnets」(子網路) 區段中:

    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,設定下列欄位,然後按一下「Done」
      • Name (名稱):lb-subnet
      • Region (區域):us-central1
      • IP stack type (IP 堆疊類型):IPv4 (單一堆疊)
      • IPv4 範圍10.1.2.0/24
  5. 按一下 [建立]。

gcloud

  1. 建立自訂模式虛擬私有雲網路:

    gcloud compute networks create lb-network \
        --subnet-mode=custom
    
  2. lb-network 網路中,為 us-central1 地區的後端建立子網路。

    如要同時支援 IPv4 和 IPv6 流量,請使用下列指令建立雙重堆疊子網路:

    gcloud compute networks subnets create lb-subnet \
        --stack-type=IPV4_IPv6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-central1
    

    如要只測試 IPv4 流量,請使用下列指令:

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-central1
    

建立區域代管執行個體群組

針對這個負載平衡情境,您將建立兩個 Compute Engine 區域管理執行個體群組,並在每個執行個體上安裝 Apache 網路伺服器。

如要同時處理 IPv4 和 IPv6 流量,請將後端 VM 設為雙重堆疊。將 VM 的 stack-type 設為 IPv4_IPv6。這些 VM 也會從子網路繼承 ipv6-access-type 設定 (在本例中為 EXTERNAL)。如要進一步瞭解 IPv6 需求,請參閱外部直通式網路負載平衡器總覽:轉送規則

如要將現有 VM 用作後端,請使用 gcloud compute instances network-interfaces update 指令將 VM 更新為雙層堆疊。

做為外部直通式網路負載平衡器的後端 VM 的執行個體,必須執行適當的 Linux 訪客環境Windows 訪客環境或其他提供等效功能的處理程序。

建立執行個體群組,以便透過通訊埠 80 傳送 TCP 流量

主控台

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

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

    1. 點選「建立執行個體範本」
    2. 在「Name」(名稱) 中輸入 ig-us-template-tcp-80
    3. 確認將開機磁碟設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如 apt-get
    4. 展開「Advanced options」(進階選項) 區段。
    5. 展開「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
      
    6. 展開「Networking」 專區,然後指定下列項目:

      1. 在「網路標記」部分新增 network-lb-tcp-80
      2. 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
        1. Network (網路):lb-network
        2. Subnetwork (子網路):lb-subnet
    7. 按一下 [建立]。

  2. 建立代管執行個體群組。前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

    1. 點選「建立執行個體群組」
    2. 選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
    3. 在「Name」 中輸入 ig-us-tcp-80
    4. 在「Location」(位置) 底下,選取 [Single zone] (單一區域)。
    5. 在「區域」部分,選取 us-central1
    6. 在「可用區」部分,選取 us-central1-a
    7. 在「Instance template」(執行個體範本) 下,選取 ig-us-template-tcp-80
    8. 指定要在群組中建立的執行個體數量。

      在本例中,請在「Autoscaling」(自動調度資源) 下指定下列選項:

      • 針對「Autoscaling mode」(自動調度資源模式),選取 Off:do not autoscale
      • 在「Maximum number of instances」(執行個體數量上限) 中輸入 2
    9. 按一下 [建立]。

gcloud

本指南的 gcloud 操作說明假設您使用 Cloud Shell 或已安裝 bash 的其他環境。

  1. 使用 gcloud compute instance-templates create 指令,建立含有 HTTP 伺服器的 VM 執行個體範本。

    如要同時處理 IPv4 和 IPv6 流量,請使用下列指令。

      gcloud compute instance-templates create ig-us-template-tcp-80 \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --ipv6-network-tier=PREMIUM \
          --stack-type=IPv4_IPv6 \
          --tags=network-lb-tcp-80 \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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'
    

    或者,如果您只想處理 IPv4 流量,請使用下列指令。

      gcloud compute instance-templates create ig-us-template-tcp-80 \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --tags=network-lb-tcp-80 \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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" \
                  ://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. 使用 gcloud compute instance-groups managed create 指令,在區域中建立代管執行個體群組。

      gcloud compute instance-groups managed create ig-us-tcp-80 \
          --zone us-central1-a \
          --size 2 \
          --template ig-us-template-tcp-80
    

建立適用於通訊埠 8080、UDP、ESP 和 ICMP 流量的 TCP 執行個體群組

主控台

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

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

    1. 點選「建立執行個體範本」
    2. 在「Name」 中輸入 ig-us-template-l3-default
    3. 確認將開機磁碟設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如 apt-get
    4. 展開「Advanced options」(進階選項) 區段。
    5. 展開「Management」(管理) 區段,然後將下列指令碼複製到「Startup script」(開機指令碼) 欄位。開機指令碼也會將 Apache 伺服器設定為監聽通訊埠 8080,而非通訊埠 80。

      #! /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
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. 展開「Networking」 專區,然後指定下列項目:

      1. 在「網路標記」部分新增 network-lb-l3-default
      2. 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
        1. Network (網路):lb-network
        2. Subnetwork (子網路):lb-subnet
    7. 按一下 [建立]。

  2. 建立代管執行個體群組。前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

    1. 點選「建立執行個體群組」
    2. 選擇「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
    3. 在「Name」 中輸入 ig-us-l3-default
    4. 在「Location」(位置) 底下,選取 [Single zone] (單一區域)。
    5. 在「區域」部分,選取 us-central1
    6. 在「可用區」部分,選取 us-central1-c
    7. 在「Instance template」(執行個體範本) 下,選取 ig-us-template-l3-default
    8. 指定要在群組中建立的執行個體數量。

      在本例中,請在「Autoscaling」(自動調度資源) 下指定下列選項:

      • 針對「Autoscaling mode」(自動調度資源模式),選取 Off:do not autoscale
      • 在「Maximum number of instances」(執行個體數量上限) 中輸入 2
    9. 按一下 [建立]。

gcloud

本指南的 gcloud 操作說明假設您使用 Cloud Shell 或已安裝 bash 的其他環境。

  1. 使用 gcloud compute instance-templates create 指令,建立含有 HTTP 伺服器的 VM 執行個體範本。

    開機指令碼也會將 Apache 伺服器設為監聽通訊埠 8080,而非通訊埠 80。

    如要同時處理 IPv4 和 IPv6 流量,請使用下列指令。

      gcloud compute instance-templates create ig-us-template-l3-default \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --ipv6-network-tier=PREMIUM \
          --stack-type=IPv4_IPv6 \
          --tags=network-lb-l3-default \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    

    或者,如果您只想處理 IPv4 流量,請使用下列指令。

      gcloud compute instance-templates create ig-us-template-l3-default \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --tags=network-lb-l3-default \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    
  2. 使用 gcloud compute instance-groups managed create 指令,在區域中建立代管執行個體群組。

      gcloud compute instance-groups managed create ig-us-l3-default \
          --zone us-central1-c \
          --size 2 \
          --template ig-us-template-l3-default
    

設定防火牆規則

建立下列防火牆規則:

  • 防火牆規則,允許外部 TCP 流量透過通訊埠 80 (使用目標標記 network-lb-tcp-80) 到達 ig-us-tcp-80 執行個體群組中的後端執行個體。請建立個別的防火牆規則,允許 IPv4 和 IPv6 流量。
  • 防火牆規則可允許其他外部流量 (通訊埠 8080 上的 TCP、UDP、ESP 和 ICMP) 到達 ig-us-l3-default 執行個體群組中的後端執行個體 (使用目標標記 network-lb-l3-default)。建立個別防火牆規則,允許 IPv4 和 IPv6 流量。

本範例會建立防火牆規則,允許所有來源範圍的流量透過已設定的通訊埠傳送至後端執行個體。如果您想為健康狀態檢查探測器建立專屬的防火牆規則,請使用「健康狀態檢查總覽:探測器 IP 範圍和防火牆規則」一文中所述的來源 IP 位址範圍。

主控台

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

    前往「防火牆政策」

  2. 如要允許 IPv4 TCP 流量連往 ig-us-tcp-80 執行個體群組中的後端,請建立下列防火牆規則。

    1. 點按「建立防火牆規則」
    2. 輸入 allow-network-lb-tcp-80-ipv4 的「Name」
    3. 選取要套用防火牆規則的網路 (預設)。
    4. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    5. 在「Target tags」(目標標記) 欄位中輸入 network-lb-tcp-80
    6. 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)
    7. 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為 0.0.0.0/0,允許來自任何來源的流量。這樣一來,外部流量和健康狀態檢查探針都能存取後端執行個體。
    8. 在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)。接著選取「TCP」TCP核取方塊,然後輸入 80
    9. 按一下「建立」,新的防火牆規則可能需要一些時間才會顯示在主控台中,或者您可能需要按一下「Refresh」(重新整理) 才能看到規則。
  3. 如要允許 IPv4 UDP、ESP 和 ICMP 流量連往 ig-us-l3-default 執行個體群組中的後端,請建立下列防火牆規則。

    1. 點按「建立防火牆規則」
    2. 輸入 allow-network-lb-l3-default-ipv4 的「Name」
    3. 選取要套用防火牆規則的網路 (預設)。
    4. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    5. 在「Target tags」(目標標記) 欄位中輸入 network-lb-l3-default
    6. 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)
    7. 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為 0.0.0.0/0,允許來自任何來源的流量。這樣一來,外部流量和健康狀態檢查探針都能存取後端執行個體。
    8. 在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)
      1. 勾選「TCP」TCP核取方塊,然後輸入 8080
      2. 勾選「UDP」UDP核取方塊。
      3. 選取「其他」核取方塊,然後輸入 esp, icmp
    9. 按一下「建立」,新的防火牆規則可能需要一些時間才會顯示在主控台中,或者您可能需要按一下「Refresh」(重新整理) 才能看到規則。
  4. 如要允許 IPv6 TCP 流量連往 ig-us-tcp-80 執行個體群組中的後端,請建立下列防火牆規則。

    1. 點按「建立防火牆規則」
    2. 輸入 allow-network-lb-tcp-80-ipv6 的「Name」
    3. 選取要套用防火牆規則的網路 (預設)。
    4. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    5. 在「Target tags」(目標標記) 欄位中輸入 network-lb-tcp-80
    6. 將「Source filter」(來源篩選器) 設為「IPv6 ranges」(IPv6 範圍)
    7. 將「Source IPv6 ranges」(來源 IPv6 範圍) 設為 ::/0,允許來自任何來源的流量。這樣一來,外部流量和健康狀態檢查探針都能存取後端執行個體。
    8. 在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)。勾選「TCP」TCP旁的核取方塊,然後輸入 80
    9. 按一下「建立」,新的防火牆規則可能需要一些時間才會顯示在主控台中,或者您可能需要按一下「Refresh」(重新整理) 才能看到規則。
  5. 如要允許 IPv6 UDP、ESP 和 ICMPv6 流量存取 ig-us-l3-default 執行個體群組中的後端,請建立下列防火牆規則。這項防火牆規則也會允許 TCP 健康檢查探測器連線至通訊埠 8080 上的執行個體。

    1. 點按「建立防火牆規則」
    2. 輸入 allow-network-lb-l3-default-ipv6 的「Name」
    3. 選取要套用防火牆規則的網路 (預設)。
    4. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    5. 在「Target tags」(目標標記) 欄位中輸入 network-lb-l3-default
    6. 將「Source filter」(來源篩選器) 設為「IPv6 ranges」(IPv6 範圍)
    7. 將「Source IPv6 ranges」(來源 IPv6 範圍) 設為 ::/0,允許來自任何來源的流量。這樣一來,外部流量和健康狀態檢查探針都能存取後端執行個體。
    8. 在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)
      1. 勾選「TCP」TCP旁的核取方塊,然後輸入 8080
      2. 勾選「UDP」UDP旁的核取方塊。
      3. 按一下「其他」旁邊的核取方塊,然後輸入 esp, 58
    9. 按一下「建立」,新的防火牆規則可能需要一些時間才會顯示在主控台中,或者您可能需要按一下「Refresh」(重新整理) 才能看到規則。

gcloud

  1. 如要允許 IPv4 TCP 流量連往 ig-us-tcp-80 執行個體群組中的後端,請建立下列防火牆規則。

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. 如要允許 IPv4 UDP、ESP 和 ICMP 流量連往 ig-us-l3-default 執行個體群組中的後端,請建立下列防火牆規則。這項防火牆規則也會允許 TCP 健康檢查探測器連線至通訊埠 8080 上的執行個體。

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. 如要允許 IPv6 TCP 流量連往 ig-us-tcp-80 執行個體群組中的後端,請建立下列防火牆規則。

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. 如要允許 IPv6 UDP、ESP 和 ICMPv6 流量存取 ig-us-l3-default 執行個體群組中的後端,請建立下列防火牆規則。這項防火牆規則也會允許 TCP 健康檢查探測器連線至通訊埠 8080 上的執行個體。

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

設定負載平衡器

接下來,請設定兩個負載平衡器。請將兩個負載平衡器都設定為使用相同的外部 IP 位址,以便轉送規則中,一個負載平衡器處理通訊埠 80 上的 TCP 流量,另一個負載平衡器處理通訊埠 8080 上的 TCP、UDP、ESP 和 ICMP 流量。

設定負載平衡器時,後端 VM 執行個體會收到預定傳送至您設定之靜態外部 IP 位址的封包。如果您是使用 Compute Engine 提供的映像檔,則會將執行個體自動設定為處理這個 IP 位址。如果您是使用任何其他映像檔,則必須將這個位址設定為 eth0 上的別名,或每個執行個體上的回送。

如要設定兩個負載平衡器,請按照下列操作說明操作。

主控台

開始設定

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

    前往「負載平衡」

  2. 點選「建立負載平衡器」
  3. 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」
  4. 在「直通或使用 Proxy」部分,選取「直通式負載平衡器」,然後點選「下一步」
  5. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  6. 按一下 [設定]

基本設定

  1. 在「Name」欄位中,輸入新負載平衡器的名稱 backend-service-tcp-80
  2. 在「Region」(區域) 清單中選取「us-central1」。

後端設定

  1. 按一下「後端設定」
  2. 在「Backend configuration」(後端設定) 頁面中進行以下變更:
    1. 在「New Backend」區段中,選取「IP stack type」。如果您建立雙重堆疊後端來處理 IPv4 和 IPv6 流量,請選取「IPv4 和 IPv6 (雙重堆疊)」。如要僅處理 IPv4 流量,請選取「IPv4 (單一堆疊)」
    2. 在「Instance group」清單中選取 ig-us-tcp-80,然後按一下「Done」
    3. 在「Health check」清單中,按一下「Create a health check」,然後輸入下列資訊:
      • Name (名稱):tcp-health-check-80
      • Protocol (通訊協定):TCP
      • Port (通訊埠):80
    4. 按一下 [儲存]
  3. 繼續操作之前,請先驗證「Backend configuration」(後端設定)旁是否有藍色勾號。

前端設定

  1. 按一下「前端設定」
  2. 在「Name」(名稱) 欄位中輸入 forwarding-rule-tcp-80
  3. 如要處理 IPv4 流量,請按照下列步驟操作:
    1. 在「IP 版本」部分,選取「IPv4」
    2. 在「Internal IP purpose」(內部 IP 用途) 區段的「IP address」(IP 位址) 清單中,選取「Create IP address」(建立 IP 位址)
      1. 在「Name」(名稱) 欄位中輸入 network-lb-ipv4
      2. 按一下「保留」
    3. 在「Ports」(通訊埠) 部分,選擇「Single」(單一)。在「Port number」(通訊埠編號) 欄位中輸入 80
    4. 按一下 [完成]
  4. 如要處理 IPv6 流量,請按照下列步驟操作:

    1. 在「IP 版本」中,選取「IPv6」
    2. 在「Subnetwork」(子網路) 中,選取「lb-subnet」
    3. 在「IPv6 range」(IPv6 範圍) 清單中,選取「Create IP address」(建立 IP 位址)
      1. 在「Name」(名稱) 欄位中輸入 network-lb-ipv6
      2. 按一下「保留」
    4. 在「Ports」(通訊埠) 部分,選擇「Single」(單一)。在「Port number」(通訊埠編號) 欄位中輸入 80
    5. 按一下 [完成]

    如果「Frontend configuration」(前端設定) 左邊顯示具有勾號的藍色圓圈,即表示設定成功。

檢閱設定

  1. 按一下「檢查並完成」
  2. 查看負載平衡器設定。
  3. 選用:按一下「等效程式碼」,查看用來建立負載平衡器的 REST API 要求。
  4. 按一下 [建立]。

    在負載平衡頁面的新負載平衡器的「Backend」(後端) 欄下方,您會看到綠色勾號,表示新負載平衡器健康狀態良好。

建立第二個負載平衡器

開始設定

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

    前往「負載平衡」

  2. 點選「建立負載平衡器」
  3. 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」
  4. 在「直通或使用 Proxy」部分,選取「直通式負載平衡器」,然後點選「下一步」
  5. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  6. 按一下 [設定]

基本設定

  1. 在「Name」欄位中,輸入新負載平衡器的名稱 backend-service-l3-default
  2. 在「Region」(區域) 清單中選取「us-central1」。

後端設定

  1. 按一下「後端設定」
  2. 在「Backend configuration」(後端設定) 頁面中進行以下變更:
    1. 在「New Backend」區段中,選取「IP stack type」。如果您建立雙重堆疊後端來處理 IPv4 和 IPv6 流量,請選取「IPv4 和 IPv6 (雙重堆疊)」。如要僅處理 IPv4 流量,請選取「IPv4 (單一堆疊)」
    2. 在「Instance group」清單中選取 ig-us-l3-default,然後按一下「Done」
    3. 在「Protocols」清單中,選取「L3 (多項通訊協定)」
    4. 在「Health check」清單中,按一下「Create a health check」,然後輸入下列資訊:
      • Name (名稱):tcp-health-check-8080
      • Protocol (通訊協定):TCP
      • Port (通訊埠):8080
    5. 按一下 [儲存]
  3. 繼續操作之前,請先驗證「Backend configuration」(後端設定)旁是否有藍色勾號。

前端設定

  1. 按一下「前端設定」
  2. 在「Name」(名稱) 欄位中輸入 forwarding-rule-l3-default
  3. 如要處理 IPv4 流量,請按照下列步驟操作:
    1. 在「IP 版本」部分,選取「IPv4」
    2. 在「Internal IP purpose」(內部 IP 用途) 區段的「IP address」(IP 位址) 清單中,選取「Create IP address」(建立 IP 位址)
      1. 在「Name」(名稱) 欄位中輸入 network-lb-ipv4
      2. 按一下「保留」
    3. 在「Protocol」清單中,選取「L3 (多項通訊協定)」
    4. 在「通訊埠」部分,選擇「全部」
    5. 按一下 [完成]
  4. 如要處理 IPv6 流量,請按照下列步驟操作:

    1. 在「IP 版本」中,選取「IPv6」
    2. 在「Subnetwork」(子網路) 中,選取「lb-subnet」
    3. 在「IPv6 range」(IPv6 範圍) 清單中,選取「Create IP address」(建立 IP 位址)
      1. 在「Name」(名稱) 欄位中輸入 network-lb-ipv6
      2. 按一下「保留」
    4. 在「Protocol」欄位中,選取「L3 (多項通訊協定)」
    5. 在「通訊埠」部分,選取「全部」
    6. 按一下 [完成]

    如果「Frontend configuration」(前端設定) 左邊顯示具有勾號的藍色圓圈,即表示設定成功。

檢閱設定

  1. 按一下「檢查並完成」
  2. 查看負載平衡器設定。
  3. 選用:按一下「等效程式碼」,查看用來建立負載平衡器的 REST API 要求。
  4. 按一下 [建立]。

    在負載平衡頁面的新負載平衡器的「Backend」(後端) 欄下方,您會看到綠色勾號,表示新負載平衡器健康狀態良好。

gcloud

  1. 保留靜態外部 IP 位址。

    IPv4 流量:為負載平衡器建立靜態外部 IP 位址

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    針對 IPv6 流量:為負載平衡器建立靜態外部 IPv6 位址範圍。使用的子網路必須是具有外部 IPv6 子網路範圍的雙重堆疊子網路。

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. 為通訊埠 80 建立 TCP 健康狀態檢查。這項健康狀態檢查可用於驗證 ig-us-tcp-80 執行個體群組中後端的健康狀態。

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. 為通訊埠 8080 建立 TCP 健康狀態檢查。這項健康狀態檢查可用於驗證 ig-us-l3-default 執行個體群組中後端的健康狀態。

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. 為通訊埠 80 上的 TCP 流量建立第一個負載平衡器。

    1. 建立後端服務,並將通訊協定設為 TCP

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. 將後端執行個體群組新增至後端服務。

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. 針對 IPv4 流量:建立轉送規則,將通訊埠 80 上的 TCP 流量轉送至後端服務。TCP 是預設的轉送規則通訊協定,不需要明確設定。

      使用步驟 1 中保留的 IP 位址,做為負載平衡器的靜態外部 IP 位址。

      gcloud compute forwarding-rules create forwarding-rule-tcp-80 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. 針對 IPv6 流量:建立轉送規則,將通訊埠 80 上的傳入 TCP 流量轉送至後端服務。TCP 是預設的轉送規則通訊協定,不需要明確設定。

      使用步驟 1 中保留的 IPv6 位址範圍,做為負載平衡器的靜態外部 IP 位址。使用的子網路必須是具有外部 IPv6 子網路範圍的雙重堆疊子網路。

      gcloud compute forwarding-rules create forwarding-rule-tcp-80 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. 在 8080 埠上建立 TCP、UDP、ESP 和 ICMP 流量的第二個負載平衡器。

    1. 建立後端服務,並將通訊協定設為 UNSPECIFIED

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. 將後端執行個體群組新增至後端服務。

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. 針對 IPv4 流量:建立轉送規則,並將通訊協定設為 L3_DEFAULT,以處理所有其他支援的 IP 通訊協定流量 (TCP 在 8080 埠、UDP、ESP 和 ICMP)。所有通訊埠都必須設定 L3_DEFAULT 轉送規則。

      使用先前負載平衡器使用的外部 IPv4 位址。

      gcloud compute forwarding-rules create forwarding-rule-l3-default \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. 針對 IPv6 流量:建立轉送規則,並將通訊協定設為 L3_DEFAULT,以便處理所有其他支援的 IP 通訊協定流量 (TCP 在通訊埠 8080 上、UDP、ESP 和 ICMP)。所有通訊埠都必須設定 L3_DEFAULT 轉送規則。

      使用步驟 1 中保留的 IPv6 位址範圍,做為負載平衡器的靜態外部 IP 位址。使用的子網路必須是具有外部 IPv6 子網路範圍的雙重堆疊子網路。

      gcloud compute forwarding-rules create forwarding-rule-l3-default \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

測試負載平衡器

負載平衡服務已設定完成,您現在可以開始將流量傳送至負載平衡器的外部 IP 位址,並觀察流量是否分散到後端執行個體。

查詢負載平衡器的外部 IP 位址

主控台

  1. 前往 Google Cloud 控制台的「負載平衡元件」負載平衡頁面。

    前往「負載平衡元件」

  2. 在「Forwarding Rules」分頁中,找出負載平衡器使用的轉送規則。

  3. 在「IP Address」欄中,請注意列出的每個 IPv4 和 IPv6 轉送規則的外部 IP 位址。

gcloud:IPv4

輸入下列指令,查看負載平衡器所用轉送規則的外部 IP 位址。

gcloud compute forwarding-rules describe forwarding-rule-tcp-80 \
    --region us-central1

這個範例會為兩個 IPv4 轉送規則使用相同的 IP 位址,因此使用 forwarding-rule-l3-default 也適用。

gcloud:IPv6

輸入下列指令,查看負載平衡器所用 forwarding-rule-tcp-80 轉送規則的外部 IPv6 位址。

gcloud compute forwarding-rules describe forwarding-rule-tcp-80 \
    --region us-central1

這個範例會為兩個 IPv6 轉送規則使用相同的 IP 位址,因此使用 forwarding-rule-l3-default 也能正常運作。

將流量傳送至負載平衡器

這個程序會將外部流量傳送至負載平衡器。請執行下列測試,確保 ig-us-tcp-80 執行個體群組負責負載平衡通訊埠 80 上的 TCP 流量,而 ig-us-l3-default 執行個體群組負責處理所有其他流量 (通訊埠 8080 上的 TCP、UDP、ESP 和 ICMP)。

透過通訊埠 80 的 TCP 要求驗證行為

  1. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求 (透過通訊埠 80 上的 TCP)。

    • 在具備 IPv4 連線能力的用戶端上,執行下列指令:

      while true; do curl -m1 IP_ADDRESS; done
      
    • 在具備 IPv6 連線能力的用戶端上執行下列指令:

      while true; do curl -m1 http://IPV6_ADDRESS; done
      

      舉例來說,如果指派的 IPv6 位址為 [2001:db8:1:1:1:1:1:1/96],指令會類似下列內容:

      while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. 請注意 curl 指令傳回的文字。產生回應的後端 VM 名稱會顯示在該文字中,例如 Page served from: VM_NAME。回應只來自 ig-us-tcp-80 執行個體群組中的執行個體。

    如果一開始的回應失敗,在您重試之前,可能需要等候大約 30 秒,設定才會完整載入且執行個體才會標示為健康狀態良好。

透過通訊埠 8080 上的 TCP 要求驗證行為

使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求 (透過通訊埠 8080 上的 TCP)。

  • 在具備 IPv4 連線能力的用戶端上,執行下列指令:

    while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • 在具備 IPv6 連線能力的用戶端上執行下列指令:

    while true; do curl -m1 http://IPV6_ADDRESS; done
    

    舉例來說,如果指派的 IPv6 位址為 [2001:db8:1:1:1:1:1/96],指令會類似於以下內容:

    while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

請注意 curl 指令傳回的文字。回應只來自 ig-us-l3-default 執行個體群組中的執行個體。

這表示傳送至負載平衡器 IP 位址 (通訊埠 8080) 的任何流量,都只會由 ig-us-l3-default 例項群組中的後端處理。

使用 ICMP 要求驗證行為

如要驗證 ICMP 流量的行為,請擷取 tcpdump 指令的輸出內容,確認只有 ig-us-l3-default 執行個體群組中的後端 VM 會處理傳送至負載平衡器的 ICMP 要求。

  1. 使用 SSH 連線至後端 VM。

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

      前往 VM 執行個體頁面

    2. 在虛擬機器 (VM) 執行個體清單中,找到您要建立連線的執行個體,然後在該列中按一下 [SSH]SSH

  2. 執行下列指令,使用 tcpdump 開始監聽 ICMP 流量。

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    請不要關閉 SSH 視窗。

  3. 針對所有四個後端 VM 重複執行步驟 1 和 2。

  4. 向負載平衡器提出 ICMP 要求。

    如要測試 IPv4 回應,請使用 ping 聯絡負載平衡器的 IPv4 位址。

    ping IPV4_ADDRESS
    

    如要測試 IPv6 回應,請使用 ping6 聯絡負載平衡器的 IPv6 位址。

    ping6 IPV6_ADDRESS
    

    舉例來說,如果指派的 IPv6 位址為 [2001:db8:1:1:1:1:1/96],指令會類似於以下內容:

    ping6 2001:db8:1:1:1:1:1:1
    
  5. 返回每個 VM 的已開啟 SSH 視窗,並停止 tcpdump 擷取指令。你可以使用 Ctrl+C 鍵進行這項操作。

  6. 針對每個 VM,檢查 icmpcapture.pcap 檔案中的 tcpdump 指令輸出內容。

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    針對 ig-us-l3-default 執行個體群組中的後端 VM,您會看到類似下列的檔案項目:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    針對 ig-us-tcp-80 執行個體群組中的後端 VM,您會發現系統未收到任何封包,且檔案為空白:

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

其他設定選項

使用 BYOIP 建立 IPv6 轉送規則

在前面步驟中建立的負載平衡器會設定轉送規則,其中 IP versionIPv4IPv6。本節提供使用自備 IP (BYOIP) 位址建立 IPv6 轉送規則的操作說明。

自備 IP 位址可讓您為 Google Cloud 資源設定及使用自己的公開 IPv6 位址。詳情請參閱「自備 IP 位址」。

開始設定使用 BYOIP 位址的 IPv6 轉送規則前,您必須完成下列步驟:

  1. 建立公開宣傳的 IPv6 前置碼
  2. 建立公開委派的前置字串
  3. 建立 IPv6 子前置字串
  4. 宣告前置字串

如要建立新的轉送規則,請按照下列步驟操作:

控制台

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

    前往「負載平衡」

  2. 按一下要修改的負載平衡器名稱。
  3. 按一下「編輯」圖示
  4. 按一下「前端設定」
  5. 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)
  6. 在「New Frontend IP and port」(新增的前端 IP 和通訊埠) 區段中,指定下列項目:
    1. 選取所需的「Protocol」(通訊協定)
    2. 在「IP 版本」欄位中,選取「IPv6」
    3. 在「IPv6 範圍來源」欄位中,選取「BYOIP」
    4. 在「IP collection」清單中,選取先前步驟中建立的子前置字串,並啟用轉送規則選項。
    5. 在「IPv6 範圍」欄位中輸入 IPv6 位址範圍。IPv6 位址範圍的前置字串必須與 相關聯子前置字串指定的可分配前置字串長度相符。
    6. 在「Ports」(通訊埠) 欄位中輸入通訊埠號碼。
    7. 按一下 [完成]
  7. 按一下 [Update]

gcloud

使用 gcloud compute forwarding-rules create 指令建立轉送規則:

gcloud compute forwarding-rules create FWD_RULE_NAME \
    --load-balancing-scheme EXTERNAL \
    --ip-protocol PROTOCOL \
    --ports ALL \
    --ip-version IPV6 \
    --region REGION_A \
    --address IPV6_CIDR_RANGE  \
    --backend-service BACKEND_SERVICE \
    --ip-collection PDP_NAME

更改下列內容:

  • FWD_RULE_NAME:轉送規則的名稱
  • PROTOCOL:轉送規則的 IP 通訊協定。預設為 TCP。在這個範例中,IP 通訊協定可以是 TCPL3_DEFAULT 其中之一。
  • REGION_A:轉送規則的區域
  • IPV6_CIDR_RANGE:轉送規則提供的 IPv6 位址範圍。IPv6 位址範圍的前置字串必須與 相關聯子前置字串指定的可分配前置字串長度相符。
  • BACKEND_SERVICE:後端服務名稱
  • PDP_NAME:公開委派前置碼的名稱。PDP 必須是 EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式中的子前置字串

後續步驟