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

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

本指南使用範例來說明如何將內部直通式網路負載平衡器設為下一個躍點。在您依循這份指南操作之前,請先熟悉以下內容:

權限

如要按照本指南操作,您必須在專案中建立執行個體和修改網路,因此您必須是專案擁有者或編輯者,或是需要下列所有 Compute Engine 身分與存取權管理角色

工作 必要角色
建立網路、子網路和負載平衡器元件 網路管理員
新增與移除防火牆規則 安全性管理員
建立執行個體 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 VPC 網路有靜態路徑,可將流量轉送至 10.50.1.0/24 子網路。這個路徑會將流量導向負載平衡器。
  • 負載平衡器根據設定的工作階段相依性將流量轉送到其中一個應用程式執行個體 (工作階段相依性只會影響 TCP 流量)。

如需其他使用案例,請參閱「以內部 TCP/UDP 負載平衡器做為下一個躍點」一文。

設定網路、地區和子網路

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

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

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

  • 子網路:子網路 testing-subnetproduction-subnet 分別使用 10.30.1.0/2410.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 地區的 testingproduction 網路中建立子網路:

    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/2410.50.1.0/24 IP 位址範圍的來源流量。這兩個範圍涵蓋兩個網路中 VM 的主要內部 IP 位址。

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

  • fw-allow-testing-ssh:輸入規則套用至 testing VPC 網路中的 VM 執行個體。這項規則允許來自任何位址的 TCP 通訊埠 22 連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以指定打算啟動 SSH 工作階段之系統的 IP 範圍。這個範例會使用目標標記 allow-ssh 來辨識套用防火牆規則的 VM。

  • fw-allow-production-ssh:輸入規則套用至 production VPC 網路中的 VM 執行個體。這項規則允許來自任何位址的 TCP 通訊埠 22 連入 SSH 連線。如同 fw-allow-testing-ssh 規則,您可以為這項規則選擇較嚴格的來源 IP 範圍。

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

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

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

主控台

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

    前往「防火牆政策」

  2. 按一下「Create firewall rule」(建立防火牆規則),然後輸入下列資訊,建立規則,允許測試 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/2410.50.1.0/24
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  3. 按一下 [建立]。

  4. 按一下「Create firewall rule」(建立防火牆規則),然後輸入以下資訊,以建立規則,允許正式環境 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/2410.50.1.0/24
    • 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
  5. 按一下 [建立]。

  6. 按一下「Create firewall rule」(建立防火牆規則),建立允許測試環境中連入 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」(通訊協定和通訊埠):選擇「Specified 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」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入 tcp:22
  9. 按一下 [建立]。

  10. 按一下「Create firewall rule」(建立防火牆規則),建立允許在測試環境中進行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 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):130.211.0.0/2235.191.0.0/16
    • Protocols and ports (通訊協定和通訊埠):tcp
  11. 按一下 [建立]。

  12. 按一下「Create firewall rule」(建立防火牆規則),建立允許在實際環境中進行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 範圍
    • Source IPv4 ranges (來源 IPv4 範圍):130.211.0.0/2235.191.0.0/16
    • Protocols and ports (通訊協定和通訊埠):tcp
  13. 按一下 [建立]。

gcloud

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

    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 接收來自 testingproduction 子網路的封包:

    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 防火牆規則,允許與具有 allow-ssh 網路標記的 VM 建立 SSH 連線。若省略 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 建立 SSH 連線。

    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=130.211.0.0/22,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=130.211.0.0/22,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 執行個體可以轉送來自 testingproduction 網路中其他執行個體的封包。

    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=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」(負載平衡)頁面。

    前往「負載平衡」

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

建立第一個負載平衡器

  1. 將「Name」(名稱) 設為 ilb1
  2. 將「區域」設為 us-west1
  3. 將「Network」(網路) 設為 testing
  4. 按一下「後端設定」,然後進行以下變更:
    1. 針對「Backends」(後端),請在「New item」(新增項目) 區段中選取 third-party-instance-group 執行個體群組,然後按一下「Done」(完成)
    2. 在「Health check」(健康狀態檢查) 部分,選擇「Create another health check」(建立另一個健康狀態檢查),輸入以下資訊,然後按一下「Save and continue」(儲存並繼續)
      • Name (名稱):hc-http-80
      • Protocol (通訊協定):HTTP
      • Port (通訊埠):80
      • Proxy protocol (Proxy 通訊協定):NONE
      • 要求路徑/ 請注意,使用 Google Cloud 控制台建立負載平衡器時,系統會啟用全域健康狀態檢查。如要建立區域健康狀態檢查,請使用 gcloud 或 API。
    3. 在「Session affinity」(工作階段相依性) 部分,選取「Client IP」
    4. 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
  5. 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」區段中,進行以下變更:
    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. 「Ports」(通訊埠):選擇「Single」(單一),然後輸入 80 做為「Port number」(通訊埠編號)。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。
    5. 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
  6. 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
  7. 按一下 [建立]。

開始設定

  1. 前往 Google Cloud 控制台的「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. 在「Session affinity」(工作階段相依性) 部分,選取「Client IP」
    4. 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
  5. 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」區段中,進行以下變更:
    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. 「Ports」(通訊埠):選擇「Single」(單一),然後輸入 80 做為「Port number」(通訊埠號碼)。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。
    5. 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
  6. 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
  7. 按一下 [建立]。

  8. production VPC 網路中設定負載平衡器資源。

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. 在「Destination IP range」(目的地 IP 範圍) 中輸入 10.50.1.0/24

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

  7. 對於路徑的「Next hop」(下一個躍點),請選取「Specify a forwarding rule of internal TCP/UDP load balancer」(指定內部 TCP/UDP 負載平衡器的轉送規則)。

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

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

  9. 按一下 [建立]。

建立第二個路徑

  1. 按一下 [Create route] (建立路徑)
  2. 在路徑「Name」(名稱) 中輸入 ilb-nhop-dest-10-30-1
  3. 選取 testing 網路。
  4. 在「Destination IP range」中輸入 10.30.1.0/24
  5. 對於路徑的「Next hop」(下一個躍點),請選取「Specify a forwarding rule of internal TCP/UDP load balancer」(指定內部 TCP/UDP 負載平衡器的轉送規則)。

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

  6. 針對轉送規則名稱,選取 fr-ilb2

  7. 按一下 [建立]。

gcloud

建立靜態路徑,將下一個躍點設為各負載平衡器的轉送規則,並據此設定各目的地範圍。

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

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

您可以選擇在路徑上指定一或多個例項標記。如果您在路徑上指定網路標記,路徑就能套用至特定 VM。如果您未指定任何網路標記,路徑會套用至 VPC 網路中的所有 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
    

啟用對稱雜湊

計算對應至後端執行個體的雜湊碼時,Google Cloud 會忽略 IP 位址和通訊埠的方向。無論封包的來源方向為何,計算出來的一致雜湊值都會相同。這就是所謂的「對稱雜湊法」

如要在現有的內部直通式網路負載平衡器上啟用此雜湊處理行為,您必須重新建立轉送規則和下一個躍點路徑。

詳情請參閱「對稱雜湊運算」。

刪除轉送規則後再重新建立

主控台

刪除轉送規則並建立新規則

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

    前往「負載平衡」

  2. 按一下 be-ilb 負載平衡器,然後點選「Edit」

  3. 按一下「前端設定」

  4. 將滑鼠游標懸停在轉送規則上,然後按一下 「刪除」,即可移除。

  5. 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)

  6. 在「 New Frontend IP and port」(新的前端 IP 和通訊埠) 區段中,進行下列變更:

    1. Name (名稱):FORWARDING_RULE_NAME
    2. Subnetwork (子網路):SUBNET_NAME
    3. 在「Internal IP」 中,選取 IP_ADDRESS
    4. Ports (通訊埠):PORT_NUMBERALL
    5. 按一下 [完成]
    6. 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
  7. 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。

  8. 按一下 [建立]。

gcloud

  1. 刪除現有的轉送規則。

    gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \
        --region=REGION
    
  2. 建立具有相同名稱的替換轉送規則。

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=internal \
        --ports=PORT_NUMBER or `ALL` \
        --network=NETWORK_NAME \
        --subnet=SUBNET_NAME \
        --region=REGION \
        --backend-service=BACKEND_SERVICE_NAME \
        --address=IP_ADDRESS
    

不需使用 SNAT 的情況

如上一個範例所示,在下列所有情況下,就不需要使用來源網路位址轉譯 (SNAT):

  • 內部直通式網路負載平衡器的轉送規則是在 2021 年 6 月 22 日當天或之後建立。
  • 參照轉接規則的靜態路徑是在 2021 年 6 月 22 日當天或之後建立。
  • 內部直通式網路負載平衡器的後端服務不會使用 NONE 工作階段相依性設定。

您可以按照下列步驟,將現有的下一個躍點內部直通式網路負載平衡器路由轉換為使用對稱雜湊:

  • 確認內部直通式網路負載平衡器的後端服務不會使用 NONE 工作階段相依性設定

  • 建立參照相同後端服務的替換轉送規則。替換的轉送規則使用不同的 IP 位址。

  • 建立參照新轉送規則的替換靜態路徑。請確認這個替換路徑的優先順序高於現有路徑。

  • 刪除優先順序較低的現有路徑 (參照先前的轉送規則),然後刪除先前的轉送規則。

清除所用資源

  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
    

後續步驟