使用可用區 NEG 後端設定區域性內部 Proxy 網路負載平衡器

區域內部 Proxy 網路負載平衡器是以 Proxy 為基礎的區域第 4 層負載平衡器,可讓您透過內部 IP 位址執行及調度 TCP 服務流量,且只有相同虛擬私有雲網路中的用戶端,或連線至虛擬私有雲網路的用戶端可以存取該 IP 位址。

本指南說明如何設定區域性內部 Proxy 網路負載平衡器,並使用區域網路端點群組 (NEG) 後端。事前準備:

總覽

在本範例中,我們會使用負載平衡器,將 TCP 流量分配到 REGION_A 地區兩個區域 NEG 中的後端 VM。這個範例使用一組設為透過通訊埠 80 回應要求的 Apache 伺服器來提供服務。

在本範例中,您將設定下列部署作業:

區域性內部 Proxy 網路負載平衡器範例設定,後端為可用區 NEG。
區域性內部 Proxy 網路負載平衡器範例設定,搭配可用區 NEG 後端。

區域性內部 Proxy 網路負載平衡器是區域性負載平衡器,所有負載平衡器元件 (後端執行個體群組、後端服務、目標 Proxy 和轉送規則) 都必須位於相同區域。

權限

如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色

工作 必要角色
建立網路、子網路和負載平衡器元件 網路管理員
新增與移除防火牆規則 安全管理員
建立執行個體 Compute 執行個體管理員

詳情請參閱下列指南:

設定網路和子網路

您需要具有兩個子網路的虛擬私有雲網路:一個用於負載平衡器的後端,另一個用於負載平衡器的 Proxy。區域性內部 Proxy 網路負載平衡器屬於區域性資源。如果流量來源位於與負載平衡器相同地區的子網路中,虛擬私有雲端網路內的流量會轉送至負載平衡器。

這個範例會使用以下虛擬私人雲端網路、地區和子網路:

  • 電視網:網路是名為 lb-network自訂模式虛擬私有雲網路

  • 後端專用的子網路。REGION_A 地區中名為 backend-subnet 的子網路使用 10.1.2.0/24 做為其主要 IP 範圍。

  • Proxy 專用子網路。REGION_A 地區中名為 proxy-only-subnet 的子網路使用 10.129.0.0/23 做為其主要 IP 範圍。

為後端建立網路和子網路

主控台

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

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

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

  3. 在「Name」中輸入 lb-network

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

    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • Name (名稱):backend-subnet
      • Region (區域):REGION_A
      • IP address range (IP 位址範圍):10.1.2.0/24
    • 按一下 [完成]
  5. 點選「建立」

gcloud

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

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 使用 gcloud compute networks subnets create 指令,在 REGION_A 地區的 lb-network 網路中建立子網路:

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

建立僅限 Proxy 的子網路

僅限 Proxy 的子網路提供一組 IP 位址,供 Google 代表您執行 Envoy Proxy。Proxy 會終止來自用戶端的連線,並建立與後端的新連線。

lb-network 虛擬私有雲網路REGION_A區域中的所有 Envoy 型負載平衡器,都會使用這個僅限 Proxy 的子網路。

主控台

如果您使用 Google Cloud 控制台,可以稍後在「Load balancing」(負載平衡) 頁面中建立僅限 Proxy 的子網路。

如要立即建立僅限 Proxy 的子網路,請按照下列步驟操作:

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

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

  2. 按一下共用虛擬私有雲網路的名稱:lb-network

  3. 按一下 [新增子網路]

  4. 在「Name」中輸入 proxy-only-subnet

  5. 在「區域」部分,選取「REGION_A」。

  6. 將「用途」設為「區域受管理 Proxy」

  7. 在「IP address range」(IP 位址範圍) 中,輸入 10.129.0.0/23

  8. 按一下「新增」

gcloud

使用 gcloud compute networks subnets create 指令建立僅限 Proxy 的子網路。

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION_A \
    --network=lb-network \
    --range=10.129.0.0/23

建立防火牆規則

在此範例中,您會建立下列防火牆規則:

  • fw-allow-health-check:輸入規則,適用於要進行負載平衡的 Google Cloud執行個體,可允許來自負載平衡器和Google Cloud 健康狀態檢查系統 (130.211.0.0/2235.191.0.0/16) 的流量。這個範例會使用目標標記 allow-health-check 來識別應套用此規則的後端 VM。
  • fw-allow-ssh:輸入規則,允許在 TCP 通訊埠 22 上來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。本範例使用目標標記 allow-ssh 來識別應該適用此規則的 VM。
  • fw-allow-proxy-only-subnet:為僅限 Proxy 的子網路建立允許輸入的防火牆規則,允許負載平衡器在 TCP 通訊埠 80 上與後端執行個體通訊。本範例使用目標標記 allow-proxy-only-subnet 來識別應該適用此規則的後端 VM。

主控台

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

    前往「防火牆政策」頁面

  2. 按一下「建立防火牆規則」

    1. 輸入 fw-allow-health-check 的「Name」(名稱)
    2. 在「Network」(網路) 下方選取 lb-network
    3. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    4. 在「Target tags」(目標標記) 欄位填入 allow-health-check
    5. 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)
    6. 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為 130.211.0.0/2235.191.0.0/16
    7. 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取 [Specified protocols and ports] (指定的通訊協定與通訊埠)
    8. 勾選「TCP」TCP核取方塊,然後輸入 80 做為通訊埠編號。
    9. 點選「建立」
  3. 再次按一下「建立防火牆規則」,建立允許連入 SSH 連線的規則:

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

  5. 再次按一下「Create firewall rule」(建立防火牆規則),以建立允許連入連線的規則,讓僅限 Proxy 子網路連線至 Google Cloud後端:

    • Name (名稱):fw-allow-proxy-only-subnet
    • Network (網路):lb-network
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記)allow-proxy-only-subnet
    • 來源篩選器IPv4 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):10.129.0.0/23
    • 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入 tcp:80
  6. 點選「建立」

gcloud

  1. 建立 fw-allow-health-check 規則,允許 Google Cloud 健康檢查在 TCP 通訊埠 80 上連線至後端執行個體:

    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:80
    
  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. 為僅限 Proxy 的子網路建立允許輸入的防火牆規則,允許負載平衡器在 TCP 通訊埠 80 上與後端執行個體通訊:

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=10.129.0.0/23 \
        --rules=tcp:80
    

保留負載平衡器的 IP 位址

如要為負載平衡器保留靜態內部 IP 位址,請參閱「保留新的靜態內部 IPv4 或 IPv6 位址」。

設定可用區 NEG

REGION_A 區域中設定可用區 NEG (含 GCE_VM_IP_PORT 類型端點)。請先建立 VM。然後建立區域性 NEG,並將 VM 的網路端點新增至 NEG。

建立 VM

主控台

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

    前往 VM 執行個體

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

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

  4. 在「區域」部分,選取「REGION_A」。

  5. 如要瞭解「可用區」,請參閱 ZONE_A1

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

  7. 點選「進階選項」

  8. 按一下「網路」並設定下列欄位:

    1. 在「Network tags」(網路標記) 中輸入 allow-sshallow-health-checkallow-proxy-only-subnet
    2. 在「網路介面」中,選取下列項目:
      • Network (網路):lb-network
      • Subnet (子網路):backend-subnet
  9. 按一下 [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
    
  10. 點選「建立」

  11. 使用下列名稱和區域組合,重複以下步驟來建立另外 3 個 VM:

    • 名稱:vm-a2,區域:ZONE_A1
    • 名稱:vm-c1,區域:ZONE_A2
    • 名稱:vm-c2,區域:ZONE_A2

gcloud

使用下列 VM_NAMEZONE 的組合,執行以下指令兩次來建立 VM。兩個 VM 的指令碼內容完全相同。

  • VM_NAMEvm-a1ZONEZONE_A1
  • VM_NAMEvm-a2ZONEZONE_A1
  • VM_NAMEvm-c1ZONEZONE_A2
  • VM_NAMEvm-c2ZONEZONE_A2

    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --subnet=backend-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

主控台

如要建立可用區網路端點群組,請按照下列步驟操作:

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

    前往網路端點群組

  2. 按一下「建立網路端點群組」

  3. 在「Name」(名稱) 中輸入 zonal-neg-a

  4. 在「網路端點群組類型」部分,選取「網路端點群組 (區域性)」

  5. 在「Network」(網路) 中選取 lb-network

  6. 在「Subnet」(子網路) 中,選取 backend-subnet

  7. 在「Zone」(可用區) 中選取 ZONE_A1

  8. 輸入預設通訊埠80

  9. 點選「建立」

  10. 重複本節中的所有步驟,建立第二個區域 NEG,並進行下列設定變更:

    • Name (名稱):zonal-neg-c
    • Zone (可用區):ZONE_A2

將端點新增至可用區性 NEG:

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

    前往網路端點群組

  2. 按一下上一個步驟中建立的網路端點群組「名稱」 (例如 zonal-neg-a)。畫面上會顯示「網路端點群組詳細資料」頁面。

  3. 在「Network endpoints in this group」(這個群組中的網路端點) 區段中,按一下 [Add network endpoint] (新增網路端點]。畫面會出現「Add network endpoint」(新增網路端點) 頁面。

  4. 選取 VM 執行個體 (例如 vm-a1)。「Network interface」(網路介面) 區段會顯示 VM 名稱、區域和子網路。

    1. 輸入新網路端點的「IP address」(IP 位址)。您可以按一下「Check primary IP addresses and alias IP range in nic0」(檢查 nic0 中的主要 IP 位址和別名 IP 範圍),查看 IP 位址。
    2. 在「通訊埠類型」中選取「預設」,端點會使用網路端點群組中所有端點的預設通訊埠。80由於 Apache 伺服器會在通訊埠 80 處理要求,因此這個範例已足夠。
    3. 點選「建立」
  5. 再次按一下「新增網路端點」。選取第二個 VM 執行個體 vm-a2,然後重複上述步驟,將其端點新增至 zonal-neg-a

  6. 重複本節中的所有步驟,從 vm-c1vm-c2 新增端點至 zonal-neg-c

gcloud

  1. ZONE_A1 可用區中建立可用區 NEG,並加入 GCE_VM_IP_PORT 端點。

    gcloud compute network-endpoint-groups create zonal-neg-a \
       --network-endpoint-type=GCE_VM_IP_PORT \
       --zone=ZONE_A1 \
       --network=lb-network \
       --subnet=backend-subnet
    

    您可以在建立 NEG 時指定 --default-port,或為每個端點指定通訊埠號碼,如下一步所示。

  2. 將端點新增至可用區 NEG。

    gcloud compute network-endpoint-groups update zonal-neg-a \
        --zone=ZONE_A1 \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    
  3. ZONE_A2 可用區中建立可用區 NEG,並加入 GCE_VM_IP_PORT 端點。

    gcloud compute network-endpoint-groups create zonal-neg-c \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=ZONE_A2 \
        --network=lb-network \
        --subnet=backend-subnet
    

    您可以在建立 NEG 時指定 --default-port,或為每個端點指定通訊埠號碼,如下一步所示。

  4. 將端點新增至可用區 NEG。

    gcloud compute network-endpoint-groups update zonal-neg-c \
        --zone=ZONE_A2 \
        --add-endpoint='instance=vm-c1,port=80' \
        --add-endpoint='instance=vm-c2,port=80'
    

設定負載平衡器

主控台

開始設定

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

    前往「Load balancing」(負載平衡) 頁面

  2. 點選「建立負載平衡器」
  3. 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」
  4. 在「Proxy or passthrough」(直通或使用 Proxy) 部分,選取「Proxy load balancer」(Proxy 負載平衡器),然後點選「Next」(下一步)
  5. 在「公開或內部」部分,選取「內部」,然後點選「下一步」
  6. 在「Cross-region or single region deployment」(跨區域或單一區域部署) 部分,選取「Best for regional workloads」(最適合區域工作負載),然後點選「Next」(下一步)
  7. 按一下「Configure」(設定)

基本設定

  1. 在「Name」(名稱) 中輸入 my-int-tcp-lb
  2. 在「Region」(區域) 中選取 REGION_A
  3. 在「Network」(網路) 中選取 lb-network

保留僅限 Proxy 子網路

如要保留僅限 Proxy 的子網路,請按照下列步驟操作:

  1. 按一下「保留子網路」
  2. 在「Name」(名稱) 中輸入 proxy-only-subnet
  3. 在「IP address range」(IP 位址範圍) 中,輸入 10.129.0.0/23
  4. 按一下「新增」

後端設定

  1. 按一下「後端設定」
  2. 在「Backend type」(後端類型) 部分,選取「Zonal network endpoint group」(可用區網路端點群組)
  3. 在「Protocol」(通訊協定) 欄中,選取「TCP」
  4. 在「健康狀態檢查」清單中,按一下「建立健康狀態檢查」,然後輸入下列資訊:
    1. Name (名稱):tcp-health-check
    2. 「Protocol」(通訊協定)TCP
    3. Port (通訊埠):80
  5. 點選「建立」
  6. 設定第一個後端:
    1. 在「New backend」(新增後端) 下方,選取可用區性 NEG zonal-neg-a
    2. 保留其餘預設值,然後按一下「完成」
  7. 設定第二個後端:

    1. 點選「新增後端」
    2. 在「New backend」(新增後端) 下方,選取執行個體群組 zonal-neg-c
    3. 保留其餘預設值,然後按一下「完成」
  8. 在 Google Cloud 控制台中,確認「後端設定」旁顯示勾號。如未顯示,請重新檢查一遍,確認是否已完成所有步驟。

前端設定

  1. 按一下「前端設定」
  2. 在「Name」(名稱) 中輸入 int-tcp-forwarding-rule
  3. 在「Subnetwork」(子網路) 中,選取「backend-subnet」
  4. 「IP address」(IP 位址) 部分請選取「int-tcp-ip-address」
  5. 在「Port number」(通訊埠編號) 部分輸入 9090。轉送規則只會轉送目的地通訊埠相符的封包。
  6. 在本範例中,請勿啟用「Proxy 通訊協定」,因為這項通訊協定不適用於 Apache HTTP Server 軟體。詳情請參閱「Proxy 通訊協定」。
  7. 按一下 [完成]
  8. 在 Google Cloud 控制台中,確認「Frontend configuration」(前端設定) 旁顯示勾號。如未顯示,請重新檢查一遍,確認您是否已完成上述所有步驟。

檢查並完成

  1. 按一下 [Review and finalize] (檢查並完成)
  2. 重新檢查一遍您的設定。
  3. 點選「建立」

gcloud

  1. 為後端建立地區健康狀態檢查。

    gcloud compute health-checks create tcp tcp-health-check \
        --region=REGION_A \
        --use-serving-port
    
  2. 建立後端服務。

    gcloud compute backend-services create internal-tcp-proxy-bs \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --protocol=TCP \
       --region=REGION_A \
       --health-checks=tcp-health-check \
       --health-checks-region=REGION_A
    
  3. ZONE_A1 區域中的區域 NEG 新增至後端服務。

    gcloud compute backend-services add-backend internal-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-a \
       --network-endpoint-group-zone=ZONE_A1 \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  4. ZONE_A2 區域中的區域 NEG 新增至後端服務。

    gcloud compute backend-services add-backend internal-tcp-proxy-bs \
       --network-endpoint-group=zonal-neg-c \
       --network-endpoint-group-zone=ZONE_A2 \
       --balancing-mode=CONNECTION \
       --max-connections-per-endpoint=50 \
       --region=REGION_A
    
  5. 建立目標 TCP Proxy。

    gcloud compute target-tcp-proxies create int-tcp-target-proxy \
       --backend-service=internal-tcp-proxy-bs \
       --region=REGION_A
    
  6. 建立轉送規則。如為 --ports,請指定介於 1 至 65535 之間的單一通訊埠編號。本範例使用通訊埠 9090。轉送規則只會轉送目的地通訊埠相符的封包。

    gcloud compute forwarding-rules create int-tcp-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=lb-network \
      --subnet=backend-subnet \
      --address=int-tcp-ip-address \
      --ports=9090 \
      --region=REGION_A \
      --target-tcp-proxy=int-tcp-target-proxy \
      --target-tcp-proxy-region=REGION_A
    

測試負載平衡器

如要測試負載平衡器,請在與負載平衡器相同的地區中建立用戶端 VM。然後將流量從用戶端傳送至負載平衡器。

建立用戶端 VM

在與負載平衡器相同的地區中建立用戶端 VM (client-vm)。

主控台

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

    前往 VM 執行個體

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

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

  4. 將「Zone」(區域) 設為 ZONE_A1

  5. 點選「進階選項」

  6. 按一下「網路」並設定下列欄位:

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

gcloud

用戶端 VM 必須與負載平衡器位於相同的 VPC 網路和區域。不一定要位於相同子網路或區域。用戶端使用的子網路與後端 VM 相同。

gcloud compute instances create client-vm \
    --zone=ZONE_A1 \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=backend-subnet

將流量傳送至負載平衡器

您已設定好負載平衡器,現在可以測試將流量傳送至負載平衡器的 IP 位址。

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

    gcloud compute ssh client-vm \
      --zone=ZONE_A1
    
  2. 確認負載平衡器是否正常提供後端主機名稱。

    1. 使用 compute addresses describe 指令查看負載平衡器的 IP 位址:

      gcloud compute addresses describe int-tcp-ip-address \
        --region=REGION_A
      

      記下 IP 位址。

    2. 將流量傳送至負載平衡器。將 IP_ADDRESS 替換為負載平衡器的 IP 位址。

      curl IP_ADDRESS:9090
      

後續步驟