設定具備混合連線功能的跨區域內部 Proxy 網路負載平衡器

本頁說明如何部署跨區域內部 Proxy 網路負載平衡器,以便將流量平衡至位於內部或其他公用雲端,且可透過混合式連線存取的網路端點。

如果您尚未這樣做,請參閱混合式連線 NEG 簡介,瞭解設定混合式負載平衡所需的網路需求。

設定總覽

這個範例會為混合區域和混合連線 NEG 後端設定跨區域內部 Proxy 網路負載平衡器,如下圖所示:

跨區域內部 Proxy 網路負載平衡器範例,適用於混合式可用區和混合式連線 NEG 後端。
跨區域內部 Proxy 網路負載平衡器範例,適用於混合式可用區和混合式連線 NEG 後端 (按一下可放大)。

您必須先設定混合式連線,才能設定混合式負載平衡部署作業。請根據您選擇的混合式連線產品,使用 Cloud VPN 或 Cloud Interconnect (專屬或合作夥伴)。

權限

如要設定混合式負載平衡,您必須具備下列權限:

  • 開啟 Google Cloud

    • 權限:在 Google Cloud 與您的地端部署環境或其他雲端環境之間建立混合式連線。如需所需權限清單,請參閱相關的網路連線產品說明文件
    • 具備建立混合式連線 NEG 和負載平衡器的權限。Compute 負載平衡器管理員角色 (roles/compute.loadBalancerAdmin) 包含執行本指南所述任務所需的權限。
  • 在地端部署環境或其他非雲端環境中Google Cloud

    • 權限可設定網路端點,讓內部部署環境或其他雲端環境中的服務可透過Google Cloud 使用 IP:Port 組合存取。如需更多資訊,請與環境的網路管理員聯絡。
    • 在內部部署環境或其他雲端環境中建立防火牆規則的權限,以便 Google 健康狀態檢查探測器存取端點。

此外,如要完成本頁的操作說明,您必須建立混合式連線 NEG、負載平衡器和區域 NEG (及其端點),以便做為負載平衡器的 Google Cloud後端。

因此您必須是專案擁有者或編輯者,或是應具有以下 Compute Engine 身分與存取權管理角色

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

建立混合式連線

您 Google Cloud 和內部部署環境或其他雲端環境必須透過混合式連線連線,方法是使用 Cloud Router 或路由器設備 VM 搭配 Cloud Interconnect VLAN 連結或 Cloud VPN 通道。建議您使用高可用性連線。

啟用全域動態轉送功能的 Cloud Router 會透過邊界閘道通訊協定 (BGP) 瞭解特定端點,並將其編入 Google Cloud VPC 網路。不支援區域動態路由。也不支援靜態路徑。

您可以使用相同的網路或同一個專案中的不同虛擬私有雲網路,設定混合式網路 (Cloud Interconnect 或 Cloud VPN 或 Router 應用程式 VM) 和負載平衡器。請注意以下事項:

  • 如果您使用不同的 VPC 網路,則這兩個網路必須透過 VPC 網路對等互連連線,或是必須是位於同一個 Network Connectivity Center 中樞VPC 輻條

  • 如果您使用相同的虛擬私有雲網路,請確認虛擬私有雲網路的子網路 CIDR 範圍不會與遠端 CIDR 範圍衝突。如果 IP 位址重疊,系統會優先使用子網路路徑,而不是遠端連線。

如需操作說明,請參閱下列文件:

設定外部環境 Google Cloud

請按照下列步驟設定混合式負載平衡的內部部署環境或其他雲端環境:

  • 設定網路端點,將內部部署服務公開給Google Cloud (IP:Port)。
  • 在內部部署環境或其他雲端環境中設定防火牆規則。
  • 設定 Cloud Router 向私人環境通告特定必要路徑。

設定網路端點

設定混合式連線後,您可以在內部部署環境或其他雲端環境中,使用 IP:port 組合設定一或多個網路端點,以便透過 Cloud Interconnect 或 Cloud VPN 或 Router 應用程式存取。這個 IP:port 組合會設為混合式連線 NEG 的一或多個端點, Google Cloud 稍後會在這個程序中建立。

如果 IP 端點有多個路徑,路由會遵循 Cloud Router 簡介中所述的行為。

設定防火牆規則

您必須在內部部署環境或其他雲端環境中建立下列防火牆規則:

  • 在內部部署或其他雲端環境中建立防火牆允許輸入規則,允許來自該區域僅限 Proxy 的子網路的流量連上端點。
  • 混合型 NEG 不需要允許來自 Google 健康狀態檢查探測範圍的流量。不過,如果您在單一後端服務中同時使用混合式和區域性 NEG,則必須允許區域性 NEG 從 Google 健康狀態檢查探針範圍接收流量。

設定 Cloud Router 向內部部署環境或其他雲端環境通告下列自訂 IP 範圍

  • 區域的僅限 Proxy 子網路範圍。

設定 Google Cloud 環境

在下列步驟中,請務必使用用於設定兩個環境之間混合式連線的相同虛擬私有雲網路 (在本程序中稱為 NETWORK)。

此外,請確認使用的區域 (在此程序中稱為 REGION_AREGION_B) 與用於建立 Cloud VPN 通道或 Cloud Interconnect VLAN 連結的區域相同。

設定後端子網路

使用這個子網路建立負載平衡器的區域 NEG 後端:

主控台

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

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

  2. 前往用於設定環境間混合式連線的網路。

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

    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • 提供這個子網路的 [Name] (名稱)
      • 選取「區域」REGION_A
      • 輸入 IP 位址範圍
    • 按一下 [完成]
  4. 按一下 [建立]。

  5. 如要在其他區域新增更多子網路,請按一下「Add subnet」,然後重複執行 REGION_B 的上述步驟。

gcloud

  1. 在用於設定環境間混合式連線的網路中建立子網路。

    gcloud compute networks subnets create SUBNET_A \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE1 \
        --region=REGION_A
    
    gcloud compute networks subnets create SUBNET_B \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE2 \
        --region=REGION_B
    

API

subnetworks.insert 方法提出 POST 要求。將 PROJECT_ID 替換為您的專案 ID。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks

{
 "name": "SUBNET_A",
 "network": "projects/PROJECT_ID/global/networks/NETWORK",
 "ipCidrRange": "LB_SUBNET_RANGE1",
 "region": "projects/PROJECT_ID/regions/REGION_A",
}

subnetworks.insert 方法提出 POST 要求。將 PROJECT_ID 替換為您的專案 ID。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks

{
 "name": "SUBNET_B",
 "network": "projects/PROJECT_ID/global/networks/NETWORK",
 "ipCidrRange": "LB_SUBNET_RANGE2",
 "region": "projects/PROJECT_ID/regions/REGION_B",
}

更改下列內容:

  • SUBNET_ASUBNET_B:子網路名稱
  • LB_SUBNET_RANGE1LB_SUBNET_RANGE2:子網路的 IP 位址範圍
  • REGION_AREGION_B:您設定負載平衡器的區域

設定僅限 Proxy 的子網路

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

這個僅限 Proxy 的子網路會由虛擬私有雲網路中同個地區的所有Envoy 型區域負載平衡器使用。每個地區和每個網路只能有一個用於特定用途的活動的僅限 Proxy 子網路。

控制台

如果您使用的是 Google Cloud 主控台,可以等之後再於「負載平衡」頁面中建立僅限 Proxy 的子網路。

如果您現在想建立僅限 Proxy 的子網路,請按照下列步驟操作:

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

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

  2. 按一下虛擬私有雲網路的名稱。
  3. 在「子網路」分頁中,按一下「新增子網路」
  4. 提供僅限 Proxy 子網路的「名稱」
  5. 在「Region」(區域) 清單中選取「REGION_A」。
  6. 在「用途」清單中,選取「跨區域的 Managed Proxy」
  7. 在「IP address range」欄位中輸入 10.129.0.0/23
  8. 按一下「新增」。

REGION_B 中建立僅限 Proxy 的子網路

  1. 按一下 [新增子網路]
  2. 提供僅限 Proxy 子網路的「名稱」
  3. 在「Region」(區域) 清單中選取「REGION_B」。
  4. 在「用途」清單中,選取「跨區域的 Managed Proxy」
  5. 在「IP address range」欄位中輸入 10.130.0.0/23
  6. 按一下「新增」。

gcloud

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

    gcloud compute networks subnets create PROXY_SN_A \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION_A \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE1
    
    gcloud compute networks subnets create PROXY_SN_B \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION_B \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE2
    

更改下列內容:

  • PROXY_SN_APROXY_SN_B:僅限 Proxy 子網路的名稱
  • PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2:Proxy 專用子網路的 IP 位址範圍
  • REGION_AREGION_B:您設定負載平衡器的區域

API

使用 subnetworks.insert 方法建立僅限 Proxy 的子網路,並將 PROJECT_ID 替換為您的專案 ID。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/subnetworks

    {
      "name": "PROXY_SN_A",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE1",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION_A",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/subnetworks

    {
      "name": " PROXY_SN_B",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE2",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION_B",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  

建立防火牆規則

在本範例中,您會為 Google Cloud上的區域 NEG 後端建立下列防火牆規則:

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

主控台

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

    前往「防火牆政策」

  2. 按一下「Create firewall rule」(建立防火牆規則),建立允許健康狀態檢查探測器流量的規則:

    1. 輸入 fw-allow-health-check 的「Name」
    2. 在「Network」(網路) 中選取 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 做為「Port number」(通訊埠編號)。
    9. 按一下 [建立]。
  3. 再次按一下「Create firewall rule」(建立防火牆規則),以建立允許連入 SSH 連線的規則:

    1. Name (名稱):fw-allow-ssh
    2. Network (網路):NETWORK
    3. Priority (優先順序):1000
    4. 「Direction of traffic」(流量方向):[ingress] (輸入)
    5. 「Action on match」(相符時執行的動作):[allow] (允許)
    6. 「Target」(目標):指定的目標標記
    7. 「Target tags」(目標標記)allow-ssh
    8. 來源篩選器IPv4 範圍
    9. Source IPv4 ranges (來源 IPv4 範圍):0.0.0.0/0
    10. Protocols and ports:選擇「Specified protocols and ports」
    11. 選取「TCP」TCP,然後輸入 22 做為「Port number」(通訊埠編號)。
    12. 按一下 [建立]。
  4. 再次按一下「Create firewall rule」(建立防火牆規則),以建立允許來自僅限 Proxy 子網路的連線規則:

    1. Name (名稱):fw-allow-proxy-only-subnet
    2. Network (網路):NETWORK
    3. Priority (優先順序):1000
    4. 「Direction of traffic」(流量方向):[ingress] (輸入)
    5. 「Action on match」(相符時執行的動作):[allow] (允許)
    6. 「Target」(目標):指定的目標標記
    7. 「Target tags」(目標標記)allow-proxy-only-subnet
    8. 來源篩選器IPv4 範圍
    9. 來源 IPv4 範圍PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2
    10. Protocols and ports (通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠)
    11. 選取「TCP」TCP,然後輸入 80 做為「Port number」(通訊埠編號)。
    12. 按一下 [建立]。

gcloud

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

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=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=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=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=PROXY_ONLY_SUBNET_RANGE1,PROXY_ONLY_SUBNET_RANGE2 \
        --rules=tcp:80
    

設定可用區 NEG

針對以 Google Cloud為基礎的後端,建議您在設定混合式連線的相同區域中,設定多個區域 NEG。

在本例中,我們會在 REGION1 中設定區域 NEG (含 GCE_VM_IP_PORT 類型端點)。首先,請在 NEG_ZONE1 區域中建立 VM。接著,在 NEG_ZONE2 中建立區域性 NEG,並將 VM 的網路端點新增至 NEG。為支援高可用性,我們在 REGION2 區域中設定類似的可用區 NEG。如果某個地區的後端發生故障,流量就會移轉至其他地區。

建立 VM

主控台

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

    前往 VM 執行個體

  2. 使用下列名稱和區域組合,針對每個 VM 重複執行步驟 3 至 8。

    • 名稱:vm-a1
      • 區域:REGION_A 中的 NEG_ZONE1
      • 子網路:SUBNET_A
    • 名稱:vm-b1
      • 區域:REGION_B 中的 NEG_ZONE2
      • 子網路:SUBNET_B
  3. 點選「建立執行個體」

  4. 按照前一個步驟指定的名稱設定。

  5. 在「Region」(區域) 中,選擇先前步驟指定的選項。

  6. 在「Zone」(可用區) 中,選擇先前步驟中指定的選項。

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

  8. 在「Advanced options」專區中,展開「Networking」,然後執行下列操作:

    • 新增下列「Network tags」(網路標記)allow-sshallow-health-checkallow-proxy-only-subnet
    • 在「Network interfaces」(網路介面) 專區中,按一下「Add a network interface」(新增網路介面) 進行下列變更,然後按一下「Done」(完成)
      • Network (網路):NETWORK
      • 子網路:如先前步驟所示。
      • 「Primary internal IP」(主要內部 IP):臨時 (自動)
      • External IP (外部 IP):臨時
    • 展開「管理」。在「Automation」欄位中,複製並貼上下列指令碼內容。所有 VM 的指令碼內容皆相同:

      #! /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
      
  9. 按一下 [建立]。

gcloud

請執行下列指令來建立 VM,並使用下列組合做為 VM 名稱和區域的名稱。兩個 VM 的指令碼內容皆相同。

  • vm-a1VM_NAME
    • 區域 REGION_A 中的區域 GCP_NEG_ZONENEG_ZONE1
    • 子網路 LB_SUBNET_NAMESUBNET_A
  • VM_NAME/vm-b1

    • 區域 REGION_B 中的區域 GCP_NEG_ZONENEG_ZONE2
    • 子網路 LB_SUBNET_NAMESUBNET_B
    gcloud compute instances create VM_NAME \
        --zone=GCP_NEG_ZONE \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --subnet=LB_SUBNET_NAME \
        --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. 針對每個區域 NEG,使用下列名稱和區域組合重複執行步驟 3 至 8:

    • 名稱:neg-1
      • 區域:REGION_A 區域中的 NEG_ZONE1
      • 子網路:SUBNET_A
    • 名稱:neg-2
      • 區域:REGION_B 區域中的 NEG_ZONE2
      • 子網路:SUBNET_B
  3. 按一下「建立網路端點群組」

  4. 按照前一個步驟指定的名稱設定。

  5. 選取「網路端點群組類型」「網路端點群組 (區域性)」。

  6. 選取「網路」NETWORK

  7. 選取先前步驟所示的「子網路」

  8. 選取先前步驟所示的「Zone」(可用區)

  9. 輸入「預設通訊埠」80

  10. 按一下 [建立]。

將端點新增至區域性 NEG:

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

    前往「Network endpoint groups」

  2. 按一下先前步驟建立的網路端點群組「名稱」。畫面上即會顯示「Network endpoint group details」(網路端點群組詳細資料) 頁面。

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

  4. 選取某個 VM 執行個體,將其內部 IP 位址新增為網路端點。在「Network interface」部分,系統會顯示 VM 的名稱、區域和子網路。

  5. 輸入新網路端點的「IP 位址」

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

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

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

gcloud

  1. 使用名稱、區域和子網路組合,建立可用區 NEG (含 GCE_VM_IP_PORT 端點)。使用 gcloud compute network-endpoint-groups create 指令

    • 名稱:neg-1
      • 區域 GCP_NEG_ZONE:區域 REGION_A 中的 NEG_ZONE1
      • 子網路 LB_SUBNET_NAMESUBNET_A
    • 名稱:neg-2
      • 區域 GCP_NEG_ZONE:區域 REGION_B 中的 NEG_ZONE2
      • 子網路 LB_SUBNET_NAMESUBNET_B
    gcloud compute network-endpoint-groups create GCP_NEG_NAME \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=GCP_NEG_ZONE \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME
    

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

  2. 將端點新增至 neg1neg2

    gcloud compute network-endpoint-groups update neg1 \
        --zone=NEG_ZONE1 \
        --add-endpoint='instance=vm-a1,port=80'
    
    gcloud compute network-endpoint-groups update neg2 \
        --zone=NEG_ZONE2 \
        --add-endpoint='instance=vm-b1,port=80'
    

設定混合式連線 NEG

建立 NEG 時,請使用區域,盡可能縮短 Google Cloud 與地端部署或其他雲端環境之間的地理距離。

如果您使用的是 Cloud Interconnect,用於建立 NEG 的可用區,會位於設定 Cloud Interconnect 連結的可用區所在的區域。

Hybrid NEG 僅支援分散式 Envoy 健康檢查

主控台

如何建立混合式連線網路端點群組:

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

    前往「網路端點群組」

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

  3. 使用下列名稱和區域組合,針對每個混合型 NEG 重複執行步驟 4 至 9。

    • 名稱 ON_PREM_NEG_NAMEhybrid-1
      • 可用區:ON_PREM_NEG_ZONE1
      • 子網路:SUBNET_A
    • 名稱 ON_PREM_NEG_NAMEhybrid-2
      • 可用區:ON_PREM_NEG_ZONE2
      • 子網路:SUBNET_B
  4. 按照上一個步驟的說明設定名稱。

  5. 選取網路端點群組類型混合式連線網路端點群組 (可用區)

  6. 選取「網路」NETWORK

  7. 在「Subnet」(子網路) 中,選擇上一個步驟所示的值。

  8. 在「Zone」(可用區) 中,選擇上一個步驟指定的選項。

  9. 輸入「預設通訊埠」

  10. 按一下 [建立]。

將端點新增至混合式連線 NEG:

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

    前往「網路端點群組」

  2. 按一下先前步驟建立的網路端點群組「名稱」。畫面上即會顯示「Network endpoint group detail」(網路端點群組詳細資料) 頁面。

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

  4. 輸入新網路端點的「IP 位址」

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

    1. 如果您選取「預設」,則端點會使用網路端點群組中所有端點的預設通訊埠。
    2. 如果您選取「Custom」(自訂),可以輸入端點要使用的不同「Port number」(通訊埠編號)
  6. 如要新增更多端點,請按一下「Add network endpoint」(新增網路端點),然後重複執行上述步驟。

  7. 新增所有非Google Cloud 端點後,請按一下「建立」

gcloud

  1. 建立使用下列名稱組合的混合式連線 NEG。使用 gcloud compute network-endpoint-groups create 指令

    • 名稱 ON_PREM_NEG_NAMEhybrid-1
      • 可用區 ON_PREM_NEG_ZONEON_PREM_NEG_ZONE1
    • 名稱 ON_PREM_NEG_NAMEhybrid-2
      • 可用區 GCP_NEG_ZONEON_PREM_NEG_ZONE2
    gcloud compute network-endpoint-groups create ON_PREM_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ON_PREM_NEG_ZONE \
        --network=NETWORK
    
  2. 將內部部署後端 VM 端點新增至 ON_PREM_NEG_NAME

    gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \
        --zone=ON_PREM_NEG_ZONE \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1" \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
    

您可以使用這個指令新增先前在內部或雲端環境中設定的網路端點。視需要重複執行 --add-endpoint

設定負載平衡器

主控台

gcloud

  1. 使用 gcloud compute health-checks create tcp 指令定義 TCP 健康狀態檢查。

    gcloud compute health-checks create tcp gil4-basic-check \
       --use-serving-port \
       --global
    
  2. 使用 gcloud compute backend-services create 指令建立後端服務,並啟用記錄功能

    gcloud compute backend-services create BACKEND_SERVICE \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=TCP \
      --enable-logging \
      --logging-sample-rate=1.0 \
      --health-checks=gil4-basic-check \
      --global-health-checks \
      --global
    
  3. 使用 gcloud compute backend-services add-backend 指令,將後端新增到後端服務。

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=CONNECTION \
      --max-connections-per-endpoint=MAX_CONNECTIONS \
      --network-endpoint-group=neg1 \
      --network-endpoint-group-zone=NEG_ZONE1 \
      --network-endpoint-group=neg2 \
      --network-endpoint-group-zone=NEG_ZONE2
    

    如要進一步瞭解如何設定平衡模式,請參閱 gcloud CLI 說明文件中的 --max-connections-per-endpoint 標記。針對 MAX_CONNECTIONS,請輸入後端可處理的並行連線數量上限。

  4. 將混合 NEG 新增至後端服務,做為後端使用。

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=CONNECTION \
      --max-connections-per-endpoint=MAX_CONNECTIONS \
      --network-endpoint-group=hybrid1 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE1 \
      --network-endpoint-group=hybrid2 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE2 \
    

    如要進一步瞭解如何設定平衡模式,請參閱 gcloud CLI 說明文件中的 --max-connections-per-endpoint 參數。針對 MAX_CONNECTIONS,請輸入後端可處理的並行連線數量上限。

  5. 建立目標 Proxy。

    使用 gcloud compute target-tcp-proxies create 指令建立目標 Proxy。

    gcloud compute target-tcp-proxies create gil4-tcp-proxy \
      --backend-service=BACKEND_SERVICE \
      --global
    
  6. 建立兩個轉送規則,一個在 REGION_A 中使用 VIP IP_ADDRESS1,另一個則在 REGION_B 中使用 VIP IP_ADDRESS2。針對轉送規則的 IP 位址,請使用 LB_SUBNET_RANGE1LB_SUBNET_RANGE2 IP 位址範圍。如果您嘗試使用僅限 Proxy 的子網路,轉送規則建立作業將會失敗。

    如果是自訂網路,您必須參照轉送規則中的子網路。請注意,這是 VM 子網路,而不是 Proxy 子網路。

    使用 gcloud compute forwarding-rules create 指令,並加上正確的旗標。

    gcloud compute forwarding-rules create gil4-forwarding-rule-a \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_A \
      --subnet-region=REGION_A \
      --address=IP_ADDRESS1 \
      --ports=80 \
      --target-tcp-proxy=gil4-tcp-proxy \
      --global
    
    gcloud compute forwarding-rules create gil4-forwarding-rule-b \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=SUBNET_B \
      --subnet-region=REGION_B \
      --address=IP_ADDRESS2 \
      --ports=80 \
      --target-tcp-proxy=gil4-tcp-proxy \
      --global
    

測試負載平衡器

建立 VM 執行個體來測試連線能力

  1. REGION_AREGION_B 以及區域中建立用戶端 VM:

    gcloud compute instances create l4-ilb-client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=SUBNET_A \
        --zone=NEG_ZONE1 \
        --tags=allow-ssh
    
    gcloud compute instances create l4-ilb-client-b \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=SUBNET_B \
        --zone=NEG_ZONE2 \
        --tags=allow-ssh
    
  2. 使用 SSH 連線至每個用戶端執行個體。

    gcloud compute ssh l4-ilb-client-a \
       --zone=NEG_ZONE1
    
    gcloud compute ssh l4-ilb-client-b \
       --zone=NEG_ZONE2
    
  3. 確認 IP 位址是否提供主機名稱。

    • 確認用戶端 VM 可連上這兩個 IP 位址。指令應成功執行,並傳回處理要求的後端 VM 名稱:

      curl IP_ADDRESS1
      
      curl IP_ADDRESS2
      

執行 100 個要求

執行 100 個 curl 要求,並透過回應確認這些要求可達到負載平衡。

  • 確認用戶端 VM 可連上這兩個 IP 位址。指令應成功執行,並傳回處理要求的後端 VM 名稱:

    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS1)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS1: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    
    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS2)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS2: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    

測試容錯移轉

  1. REGION_B 中的後端處於不良狀態或無法連線時,請確認是否會將後端移轉至 REGION_A 區域。我們模擬這個情況,移除 REGION_B 中的所有後端:

    gcloud compute backend-services remove-backend BACKEND_SERVICE \
       --balancing-mode=CONNECTION \
       --network-endpoint-group=neg2 \
       --network-endpoint-group-zone=NEG_ZONE2
    
  2. 使用 SSH 連線至 REGION_B 中的用戶端 VM。

    gcloud compute ssh l4-ilb-client-b \
       --zone=NEG_ZONE2
    
  3. 將要求傳送至 REGION_B 區域中的負載平衡 IP 位址。指令輸出應顯示 REGION_A 中後端 VM 的回應。

    {
    RESULTS=
    for i in {1..100}
    do
      RESULTS="$RESULTS:$(curl --silent IP_ADDRESS2)"
    done
    echo "***"
    echo "*** Results of load-balancing to IP_ADDRESS2: "
    echo "***"
    echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
    echo
    }
    

後續步驟