使用 VM 執行個體群組後端設定內部直通式網路負載平衡器,適用於多個通訊協定

本頁面提供建立內部直通式網路負載平衡器的操作說明,以便為多個通訊協定平衡負載流量。

如要為多個通訊協定 (包括 TCP 和 UDP) 設定負載平衡器,請建立轉送規則,並將通訊協定設為 L3_DEFAULT。此轉送規則會指向通訊協定設為 UNSPECIFIED 的後端服務。

在這個範例中,我們使用一個內部直通式網路負載平衡器,將流量分配到 us-west1 地區的後端 VM。負載平衡器含有使用通訊協定 L3_DEFAULT 的轉送規則,可處理 TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE。

根據通訊協定負載平衡 IPv4 和 IPv6 流量,並透過後端服務管理單一區域執行個體群組的連線分配。
適用於多種通訊協定的內部直通式網路負載平衡器 (按一下可放大)。

事前準備

權限

如要取得完成本指南所需的權限,請要求管理員為您授予專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

為 L3_DEFAULT 流量設定負載平衡器

本節的步驟說明以下設定:

  • 使用名為 lb-network自訂模式虛擬私有雲網路的範例。如果您只想處理 IPv4 流量,可以使用自動模式網路。不過,IPv6 流量需要自訂模式子網路
  • 單一堆疊子網路 (stack-type 設為 IPv4),這是 IPv4 流量所需的子網路。在自訂模式虛擬私有雲網路中建立單一堆疊子網路時,您需要為子網路選擇 IPv4 子網路範圍。針對 IPv6 流量,我們需要雙重堆疊子網路 (stack-type 設為 IPv4_IPv6)。在自訂模式虛擬私有雲網路上建立雙重堆疊子網路時,您可以為子網路選擇 IPv6 存取類型。在本範例中,我們將子網路的 ipv6-access-type 參數設為 INTERNAL。這表示這個子網路中的新 VM 可同時指派內部 IPv4 位址和內部 IPv6 位址。
  • 允許連入連線到後端 VM 的防火牆規則。
  • 此範例中使用的後端執行個體群組和負載平衡器元件位於以下區域和子網路:
    • 區域:us-west1
    • 子網路:lb-subnet,主要 IPv4 位址範圍為 10.1.2.0/24。雖然您可以選擇在子網路上設定哪個 IPv4 位址範圍,但系統會自動指派 IPv6 位址範圍。Google 提供固定大小 (/64) 的 IPv6 CIDR 區塊。
  • 區域 us-west1-a 中代管執行個體群組中的後端 VM。
  • 用戶端 VM,用於測試與後端的連線。
  • 內部直通式網路負載平衡器,包含下列元件:
    • 後端服務的健康狀態檢查。
    • 位於 us-west1 地區的後端服務,通訊協定設為 UNSPECIFIED,用於管理區域執行個體群組的連線分配。
    • 轉送規則,其中通訊協定設為 L3_DEFAULT,通訊埠設為 ALL

設定網路、地區和子網路

如要設定內部 IPv6 範圍的子網路,請啟用虛擬私有雲 (VPC) 網路 ULA 內部 IPv6 範圍。內部 IPv6 子網路範圍會從這個範圍分配。如要建立範例網路與子網路,請依照下列步驟操作:

主控台

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

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

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

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

  3. 在「Name」(名稱) 中輸入 lb-network

  4. 如要在這個網路的子網路上設定內部 IPv6 位址範圍,請完成下列步驟:

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

  6. 在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:

    1. 在「Name」(名稱) 中輸入 lb-subnet
    2. 在「Region」(區域) 中選取 us-west1
    3. 如要建立雙重堆疊子網路,請選取「IP 堆疊類型」的「IPv4 和 IPv6 (雙重堆疊)」
    4. 在「IPv4 範圍」中,輸入 10.1.2.0/24
    5. 在「IPv6 存取權類型」部分,選取「內部」
  7. 按一下 [完成]

  8. 按一下 [建立]。

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

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

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

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

  3. 在「Name」(名稱) 中輸入 lb-network

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

    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • Name (名稱):lb-subnet
      • Region (區域):us-west1
      • IP stack type (IP 堆疊類型):IPv4 (單一堆疊)
      • IP address range (IP 位址範圍):10.1.2.0/24
    • 按一下 [完成]
  5. 按一下 [建立]。

gcloud

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

  1. 如要建立新的自訂模式 VPC 網路,請執行 gcloud compute networks create 指令

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

    gcloud compute networks create lb-network \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6
    
  2. lb-network 中,為 us-west1 區域的後端建立子網路。

    如要建立子網路,請執行 gcloud compute networks subnets create 指令

    gcloud compute networks subnets create lb-subnet \
     --network=lb-network \
     --range=10.1.2.0/24 \
     --region=us-west1 \
     --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
    

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

  1. 如要建立自訂虛擬私有雲網路,請使用 gcloud compute networks create 指令:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 如要在 lb-network 網路內的 us-west1 區域中為後端建立子網路,請使用 gcloud compute networks subnets create 指令。

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

API

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

  1. 建立新的自訂模式 VPC 網路。對 networks.insert 方法提出 POST 要求。

    如要在這個網路的任何子網路上設定內部 IPv6 範圍,請將 enableUlaInternalIpv6 設為 true。這個選項會從 Google 用於內部 IPv6 子網路範圍的 fd20::/20 範圍中,指派 /48 範圍。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
      "autoCreateSubnetworks": false,
      "name": "lb-network",
      "mtu": MTU,
      "enableUlaInternalIpv6": true,
    }
    

    更改下列內容:

    • PROJECT_ID:建立 VPC 網路的專案 ID。
    • MTU:網路的最大傳輸單位。MTU 可以是 1460 (預設) 或 1500。請先參閱最大傳輸單位總覽,再將 MTU 設為 1500
  2. subnetworks.insert 方法提出 POST 要求。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
    "ipCidrRange": "10.1.2.0/24",
    "network": "lb-network",
    "name": "lb-subnet"
    "stackType": IPV4_IPV6,
    "ipv6AccessType": Internal
    }
    

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

  1. networks.insert 方法提出 POST 要求。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
    "name": "lb-network",
    "autoCreateSubnetworks": false
    }
    
  2. subnetworks.insert 方法發出兩個 POST 要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
    "name": "lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "ipCidrRange": "10.1.2.0/24",
    "privateIpGoogleAccess": false
    }
    

設定防火牆規則

這個範例使用以下防火牆規則:

  • fw-allow-lb-access:輸入規則,適用於虛擬私人雲端網路中的所有目標,允許來源在 10.1.2.0/24 範圍內的流量。這項規則會允許所有來自子網路用戶端的連入流量。

  • fw-allow-lb-access-ipv6:輸入規則,適用於虛擬私人雲端網路中的所有目標,允許來源在子網路中設定的 IPv6 範圍內的流量。這項規則會允許所有來自子網路用戶端的 IPv6 流量。

  • fw-allow-ssh:輸入規則,適用於要進行負載平衡的執行個體,可在 TCP 通訊埠 22 上允許來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍,例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。本範例使用目標標記 allow-ssh 來識別應套用此規則的 VM。

  • fw-allow-health-check:輸入規則,適用於要進行負載平衡的執行個體,允許來自 Google Cloud 健康檢查系統 (130.211.0.0/2235.191.0.0/16) 的流量。這個範例會使用目標標記 allow-health-check 來辨識應套用此規則的執行個體。

  • fw-allow-health-check-ipv6:輸入規則,適用於要進行負載平衡的執行個體,允許來自 Google Cloud 健康狀態檢查系統 (2600:2d00:1:b029::/64) 的流量。這個範例會使用目標標記 allow-health-check-ipv6 來辨識應套用這項規則的執行個體。

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

主控台

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

    前往「防火牆政策」

  2. 如要允許 IPv4 TCP、UDP 和 ICMP 流量連線至後端執行個體群組 ig-a

    • 點按「建立防火牆規則」
    • Name (名稱):fw-allow-lb-access
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):ingress
    • 「Action on match」(相符時執行的動作):允許
    • 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
    • Source filter (來源篩選器):IPv4 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):10.1.2.0/24
    • Protocols and ports:選取「Specified protocols and ports」
      • 選取「TCP」TCP,然後輸入 ALL
      • 選取「UDP」UDP
      • 選取「其他」,然後輸入 ICMP
  3. 按一下 [建立]。

  4. 如要允許傳入的 SSH 連線,請按照下列步驟操作:

    • 點按「建立防火牆規則」
    • Name (名稱):fw-allow-ssh
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):ingress
    • 「Action on match」(相符時執行的動作):允許
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記)allow-ssh
    • Source filter (來源篩選器):IPv4 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):0.0.0.0/0
    • 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入 tcp:22
  5. 按一下 [建立]。

  6. 如要允許 IPv6 TCP、UDP 和 ICMP 流量傳送至後端執行個體群組 ig-a

    • 點按「建立防火牆規則」
    • Name (名稱):fw-allow-lb-access-ipv6
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):ingress
    • 「Action on match」(相符時執行的動作):允許
    • 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
    • Source filter (來源篩選器):IPv6 範圍
    • 來源 IPv6 範圍lb-subnet 中指派的 IPV6_ADDRESS
    • Protocols and ports:選取「Specified protocols and ports」
      • 選取「TCP」TCP,然後輸入 0-65535
      • 選取「UDP」UDP
      • 選取「其他」,然後輸入 ICMPv6 通訊協定 58
  7. 按一下 [建立]。

  8. 如要允許 Google Cloud IPv6 健康狀態檢查,請按照下列步驟操作:

    • 點按「建立防火牆規則」
    • Name (名稱):fw-allow-health-check-ipv6
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):ingress
    • 「Action on match」(相符時執行的動作):允許
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記)allow-health-check-ipv6
    • Source filter (來源篩選器):IPv6 範圍
    • 來源 IPv6 範圍2600:2d00:1:b029::/64
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  9. 按一下 [建立]。

  10. 如要允許 Google Cloud IPv4 健康狀態檢查:

    • 按一下「建立防火牆規則」
    • Name (名稱):fw-allow-health-check
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):ingress
    • 「Action on match」(相符時執行的動作):允許
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記)allow-health-check
    • Source filter (來源篩選器):IPv4 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):130.211.0.0/2235.191.0.0/16
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  11. 按一下 [建立]。

gcloud

  1. 如要允許 IPv4 TCP 流量連線至後端執行個體群組 ig-a,請建立下列規則:

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. 建立 fw-allow-ssh 防火牆規則,使用網路標記 allow-ssh 允許與 VM 建立 SSH 連線。若省略 source-ranges,Google Cloud 會將規則解讀為任何來源

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. 如要允許 IPv6 流量存取後端執行個體群組 ig-a,請建立下列規則:

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    IPV6_ADDRESS 替換為 lb-subnet 中指派的 IPv6 位址。

  4. 建立 fw-allow-health-check 防火牆規則,允許 Google Cloud健康狀態檢查。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    
  5. 建立 fw-allow-health-check-ipv6 規則,允許 Google CloudIPv6 健康狀態檢查。

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

API

  1. 如要建立 fw-allow-lb-access 防火牆規則,請對 firewalls.insert 方法發出 POST 要求。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24"
    ],
    "allPorts": true,
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. firewalls.insert 方法發出 POST 要求,建立 fw-allow-lb-access-ipv6 防火牆規則。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allPorts": true,
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "58"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    IPV6_ADDRESS 替換為 lb-subnet 中指派的 IPv6 位址。

  3. 如要建立 fw-allow-ssh 防火牆規則,請向 firewalls.insert 方法發出 POST 要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. 如要建立 fw-allow-health-check 防火牆規則,請向 firewalls.insert 方法發出 POST 要求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. firewalls.insert 方法發出 POST 要求,建立 fw-allow-health-check-ipv6 防火牆規則。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

建立後端 VM 和執行個體群組

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

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

如果您想使用現有的 VM 做為後端,請使用 gcloud compute instances network-interfaces update 指令,將 VM 更新為雙層架構。

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

為方便說明,後端 VM 會執行 Debian GNU/Linux 12。

建立執行個體群組

主控台

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

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

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

    1. 點選「建立執行個體範本」
    2. 在「Name」 中輸入 vm-a1
    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 tags」(網路標記) 中新增 allow-sshallow-health-check-ipv6
      2. 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
        • Network (網路):lb-network
        • Subnetwork (子網路):lb-subnet
        • IP 堆疊類型IPv4 和 IPv6 (雙重堆疊)
    7. 按一下 [建立]。

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

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

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

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

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

      1. 在「Network tags」(網路標記) 中新增 allow-sshallow-health-check
      2. 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
        • Network (網路):lb-network
        • Subnetwork (子網路):lb-subnet
        • IP stack type (IP 堆疊類型):IPv4 (單一堆疊)
    6. 按一下 [建立]。

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

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

    1. 點選「建立執行個體群組」
    2. 選擇「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
    3. 在「Name」 中輸入 ig-a
    4. 在「Location」(位置) 中,選取「Single zone」(單一可用區)
    5. 在「區域」部分,選取 us-west1
    6. 在「可用區」部分,選取 us-west1-a
    7. 在「Instance template」(執行個體範本) 中選取 vm-a1
    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 vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPv4_IPv6 \
        --tags=allow-ssh \
        --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 vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --tags=allow-ssh \
        --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-a \
        --zone us-west1-a \
        --size 2 \
        --template vm-a1
    

API

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

  1. instances.insert 方法發出 POST 要求,藉此建立 VM:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check-ipv6",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4_IPV6",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    

如要處理 IPv4 流量,請按照下列步驟操作。

  1. instances.insert 方法發出 POST 要求,建立 VM:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "metadata": {
     "items": [
       {
         "key": "startup-script",
         "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname="$(curl -H "Metadata-Flavor:Google" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)"\necho "Page served from: $vm_hostname" | \\\ntee /var/www/html/index.html\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    
  2. instanceGroups.insert 方法發出 POST 要求,藉此建立執行個體群組。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups
    
    {
    "name": "ig-a",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
    }
    
  3. instanceGroups.addInstances 方法提出 POST 要求,將執行個體新增至每個執行個體群組。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances
    
    {
    "instances": [
    {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1"
    }
    ]
    }
    

建立用戶端 VM

本範例會在與後端 (伺服器) VM 相同的地區中建立用戶端 VM。該用戶端用於驗證負載平衡器的設定,以及示範「測試」一節中所述的預期行為。

針對 IPv4 和 IPv6 流量

主控台

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

    前往 VM 執行個體

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

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

  4. 將「可用區」設為 us-west1-a

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

    • 展開「Networking」,然後將 allow-ssh 新增至「Network tags」
    • 在「網路介面」下方,按一下「編輯」,進行下列變更,然後按一下「完成」
      • Network (網路):lb-network
      • Subnet (子網路):lb-subnet
      • IP 堆疊類型IPv4 和 IPv6 (雙重堆疊)
      • 「Primary internal IP」(主要內部 IP):臨時 (自動)
      • 「External IP」(外部 IP):[Ephemeral] (臨時)
  6. 按一下 [建立]。

gcloud

用戶端 VM 可以位於與負載平衡器相同地區的任何區域中,也可以使用該地區中的任何子網路。在本範例中,用戶端位於 us-west1-a 區域,並使用與後端 VM 相同的子網路。

gcloud compute instances create vm-client-ipv6 \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert 方法提出 POST 要求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client-ipv6",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

針對 IPv4 流量

主控台

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

    前往 VM 執行個體

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

  3. 在「Name」(名稱) 中輸入 vm-client

  4. 在「Zone」 中輸入 us-west1-a

  5. 展開「Advanced options」(進階選項) 區段。

  6. 展開「Networking」,然後設定下列欄位:

    1. 在「網路標記」中輸入 allow-ssh
    2. 在「網路介面」中,選取下列項目:
      • Network (網路):lb-network
      • Subnet (子網路):lb-subnet
  7. 按一下 [建立]。

gcloud

用戶端 VM 可以位於與負載平衡器相同地區的任何區域中,也可以使用該地區中的任何子網路。在本範例中,用戶端位於 us-west1-a 區域,並使用與後端 VM 相同的子網路。

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert 方法提出 POST 要求。將 PROJECT_ID 替換為 Google Cloud 專案的 ID。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances
 {
    "name": "vm-client",
    "tags": {
      "items": [
        "allow-ssh"
      ]
  },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
      {
        "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
        "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "external-nat",
            "networkTier": "PREMIUM"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "autoDelete": true,
        "deviceName": "vm-client",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
          "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
          "diskSizeGb": "10"
        }
      }
    ],
    "scheduling": {
      "preemptible": false
     },
    "deletionProtection": false
  }
  

設定負載平衡器元件

為多個通訊協定建立負載平衡器。

gcloud

  1. 建立通訊埠 80 的 HTTP 健康狀態檢查。這項健康狀態檢查可用於驗證 ig-a 執行個體群組中的後端健康狀態。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. 建立後端服務,並將通訊協定設為 UNSPECIFIED

    gcloud compute backend-services create be-ilb-l3-default \
        --load-balancing-scheme=internal \
        --protocol=UNSPECIFIED \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. 將執行個體群組新增至後端服務:

    gcloud compute backend-services add-backend be-ilb-l3-default \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. 針對 IPv6 流量:建立轉送規則,並將通訊協定設為 L3_DEFAULT,以便處理所有支援的 IPv6 通訊協定流量。所有通訊埠都必須設定 L3_DEFAULT 轉送規則。

    gcloud compute forwarding-rules create fr-ilb-ipv6 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --subnet=lb-subnet \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1 \
       --ip-version=IPV6
    
  5. 針對 IPv4 流量:建立轉送規則,並將通訊協定設為 L3_DEFAULT,以便處理所有支援的 IPv4 通訊協定流量。所有通訊埠都必須設定 L3_DEFAULT 轉送規則。使用 10.1.2.99 做為內部 IP 位址。

    gcloud compute forwarding-rules create fr-ilb-l3-default \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=lb-subnet \
       --address=10.1.2.99 \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1
    

API

  1. regionHealthChecks.insert 方法發出 POST 要求,建立健康狀態檢查。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
    
    {
    "name": "hc-http-80",
    "type": "HTTP",
    "httpHealthCheck": {
     "port": 80
    }
    }
    
  2. 請對 regionBackendServices.insert 方法提出 POST 要求,建立地區後端服務:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    
    {
    "name": "be-ilb-l3-default",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UNSPECIFIED",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  3. 針對 IPv6 流量:請對 forwardingRules.insert 方法提出 POST 要求,建立轉送規則。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-ipv6",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "ipVersion": "IPV6",
    "networkTier": "PREMIUM"
    }
    
  4. 針對 IPv4 流量:向 forwardingRules.insert 方法發出 POST 要求,建立轉送規則:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-l3-default",
    "IPAddress": "10.1.2.99",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "networkTier": "PREMIUM"
    }
    

測試負載平衡器

以下測試示範如何驗證負載平衡器設定,並瞭解其預期行為。

測試從用戶端 VM 建立連線

這項測試會從不同的用戶端 VM 與負載平衡器聯絡;也就是說,不是從負載平衡器的後端 VM 進行聯絡。

gcloud:IPv6

  1. 連線至用戶端 VM 執行個體。

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. 說明 IPv6 轉送規則 fr-ilb-ipv6。請注意說明中的 IPV6_ADDRESS

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. 在具備 IPv6 連線能力的用戶端上執行下列指令。在 fr-ilb-ipv6 轉送規則中,將 IPV6_ADDRESS 替換為暫時 IPv6 位址。

    curl -m 10 -s http://IPV6_ADDRESS:80
    

    舉例來說,如果指派的 IPv6 位址為 [fd20:1db0:b882:802:0:46:0:0/96]:80,指令應如下所示:

    curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    

gcloud:IPv4

  1. 連線至用戶端 VM 執行個體。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. 說明 IPv4 轉送規則 fr-ilb

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  3. 使用 curl 聯絡負載平衡器的 IP 位址,向負載平衡器發出網路要求。重複發出要求,系統便會顯示來自不同後端 VM 的回應。系統會根據每個後端 VM 上的 /var/www/html/index.html 內容,在 HTML 回應的文字中顯示產生回應的 VM 名稱。預期的回應如下所示:Page served from: vm-a1

    curl http://10.1.2.99
    

    轉送規則設定為用於通訊埠 8053。如要將流量傳送至這些通訊埠,請在 IP 位址後方加上冒號 (:) 和通訊埠號碼,如下所示:

    curl http://10.1.2.99:80
    

對負載平衡器的 IP 位址執行連線偵測 (ping)

這項測試會顯示預期的行為:您可以對負載平衡器的 IP 位址執行連線偵測 (ping)。

gcloud:IPv6

  1. 連線至用戶端 VM 執行個體。

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. 嘗試對負載平衡器的 IPv6 位址執行連線偵測 (ping)。在 fr-ilb-ipv6 轉送規則中,將 IPV6_ADDRESS 替換為暫時 IPv6 位址。

    請注意,在本範例中,您會收到回應,而且 ping 指令會運作。

    ping6 IPV6_ADDRESS
    

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

    ping6 2001:db8:1:1:1:1:1:1
    

    輸出結果會與下列內容相似:

    @vm-client: ping IPV6_ADDRESS
    PING IPV6_ADDRESS (IPV6_ADDRESS) 56(84) bytes of data.
    64 bytes from IPV6_ADDRESS: icmp_seq=1 ttl=64 time=1.58 ms
    

gcloud:IPv4

  1. 連線至用戶端 VM 執行個體。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. 嘗試對負載平衡器的 IPv4 位址執行連線偵測 (ping)。請注意,在本範例中,您會收到回應,而且 ping 指令會運作。

    ping 10.1.2.99
    

    輸出內容如下:

    @vm-client: ping 10.1.2.99
    PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data.
    64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms
    64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms
    64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
    

其他設定選項

本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選填項目。您可以按任何順序執行這些工作。

您可以為範例保留靜態內部 IP 位址。這項設定可讓多個內部轉送規則使用相同的 IP 位址,搭配不同的通訊協定和通訊埠。示例負載平衡器的後端仍必須位於 us-west1 區域。

下圖為此範例的架構。

根據通訊協定負載平衡流量,並透過後端服務管理單一區域執行個體群組的連線分配。
針對使用靜態內部 IP 位址的多個通訊協定,提供內部直通式網路負載平衡器 (按一下可放大)。

您也可以考慮使用下列轉送規則設定:

  • 包含多個通訊埠的轉送規則:

    • 通訊協定 TCP 與通訊埠 80,8080
    • 通訊協定 L3_DEFAULT 與通訊埠 ALL
  • 包含所有通訊埠的轉送規則:

    • 通訊協定 TCP 與通訊埠 ALL
    • 通訊協定 L3_DEFAULT 與通訊埠 ALL

預留靜態內部 IPv4 位址

10.1.2.99 保留靜態內部 IP 位址,並將其 --purpose 標記設為 SHARED_LOADBALANCER_VIP。必須使用 --purpose 標記,才能讓多個轉送規則使用相同的內部 IP 位址。

gcloud

使用 gcloud compute addresses create 指令:

gcloud compute addresses create internal-lb-ipv4 \
    --region us-west1 \
    --subnet lb-subnet \
    --purpose SHARED_LOADBALANCER_VIP \
    --addresses 10.1.2.99

API

呼叫 addresses.insert 方法。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

要求的主體必須包含 addressType (必須為 INTERNAL)、位址的 name,以及 IP 位址所屬的 subnetwork。您必須將 address 指定為 10.1.2.99

{
  "addressType": "INTERNAL",
  "name": "internal-lb-ipv4",
  "subnetwork": "regions/us-west1/subnetworks/lb-subnet",
  "purpose": "SHARED_LOADBALANCER_VIP",
  "address": "10.1.2.99"
}

設定負載平衡器元件

使用下列元件設定三個負載平衡器:

  • 第一個負載平衡器有一個轉送規則,其中包含通訊協定 TCP 和通訊埠 80TCP 轉送規則會處理透過通訊埠 80 抵達內部 IP 位址的 TCP 流量。
  • 第二個負載平衡器有一個轉送規則,其中通訊協定為 UDP,通訊埠為 53。抵達通訊埠 53 內部 IP 位址的 UDP 流量,會由 UDP 轉送規則處理。
  • 第三個負載平衡器含有通訊協定 L3_DEFAULT 和通訊埠 ALL 的轉送規則。所有其他不符合 TCPUDP 轉送規則的流量,都會由 L3_DEFAULT 轉送規則處理。
  • 三個負載平衡器在轉送規則中共用相同的靜態內部 IP 位址 (internal-lb-ipv4)。

建立第一個負載平衡器

為通訊埠 80 的 TCP 流量建立第一個負載平衡器。

gcloud

  1. 建立 TCP 流量的後端服務:

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. 將執行個體群組新增至後端服務:

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. 為後端服務建立轉送規則。使用靜態預留內部 IP 位址 (internal-lb-ipv4) 做為內部 IP 位址。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

  1. regionBackendServices.insert 方法發出 POST 要求,建立區域後端服務。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "TCP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    

  2. Create the forwarding rule by making a POST request to the forwardingRules.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "TCP",
    "ports": [
     "80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
    "networkTier": "PREMIUM"
    }
    

建立第二個負載平衡器

為通訊埠 53 的 UDP 流量建立第二個負載平衡器。

gcloud

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

    gcloud compute backend-services create be-ilb-udp \
        --load-balancing-scheme=internal \
        --protocol=UDP \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. 將執行個體群組新增至後端服務:

    gcloud compute backend-services add-backend be-ilb-udp \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. 為後端服務建立轉送規則。使用靜態預留內部 IP 位址 (internal-lb-ipv4) 做為內部 IP 位址。

    gcloud compute forwarding-rules create fr-ilb-udp \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=UDP \
        --ports=53 \
        --backend-service=be-ilb-udp \
        --backend-service-region=us-west1
    

API

  1. regionBackendServices.insert 方法發出 POST 要求,建立區域後端服務。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb-udp",
    "backends": [
     {
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UDP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  2. forwardingRules.insert 方法發出 POST 要求,建立轉送規則:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-udp",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "UDP",
    "ports": [
     "53"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp",
    "networkTier": "PREMIUM"
    }
    

建立第三個負載平衡器

建立第三個負載平衡器的轉送規則,以便使用靜態預留內部 IP 位址。

gcloud

建立轉送規則,並將通訊協定設為 L3_DEFAULT,以便處理所有其他支援的 IPv4 通訊協定流量。使用預約的靜態內部 IP 位址 (internal-lb-ipv4) 做為內部 IP 位址。

gcloud compute forwarding-rules create fr-ilb-l3-default \
    --region=us-west1 \
    --load-balancing-scheme=internal \
    --network=lb-network \
    --subnet=lb-subnet \
    --address=internal-lb-ipv4 \
    --ip-protocol=L3_DEFAULT \
    --ports=ALL \
    --backend-service=be-ilb-l3-default \
    --backend-service-region=us-west1

API

forwardingRules.insert 方法發出 POST 要求,建立轉送規則。將 PROJECT_ID 替換為Google Cloud 專案的 ID。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-l3-default",
"IPAddress": "internal-lb-ipv4",
"IPProtocol": "L3_DEFAULT",
"ports": [
  "ALL"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
"networkTier": "PREMIUM"
}

測試負載平衡器

如要測試負載平衡器,請按照上一節的步驟操作

後續步驟