在 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」一文所述。
拓撲如下所示:
此圖顯示該範例建立的部分資源:
- 位於內部直通式網路負載平衡器 (本例為
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 必須至少具備兩個網路介面,每個虛擬私人雲端網路各一個網路介面。這個範例中的網路是自訂模式虛擬私有雲網路,名稱為
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
:
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
輸入
testing
的「Name」。在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
testing-subnet
- Region (區域):
us-west1
- IP address range (IP 位址範圍):
10.30.1.0/24
- 按一下 [完成]。
- Name (名稱):
按一下 [建立]。
建立 production
網路和 production-subnet
:
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
輸入
production
的「Name」。在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
production-subnet
- Region (區域):
us-west1
- IP address range (IP 位址範圍):
10.50.1.0/24
- 按一下 [完成]。
- Name (名稱):
按一下 [建立]。
gcloud
建立自訂模式虛擬私有雲網路:
gcloud compute networks create testing --subnet-mode=custom
gcloud compute networks create production --subnet-mode=custom
在
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
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/22
和35.191.0.0/16
) 的流量。本範例使用目標標記allow-health-check
來辨識應套用此規則的執行個體。fw-allow-production-health-check
:適用於負載平衡的第三方設備 VM 的輸入規則。這項規則允許來自Google Cloud 健康檢查系統 (130.211.0.0/22
和35.191.0.0/16
) 的流量。本範例使用目標標記allow-health-check
來辨識應套用此規則的執行個體。
如果沒有這些防火牆規則,則預設拒絕輸入規則會封鎖傳入至後端執行個體的流量。您必須建立防火牆規則,以允許從 Google Cloud 探測系統的 IP 範圍進行健康狀態檢查。詳情請參閱探測 IP 範圍一節。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
按一下「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/24
、10.50.1.0/24
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
- Name (名稱):
按一下 [建立]。
按一下「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/24
、10.50.1.0/24
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
- Name (名稱):
按一下 [建立]。
按一下「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
。
- Name (名稱):
按一下 [建立]。
按一下「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
。
- Name (名稱):
按一下 [建立]。
按一下「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/22
和35.191.0.0/16
- Protocols and ports (通訊協定和通訊埠):
tcp
- Name (名稱):
按一下 [建立]。
按一下「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/22
和35.191.0.0/16
- Protocols and ports (通訊協定和通訊埠):
tcp
- Name (名稱):
按一下 [建立]。
gcloud
建立
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
建立
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
建立
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
建立
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
建立
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
建立
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
建立名為
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
為第三方虛擬設備建立執行個體範本。執行個體範本必須包含
--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=startup-script="$(< config.sh)"
為第三方虛擬設備建立代管執行個體群組。這個指令會建立在
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
。
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」。
- 在「直通或使用 Proxy」部分,選取「直通式負載平衡器」,然後點選「下一步」。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 按一下 [設定]。
建立第一個負載平衡器
- 將「Name」(名稱) 設為
ilb1
。 - 將「區域」設為
us-west1
。 - 將「Network」(網路) 設為
testing
。 - 按一下「後端設定」,然後進行以下變更:
- 針對「Backends」(後端),請在「New item」(新增項目) 區段中選取
third-party-instance-group
執行個體群組,然後按一下「Done」(完成)。 - 在「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。
- Name (名稱):
- 在「Session affinity」(工作階段相依性) 部分,選取「Client IP」。
- 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
- 針對「Backends」(後端),請在「New item」(新增項目) 區段中選取
- 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」區段中,進行以下變更:
- Name (名稱):
fr-ilb1
- Subnetwork (子網路):
testing-subnet
- 在「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
- Name (名稱):
- 「Ports」(通訊埠):選擇「Single」(單一),然後輸入
80
做為「Port number」(通訊埠編號)。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。 - 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
- Name (名稱):
- 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
- 按一下 [建立]。
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」。
- 在「直通或使用 Proxy」部分,選取「直通式負載平衡器」,然後點選「下一步」。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 按一下 [設定]。
建立第二個負載平衡器
- 將「Name」(名稱) 設為
ilb2
。 - 將「區域」設為
us-west1
。 - 將「Network」(網路) 設為
production
。 - 按一下「後端設定」,然後進行以下變更:
- 針對「Backends」(後端),請在「New item」(新增項目) 區段中選取
third-party-instance-group
執行個體群組,然後按一下「Done」(完成)。 - 在「Health check」(健康狀態檢查) 中選取
hc-http-80
。 - 在「Session affinity」(工作階段相依性) 部分,選取「Client IP」。
- 繼續操作之前,請先驗證「Backend configuration」(後端設定) 旁是否有藍色勾號。如果沒有,請檢查這個步驟。
- 針對「Backends」(後端),請在「New item」(新增項目) 區段中選取
- 按一下 [Frontend configuration] (前端設定)。在「New Frontend IP and port」區段中,進行以下變更:
- Name (名稱):
fr-ilb2
- Subnetwork (子網路):
production-subnet
- 在「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
- Name (名稱):
- 「Ports」(通訊埠):選擇「Single」(單一),然後輸入
80
做為「Port number」(通訊埠號碼)。請記住,為負載平衡器選擇的通訊協定和通訊埠,並不限於負載平衡器是路徑的下一個躍點時使用的通訊協定和通訊埠。 - 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
- Name (名稱):
- 按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
按一下 [建立]。
在
production
VPC 網路中設定負載平衡器資源。
gcloud
建立新的 HTTP 健康狀態檢查,以測試通訊埠 80 上連至 VM 的 TCP 連線。
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
在
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
將具有第三方虛擬設備的執行個體群組新增為後端服務的後端。
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
建立內部轉送規則,並將其連結到後端服務,以完成負載平衡器設定。請注意,當負載平衡器用於路徑的下一個躍點時,其通訊協定 (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
建立將負載平衡器定義為下一個躍點的靜態路徑
建立兩個使用下一個躍點負載平衡器的靜態路徑。
主控台
建立第一個路線
前往 Google Cloud 控制台的「Routes」(路徑) 頁面。
按一下 [Create route] (建立路徑)。
在路徑「Name」 中輸入
ilb-nhop-dest-10-50-1
。選取
testing
網路。在「Destination IP range」(目的地 IP 範圍) 中輸入
10.50.1.0/24
。在「Instance tags」(執行個體標記) 中輸入
my-network-tag
。對於路徑的「Next hop」(下一個躍點),請選取「Specify a forwarding rule of internal TCP/UDP load balancer」(指定內部 TCP/UDP 負載平衡器的轉送規則)。
如要將負載平衡器的 IP 位址指定為下一個躍點,請使用 gcloud CLI 或 API。
指定轉送規則名稱。針對轉送規則名稱,選取
fr-ilb1
。按一下 [建立]。
建立第二個路徑
- 按一下 [Create route] (建立路徑)。
- 在路徑「Name」(名稱) 中輸入
ilb-nhop-dest-10-30-1
。 - 選取
testing
網路。 - 在「Destination IP range」中輸入
10.30.1.0/24
。 對於路徑的「Next hop」(下一個躍點),請選取「Specify a forwarding rule of internal TCP/UDP load balancer」(指定內部 TCP/UDP 負載平衡器的轉送規則)。
如要將負載平衡器的 IP 位址指定為下一個躍點,請使用 gcloud CLI 或 API。
針對轉送規則名稱,選取
fr-ilb2
。按一下 [建立]。
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
請執行下列指令來建立
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
區域。
請執行下列指令來建立
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 部署的負載平衡功能
驗證負載平衡器後端的健康狀態。
gcloud compute backend-services get-health ilb1 --region us-west1
gcloud compute backend-services get-health ilb2 --region us-west1
測試從
testing
VM 建立連線。gcloud compute ssh testing-vm --zone=us-west1-a
curl http://10.50.1.99
exit
測試從
production
VM 建立連線。gcloud compute ssh production-vm --zone=us-west1-a
curl http://10.30.1.99
exit
啟用對稱雜湊
計算對應至後端執行個體的雜湊碼時,Google Cloud 會忽略 IP 位址和通訊埠的方向。無論封包的來源方向為何,計算出來的一致雜湊值都會相同。這就是所謂的「對稱雜湊法」。
如要在現有的內部直通式網路負載平衡器上啟用此雜湊處理行為,您必須重新建立轉送規則和下一個躍點路徑。
詳情請參閱「對稱雜湊運算」。
刪除轉送規則後再重新建立
主控台
刪除轉送規則並建立新規則
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
按一下
be-ilb
負載平衡器,然後點選「Edit」。按一下「前端設定」。
將滑鼠游標懸停在轉送規則上,然後按一下
「刪除」,即可移除。按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)。
在「 New Frontend IP and port」(新的前端 IP 和通訊埠) 區段中,進行下列變更:
- Name (名稱):
FORWARDING_RULE_NAME
- Subnetwork (子網路):
SUBNET_NAME
- 在「Internal IP」 中,選取
IP_ADDRESS
- Ports (通訊埠):
PORT_NUMBER
或ALL
。 - 按一下 [完成]。
- 繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有一個藍色勾號。如果沒有,請檢查這個步驟。
- Name (名稱):
按一下 [Review and finalize] (檢查並完成)。請仔細檢查您的設定。
按一下 [建立]。
gcloud
刪除現有的轉送規則。
gcloud compute forwarding-rules delete FORWARDING_RULE_NAME \ --region=REGION
建立具有相同名稱的替換轉送規則。
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 位址。
建立參照新轉送規則的替換靜態路徑。請確認這個替換路徑的優先順序高於現有路徑。
刪除優先順序較低的現有路徑 (參照先前的轉送規則),然後刪除先前的轉送規則。
清除所用資源
在負載平衡器設定中,從後端服務中移除後端。
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
刪除路徑。
gcloud compute routes delete ilb-nhop-dest-10-50-1
gcloud compute routes delete ilb-nhop-dest-10-30-1
在負載平衡器設定中刪除轉送規則。
gcloud compute forwarding-rules delete fr-ilb1 \ --region=us-west1
gcloud compute forwarding-rules delete fr-ilb2 \ --region=us-west1
在負載平衡器設定中刪除後端服務。
gcloud compute backend-services delete ilb1 \ --region=us-west1
gcloud compute backend-services delete ilb2 \ --region=us-west1
在負載平衡器設定中刪除健康狀態檢查。
gcloud compute health-checks delete hc-http-80 \ --region=us-west1
如果您使用的是 Google Cloud 控制台,則健康狀態檢查是全域的。因此,指令如下:
gcloud compute health-checks delete hc-http-80 \ --global
刪除代管執行個體群組。
gcloud compute instance-groups managed delete third-party-instance-group \ --region=us-west1
刪除執行個體範本。
gcloud compute instance-templates delete third-party-template
gcloud compute instance-templates delete third-party-template-multinic
刪除測試和實際工作環境執行個體。
gcloud compute instances delete testing-vm \ --zone=us-west1-a
gcloud compute instances delete production-vm \ --zone=us-west1-a
後續步驟
- 內部直通式網路負載平衡器總覽
- 內部直通式網路負載平衡器的容錯移轉
- 使用 VM 執行個體群組後端設定內部直通式網路負載平衡器
- 內部直通式網路負載平衡器的記錄與監控功能
- 內部直通式網路負載平衡器和已連結的網路
- 排解內部直通式網路負載平衡器問題
- 清除負載平衡器設定