設定第三方設備適用的內部直通式網路負載平衡器

在 Google Cloud中,您可以高可用性方式整合第三方設備,並向外擴充。如要這麼做,請設定靜態路由,並將下一個躍點設為 Google Cloud 內部直通式網路負載平衡器。這樣一來,負載平衡器就能將目的地前置字元的流量,負載平衡至通過健康狀態檢查的第三方 VM 設備集區。

本指南會透過範例,說明如何將內部直通式網路負載平衡器設定為下一個躍點。按照本指南操作之前,請先熟悉以下內容:

權限

如要按照本指南操作,您必須在專案中建立執行個體和修改網路,因此您必須是專案擁有者或編輯者,或是具備下列所有的 Compute Engine IAM 角色:

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

如需詳細資訊,請參閱下列指南:

設定內部直通式網路負載平衡器做為下一個躍點,並使用通用後端

本指南說明如何使用內部直通式網路負載平衡器做為靜態路由的下一個躍點,整合擴充的虛擬設備。

本指南討論的解決方案會建立執行 Debian Linux 的設備 VM。範例 VM 不會執行任何封包篩選作業,但您可以修改這個範例的網路設定,或使用不同的封包篩選或路由軟體,新增這項功能。

本節的步驟說明如何設定下列資源:

  • 範例虛擬私人雲端網路和自訂子網路
  • Google Cloud 允許連入連線到後端設備虛擬機器 (VM) 的防火牆規則
  • 靜態路徑
  • 兩個用戶端 VM,用於測試連線
  • 下列內部直通式網路負載平衡器元件:
    • 代管執行個體群組 (MIG) 中的後端 VM
    • 後端 VM 的健康狀態檢查
    • us-west1 區域的內部後端服務,可管理後端 VM 之間的連線分配
    • 一個用於負載平衡器前端的內部轉送規則和內部 IP 位址

這個範例說明如何將負載平衡至多個後端 NIC,如「負載平衡至多個 NIC」一文所述。

拓撲結構如下所示:

內部直通式網路負載平衡器的下一個躍點多 NIC 詳細範例。
內部直通式網路負載平衡器的下一個躍點多 NIC 詳細範例 (點擊即可放大)。

此圖顯示該範例建立的部分資源:

  • 內部直通式網路負載平衡器後端的應用程式執行個體 (本例中為 fr-ilb1)。應用程式執行個體只有內部 IP 位址。
  • 每個應用程式執行個體都已啟用 can-ip-forward 旗標。如果沒有這個標記,Compute Engine VM 只能在封包的來源 IP 位址與 VM 的內部 IP 位址、別名 IP 範圍的 IP 位址,或解析為 VM 的轉送規則 IP 位址相符時,傳輸封包。can-ip-forward 旗標會變更這項行為,讓 VM 可以傳輸具有任何來源 IP 位址的封包。
  • 目的地為 10.50.1.0/24 的靜態路由,下一個躍點設為負載平衡器的轉送規則 fr-ilb1。

圖表亦會顯示以下流量:

  • testing 虛擬私有雲網路有目的地為 10.50.1.0/24 子網路的流量靜態路徑。這條路徑會將流量導向負載平衡器。
  • 負載平衡器根據設定的工作階段相依性將流量轉送到其中一個應用程式執行個體 (工作階段相依性只會影響 TCP 流量)。

如需其他用途,請參閱「內部直通式網路負載平衡器做為下一個躍點」。

設定網路、區域和子網路

本範例使用以下虛擬私有雲網路、區域和子網路:

  • 網路:這個範例需要兩個網路,每個網路至少有一個子網路。每個後端第三方設備 VM 至少要有兩個網路介面,分別位於兩個虛擬私有雲網路中。本範例中的網路是名為 testing 和 production 的自訂模式虛擬私有雲網路。本範例中的 testing 網路包含用戶端和負載平衡器。production 網路包含目的地目標 VM。

  • 地區:子網路位於 us-west1 地區。由於 VM 執行個體是區域性資源,因此子網路必須位於相同的地區。

  • 子網路:子網路 testing-subnet 和 production-subnet 分別使用 10.30.1.0/24 和 10.50.1.0/24 主要 IP 位址範圍。

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

控制台

建立 testing 網路和 testing-subnet:

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

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

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

  3. 輸入 testing 的「Name」(名稱)。

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

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

建立 production 網路和 production-subnet:

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

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

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

  3. 輸入 production 的「Name」(名稱)。

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

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

gcloud

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

    gcloud compute networks create testing --subnet-mode=custom
    
    gcloud compute networks create production --subnet-mode=custom
    
  2. 在 us-west1 區域的 testing 和 production 網路中建立子網路:

    gcloud compute networks subnets create testing-subnet \
        --network=testing \
        --range=10.30.1.0/24 \
        --region=us-west1
    
    gcloud compute networks subnets create production-subnet \
        --network=production \
        --range=10.50.1.0/24 \
        --region=us-west1
    

設定防火牆規則

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

  • fw-allow-testing-from-both:適用於 testing 網路中所有目標的輸入規則。這項規則允許來自 10.30.1.0/24 和 10.50.1.0/24 IP 位址範圍的流量。這兩個範圍涵蓋兩個網路中 VM 的主要內部 IP 位址。

  • fw-allow-production-from-both:適用於 production 網路中所有目標的輸入規則。這項規則允許來自 10.30.1.0/24 和 10.50.1.0/24 IP 位址範圍的流量。這兩個範圍涵蓋兩個網路中 VM 的主要內部 IP 位址。

  • fw-allow-testing-ssh:套用至 testing 虛擬私有雲網路中 VM 執行個體的輸入規則。這項規則允許從任何位址透過 TCP 通訊埠 22 建立傳入的 SSH 連線。您可以為這項規則選擇限制較多的來源 IP 範圍;舉例來說,您可以指定要從中啟動 SSH 工作階段的系統 IP 範圍。這個範例會使用目標標記 allow-ssh 來辨識套用防火牆規則的 VM。

  • fw-allow-production-ssh:套用至 production 虛擬私有雲網路中 VM 執行個體的輸入規則。這項規則允許從任何位址透過 TCP 通訊埠 22 建立傳入的 SSH 連線。與 fw-allow-testing-ssh 規則一樣,您可以為這項規則選擇限制較嚴格的來源 IP 範圍。

  • fw-allow-health-check:第三方設備 VM 的連入規則,這些 VM 會進行負載平衡。這項規則允許來自Google Cloud 健康狀態檢查探測範圍的流量。這個範例會使用目標標記 allow-health-check 來識別應套用規則的執行個體。

  • fw-allow-production-health-check:為負載平衡的第三方設備 VM 建立連入規則。這項規則允許來自Google Cloud 健康狀態檢查探測範圍的流量。這個範例會使用目標標記 allow-health-check 來識別應套用規則的執行個體。

如果沒有這些防火牆規則,則預設拒絕輸入規則會封鎖傳入至後端執行個體的流量。您必須建立防火牆規則,允許來自 Google Cloud 探測系統 IP 範圍的健康狀態檢查。詳情請參閱探測 IP 範圍。

控制台

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

    前往「Firewall policies」(防火牆政策)

  2. 按一下「建立防火牆規則」,然後輸入下列資訊,以建立規則,允許測試 VM 接收來自測試和正式版子網路的封包:

    • Name (名稱):fw-allow-testing-from-both
    • Network (網路):testing
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
    • 來源篩選器:IPv4 範圍
    • 來源 IPv4 範圍:10.30.1.0/24、10.50.1.0/24
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  3. 點選「建立」。

  4. 按一下「建立防火牆規則」,然後輸入下列資訊,建立允許正式環境 VM 接收來自測試和正式環境子網路封包的規則:

    • Name (名稱):fw-allow-production-from-both
    • Network (網路):production
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
    • 來源篩選器:IPv4 範圍
    • 來源 IPv4 範圍:10.30.1.0/24、10.50.1.0/24
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  5. 點選「建立」。

  6. 按一下「建立防火牆規則」,建立允許測試環境連入 SSH 連線的規則:

    • Name (名稱):fw-allow-testing-ssh
    • Network (網路):testing
    • 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」(通訊協定和通訊埠):選擇「指定的通訊協定和通訊埠」,然後輸入 tcp:22。
  7. 點選「建立」。

  8. 按一下「Create firewall rule」(建立防火牆規則),建立允許連入 SSH 連線的規則 (適用於正式環境):

    • Name (名稱):fw-allow-production-ssh
    • Network (網路):production
    • 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」(通訊協定和通訊埠):選擇「指定的通訊協定和通訊埠」,然後輸入 tcp:22。
  9. 點選「建立」。

  10. 按一下「建立防火牆規則」,建立規則以允許測試環境中的健康狀態檢查:Google Cloud

    • Name (名稱):fw-allow-health-check
    • Network (網路):testing
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記):allow-health-check
    • 來源篩選器:IPv4 範圍
    • 來源 IPv4 範圍: 35.191.0.0/16
    • Protocols and ports (通訊協定和通訊埠):tcp
  11. 點選「建立」。

  12. 按一下「建立防火牆規則」,建立允許在正式環境中進行健康狀態檢查的Google Cloud 規則:

    • Name (名稱):fw-allow-production-health-check
    • Network (網路):production
    • Priority (優先順序):1000
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記):allow-health-check
    • 來源篩選器:IPv4 範圍
    • 來源 IPv4 範圍: 35.191.0.0/16
    • Protocols and ports (通訊協定和通訊埠):tcp
  13. 點選「建立」。

gcloud

  1. 建立 fw-allow-testing-subnet 防火牆規則,允許測試 VM 接收來自 testing 和 production 子網路的封包:

    gcloud compute firewall-rules create fw-allow-testing-from-both \
        --network=testing \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.30.1.0/24,10.50.1.0/24 \
        --rules=all
    
  2. 建立 fw-allow-production-subnet 防火牆規則,允許正式環境 VM 接收來自 testing 和 production 子網路的封包:

    gcloud compute firewall-rules create fw-allow-production-from-both \
        --network=production \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.30.1.0/24,10.50.1.0/24 \
        --rules=all
    
  3. 建立 fw-allow-testing-ssh 防火牆規則,允許透過 SSH 連線至具有 allow-ssh 網路標記的 VM。若省略 source-ranges,Google Cloud 會將規則解讀為任何來源。

    gcloud compute firewall-rules create fw-allow-testing-ssh \
        --network=testing \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  4. 建立 fw-allow-production-ssh 防火牆規則,允許連線至具有 allow-ssh 網路標記的 VM。

    gcloud compute firewall-rules create fw-allow-production-ssh \
        --network=production \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  5. 建立 fw-allow-health-check 規則,允許對 testing 網路中的第三方設備 VM 進行健康狀態檢查。 Google Cloud

    gcloud compute firewall-rules create fw-allow-testing-health-check \
        --network=testing \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=35.191.0.0/16 \
        --rules=tcp
    
  6. 建立 fw-allow-production-health-check 防火牆規則,允許對 production 網路中的第三方設備 VM 進行Google Cloud 健康狀態檢查。

    gcloud compute firewall-rules create fw-allow-production-health-check \
        --network=production \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=35.191.0.0/16 \
        --rules=tcp
    

建立第三方虛擬設備

下列步驟說明如何建立執行個體範本,以及具有多個網路介面的代管地區執行個體群組。這個執行個體群組會做為本範例的第三方虛擬設備。

控制台

您必須使用 gcloud 執行這個步驟,因為您需要建立具有多個網路介面的執行個體範本。目前 Google Cloud 控制台不支援建立具有多個網路介面的執行個體範本。

gcloud

  1. 建立名為 config.sh 的本機檔案,並插入下列內容:

    #!/bin/bash
    # Enable IP forwarding:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-example.conf
    # Read VM network configuration:
    md_vm="http://metadata.google.internal/computeMetadata/v1/instance/"
    md_net="$md_vm/network-interfaces"
    nic0_gw="$(curl $md_net/0/gateway -H "Metadata-Flavor:Google" )"
    nic0_mask="$(curl $md_net/0/subnetmask -H "Metadata-Flavor:Google")"
    nic0_addr="$(curl $md_net/0/ip -H "Metadata-Flavor:Google")"
    nic0_id="$(ip addr show | grep $nic0_addr | awk '{print $NF}')"
    nic1_gw="$(curl $md_net/1/gateway -H "Metadata-Flavor:Google")"
    nic1_mask="$(curl $md_net/1/subnetmask -H "Metadata-Flavor:Google")"
    nic1_addr="$(curl $md_net/1/ip -H "Metadata-Flavor:Google")"
    nic1_id="$(ip addr show | grep $nic1_addr | awk '{print $NF}')"
    # Source based policy routing for nic1
    echo "100 rt-nic1" >> /etc/iproute2/rt_tables
    sudo ip rule add pri 32000 from $nic1_gw/$nic1_mask table rt-nic1
    sleep 1
    sudo ip route add 35.191.0.0/16 via $nic1_gw dev $nic1_id table rt-nic1
    sudo ip route add 130.211.0.0/22 via $nic1_gw dev $nic1_id table rt-nic1
    # Use a web server to pass the health check for this example.
    # You should use a more complete test in production.
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    echo "Example web page to pass health check" | \
    tee /var/www/html/index.html
    sudo systemctl restart apache2

  2. 為第三方虛擬設備建立執行個體範本。執行個體範本必須包含 --can-ip-forward 旗標,這樣從範本建立的 VM 執行個體才能轉送 testing 和 production 網路中其他執行個體的封包。

    gcloud compute instance-templates create third-party-template-multinic \
        --region=us-west1 \
        --network-interface subnet=testing-subnet,address="" \
        --network-interface subnet=production-subnet \
        --tags=allow-ssh,allow-health-check,my-network-tag \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --can-ip-forward \
        --metadata-from-file=startup-script="config.sh"
    
  3. 為第三方虛擬設備建立代管執行個體群組。 這個指令會在 us-west1 中建立區域代管執行個體群組,之後可以自動調度資源。

    gcloud compute instance-groups managed create third-party-instance-group \
        --region=us-west1 \
        --template=third-party-template-multinic \
        --size=3
    

建立負載平衡資源

這些步驟會設定所有內部直通式網路負載平衡器元件,從健康狀態檢查和後端服務開始,然後再設定前端元件:

  • 健康檢查。在本範例中,HTTP 健康狀態檢查會檢查 HTTP 200 (OK) 回應。詳情請參閱「健康狀態檢查」一節。

  • 後端服務。即使這個範例的後端服務指定了 TCP 通訊協定,當負載平衡器是路徑的下一個躍點時,Google Cloud 會轉送所有通訊協定 (TCP、UDP 和 ICMP) 的流量。

  • 轉送規則。即使這個範例轉送規則指定了 TCP 通訊埠 80,當負載平衡器是路由的下一個躍點時,任何 TCP 或 UDP 通訊埠上的流量都會傳送至負載平衡器的後端。

  • 內部 IP 位址。範例會指定用於轉送規則的內部 IP 位址為 10.30.1.99。

控制台

開始設定

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

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

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

建立第一個負載平衡器

  1. 在「Load Balancer name」(負載平衡器名稱) 欄位中輸入 ilb1。
  2. 在「Region」(區域) 清單中選取「us-west1」。
  3. 在「Network」(網路) 清單中,選取「testing」。
  4. 按一下「後端設定」,然後執行下列操作:
    1. 在「健康狀態檢查」清單中,按一下「建立健康狀態檢查」,然後輸入下列資訊:
      • Name (名稱):hc-http-80
      • 「Protocol」(通訊協定):HTTP
      • Port (通訊埠):80
      • Proxy protocol (Proxy 通訊協定):NONE
      • 要求:/ 請注意,使用 Google Cloud 控制台建立負載平衡器時,系統會啟用全域健康狀態檢查。如要建立區域健康狀態檢查,請使用 gcloud 或 API。
    2. 點選「建立」。
    3. 在「New backend」(新增後端) 區段中,選取 third-party-instance-group 執行個體群組,然後按一下「Done」(完成)。
    4. 在「工作階段相依性」清單中,選取「用戶端 IP」。
    5. 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
  5. 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」(新的前端 IP 和通訊埠) 區段中,進行下列變更:
    1. Name (名稱):fr-ilb1
    2. Subnetwork (子網路):testing-subnet
    3. 在「Internal IP」(內部 IP) 中,選擇「Reserve a static internal IP address」(保留靜態內部 IP 位址),輸入以下資訊,然後點選「Reserve」(保留):
      • Name (名稱):ip-ilb
      • Static IP address (靜態 IP 位址):「Let me choose」(自行選擇)
      • Custom IP address (自訂 IP 位址):10.30.1.99
    4. 通訊埠:選擇「單一」,並在「通訊埠編號」中輸入 80。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。
    5. 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
  6. 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
  7. 點選「建立」。

開始設定

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

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

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

建立第二個負載平衡器

  1. 將「Name」(名稱) 設為 ilb2。
  2. 將「區域」設為 us-west1。
  3. 將「Network」(網路) 設為 production。
  4. 按一下「後端設定」,然後進行下列變更:
    1. 在「Backends」(後端) 的「New item」(新增項目) 區段中,選取 third-party-instance-group 執行個體群組,然後按一下「Done」(完成)。
    2. 在「Health check」(健康狀態檢查) 中選取 hc-http-80。
    3. 在「工作階段相依性」部分,選取「用戶端 IP」。
    4. 請先確認「後端設定」旁顯示藍色勾號,然後再繼續操作。如果沒有,請檢查這個步驟。
  5. 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」(新的前端 IP 和通訊埠) 區段中,進行下列變更:
    1. Name (名稱):fr-ilb2
    2. Subnetwork (子網路):production-subnet
    3. 在「Internal IP」(內部 IP) 中,選擇「Reserve a static internal IP address」(保留靜態內部 IP 位址),輸入以下資訊,然後點選「Reserve」(保留):
      • Name (名稱):ip-ilb2
      • Static IP address (靜態 IP 位址):「Let me choose」(自行選擇)
      • Custom IP address (自訂 IP 位址):10.50.1.99
    4. 連接埠:選擇「單一」,並在「通訊埠編號」中輸入 80。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。
    5. 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
  6. 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
  7. 點選「建立」。

gcloud

  1. 建立新的 HTTP 健康狀態檢查,以測試通訊埠 80 上連至 VM 的 TCP 連線。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. 在 us-west1 區域建立兩個內部後端服務。

    gcloud compute backend-services create ilb1 \
        --load-balancing-scheme=internal \
        --health-checks-region=us-west1 \
        --health-checks=hc-http-80 \
        --region=us-west1 \
        --network=testing \
        --session-affinity=CLIENT_IP
    
    gcloud compute backend-services create ilb2 \
        --load-balancing-scheme=internal \
        --health-checks-region=us-west1 \
        --health-checks=hc-http-80 \
        --region=us-west1 \
        --network=production \
        --session-affinity=CLIENT_IP
    
  3. 將具有第三方虛擬設備的執行個體群組新增為後端服務的後端。

    gcloud compute backend-services add-backend ilb1 \
        --instance-group=third-party-instance-group \
        --instance-group-region=us-west1 \
        --region=us-west1
    
    gcloud compute backend-services add-backend ilb2 \
        --instance-group=third-party-instance-group \
        --instance-group-region=us-west1 \
        --region=us-west1
    
  4. 建立內部轉送規則,並將其連結到後端服務以完成負載平衡器設定。請注意,當負載平衡器做為路由的下一個躍點時,負載平衡器的通訊協定 (TCP) 和通訊埠 (80) 不會限制轉送至後端執行個體 (第三方虛擬設備) 的通訊埠和通訊協定。

    gcloud compute forwarding-rules create fr-ilb1 \
        --load-balancing-scheme=internal \
        --ports=80 \
        --network=testing \
        --subnet=testing-subnet \
        --region=us-west1 \
        --backend-service=ilb1 \
        --address=10.30.1.99
    
    gcloud compute forwarding-rules create fr-ilb2 \
        --load-balancing-scheme=internal \
        --ports=80 \
        --network=production \
        --subnet=production-subnet \
        --region=us-west1 \
        --backend-service=ilb2 \
        --address=10.50.1.99
    

建立靜態路徑,將負載平衡器定義為下一個躍點

建立兩個使用下一個躍點負載平衡器的靜態路徑。

控制台

建立第一個路線

  1. 前往 Google Cloud 控制台的「Routes」(路徑) 頁面。

    前往「Routes」(路徑)

  2. 按一下 [Create route] (建立路徑)。

  3. 在「Name」(名稱) 中輸入 ilb-nhop-dest-10-50-1。

  4. 選取 testing 網路。

  5. 在「目的地 IP 範圍」中輸入 10.50.1.0/24。

  6. 在「Instance tags」(執行個體標記) 部分,輸入 my-network-tag。

  7. 在路由的「下一個躍點」部分,選取「指定內部直通式網路負載平衡器的轉送規則」。

    如要將負載平衡器的 IP 位址指定為下一個躍點,請使用 gcloud CLI 或 API。

  8. 指定轉送規則名稱。選取轉送規則名稱 fr-ilb1。

  9. 點選「建立」。

建立第二條路線

  1. 按一下 [Create route] (建立路徑)。
  2. 在「Name」(名稱) 中輸入 ilb-nhop-dest-10-30-1。
  3. 選取 testing 網路。
  4. 在「目的地 IP 範圍」中輸入 10.30.1.0/24。
  5. 在路由的「下一個躍點」部分,選取「指定內部直通式網路負載平衡器的轉送規則」。

    如要將負載平衡器的 IP 位址指定為下一個躍點,請使用 gcloud CLI 或 API。

  6. 選取轉送規則名稱 fr-ilb2。

  7. 點選「建立」。

gcloud

建立靜態路由,並將下一個躍點設為各個負載平衡器的轉送規則,然後相應設定每個目的地範圍。

對於 --next-hop-ilb 標記,您可以指定轉送規則名稱或轉送規則 IP 位址。下一個躍點轉送規則 IP 位址可位於包含路由的相同虛擬私有雲網路,或位於對等互連的虛擬私有雲網路。詳情請參閱「下一個躍點專案和網路」。

在這個範例中,第一條路徑使用 IP 位址 10.30.1.99,第二條路徑則使用轉送規則名稱 fr-ilb12。

您可以選擇在路徑上指定一或多個執行個體標記。如果您在路徑上指定網路標記,路徑可以套用至特定 VM。如果未指定任何網路標記,路徑會套用至虛擬私有雲網路中的所有 VM。在本範例中,路徑會使用 my-network-tag 做為路徑的網路標記。

gcloud compute routes create ilb-nhop-dest-10-50-1 \
    --network=testing \
    --destination-range=10.50.1.0/24 \
    --next-hop-ilb=10.30.1.99 \
    --tags=my-network-tag
gcloud compute routes create ilb-nhop-dest-10-30-1 \
    --network=production \
    --destination-range=10.30.1.0/24 \
    --next-hop-ilb=fr-ilb2 \
    --next-hop-ilb-region=us-west1

建立 testing VM 執行個體

這個範例會在 testing 虛擬私有雲網路的 testing-subnet (10.30.1.0/24) 中,建立 IP 位址為 10.30.1.100 的 VM 執行個體。

gcloud

  1. 執行下列指令來建立 testing-vm。

    gcloud compute instances create testing-vm \
        --zone=us-west1-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh,my-network-tag \
        --subnet=testing-subnet \
        --private-network-ip 10.30.1.100 \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo 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
        sudo systemctl restart apache2'
    

建立 production VM 執行個體

這個範例會在 production 虛擬私有雲網路的 production-subnet (10.50.1.0/24) 中,建立 IP 位址為 10.50.1.100 的 VM 執行個體。

gcloud

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

  1. 執行下列指令來建立 production-vm。

    gcloud compute instances create production-vm \
        --zone=us-west1-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --tags=allow-ssh \
        --subnet=production-subnet \
        --private-network-ip 10.50.1.100 \
        --metadata=startup-script='#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo 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
        sudo systemctl restart apache2'
    

測試多 NIC 部署的負載平衡

  1. 確認負載平衡器後端的健康狀態。

    gcloud compute backend-services get-health ilb1 --region us-west1
    
    gcloud compute backend-services get-health ilb2 --region us-west1
    
  2. 從 testing VM 測試連線。

    gcloud compute ssh testing-vm --zone=us-west1-a
    
    curl http://10.50.1.99
    
    exit
    
  3. 從 production VM 測試連線。

    gcloud compute ssh production-vm --zone=us-west1-a
    
    curl http://10.30.1.99
    
    exit
    

啟用對稱雜湊

如果兩個內部直通式網路負載平衡器都符合負載平衡器需求,系統就會啟用對稱雜湊 (且無法停用)。

如果您的靜態路由或內部直通式網路負載平衡器轉送規則是在 2021 年 6 月 22 日前建立,請按照下列步驟操作:

  • 在每個網路中,建立新的轉送規則,並參照每個負載平衡器現有轉送規則所用的後端服務。

  • 在每個網路中,建立參照新轉送規則的新靜態路徑。確認每條新路線的優先順序都高於現有路線。

  • 刪除優先順序較低的現有路徑,然後刪除較舊的轉送規則。

清除所用資源

  1. 在負載平衡器設定中,從後端服務移除後端。

    gcloud compute backend-services remove-backend ilb1 \
        --instance-group=third-party-instance-group \
        --instance-group-region=us-west1 \
        --region=us-west1
    
    gcloud compute backend-services remove-backend ilb2 \
        --instance-group=third-party-instance-group \
        --instance-group-region=us-west1 \
        --region=us-west1
    
  2. 刪除路徑。

    gcloud compute routes delete ilb-nhop-dest-10-50-1
    
    gcloud compute routes delete ilb-nhop-dest-10-30-1
    
  3. 在負載平衡器設定中,刪除轉送規則。

    gcloud compute forwarding-rules delete fr-ilb1 \
        --region=us-west1
    
    gcloud compute forwarding-rules delete fr-ilb2 \
        --region=us-west1
    
  4. 在負載平衡器設定中,刪除後端服務。

    gcloud compute backend-services delete ilb1 \
        --region=us-west1
    
    gcloud compute backend-services delete ilb2 \
        --region=us-west1
    
  5. 在負載平衡器設定中,刪除健康狀態檢查。

    gcloud compute health-checks delete hc-http-80 \
        --region=us-west1
    

    如果您使用 Google Cloud 控制台,健康狀態檢查會是全域檢查。 因此,指令如下:

    gcloud compute health-checks delete hc-http-80 \
         --global
    
  6. 刪除代管執行個體群組。

    gcloud compute instance-groups managed delete third-party-instance-group \
        --region=us-west1
    
  7. 刪除執行個體範本。

    gcloud compute instance-templates delete third-party-template
    
    gcloud compute instance-templates delete third-party-template-multinic
    
  8. 刪除測試和正式環境執行個體。

    gcloud compute instances delete testing-vm \
        --zone=us-west1-a
    
    gcloud compute instances delete production-vm \
        --zone=us-west1-a
    

後續步驟