建立具有遞送模式的專用網路負載平衡器
「虛擬網路功能 (VNF)」裝置是在虛擬機器上執行的虛擬化網路服務 (例如路由器及防火牆)。 使用 IBM Cloud VPC,您可以佈建 VNF 裝置,以獲得比購買實體網路裝置更好且更經濟實惠的可調整性。
針對 IBM Cloud VPC 中伺服器的資料流量必須遞送至健全的 VNF 裝置; 否則會發生資料流量中斷。 您可以使用具有遞送模式的網路負載平衡器來執行性能檢查,並確保工作負載僅通過性能良好的 VNF 裝置。 因此,具有遞送模式的網路負載平衡器僅支援 VNF 裝置作為後端目標。
如需您可以使用遞送模式來部署 NLB 的各種方式的詳細範例,請參閱 HA VNF 部署。
開始之前
若要配置已啟用遞送模式的網路負載平衡器,請確定您已符合下列必要條件:
-
如果您沒有 VPC,請在您要建立 NLB 的地區中 建立 VPC。
-
在 VPC 的偏好區域中建立子網路。
-
若要支援遞送模式,您必須先為 NLB 建立服務對服務鑑別原則。 操作方法如下:
- 從瀏覽器登入 IBM Access Management。
- 按一下「授權」,然後按一下「建立」。
- 針對來源服務,選取 VPC 基礎架構服務。 對於範圍存取,請選取 根據所選屬性的資源 > 資源類型 > Load Balancer for VPC。
- 針對目標服務,選取 VPC 基礎架構服務。 對於範圍存取,請選取 基於所選屬性的資源 > 資源類型 > Virtual Private Cloud。
- 選取 編輯者 勾選框以提供您自己「編輯者」存取權,然後按一下 授權。
下列清單詳細說明啟用遞送模式之網路負載平衡器的一些重要考量:
- NLB 路徑模式有兩個 IP 位址 (作用中/待命)。
- NLB 路由模式設計為透通。 發生失效接手時,路由模式會使用待命應用裝置 IP 的
next_hop來更新在相同 VPC 下建立的所有路由規則。 因此,在具有路由模式的 NLB 生命期限期間,可能會同時使用這兩個 IP。 - 如果是 Transit VPC 配置,您可能想要在
vpc-hub中部署 NLB,並在vpc-spoke中配置 Egress 路徑。 這會在vpc-hub中以路由模式將資料強制送回 NLB。 確保您也將vpc-spoke出口規則的對等入口規則新增至vpc-hub,這樣出口規則就不需要變更。 流量到達vpc-hub之後,入口路由規則會覆蓋next_hop,並將其傳送至主要裝置。
使用使用者介面建立具有遞送模式的網路負載平衡器
若要使用 IBM Cloud 主控台以遞送模式建立及配置 Network Load Balancer for VPC,請遵循下列步驟:
-
請在瀏覽器中開啟 IBM Cloud 控制台,並登入您的帳戶。
-
選取導覽功能表
,然後按一下 Infrastructure
> Network > Load balancers。
-
按一下頁面右上方的 新建負載平衡器 +。
-
在訂單表格中,完成下列資訊:
- 鍵入負載平衡器的唯一名稱,並選取 VPC。
- 選取資源群組。 使用預設群組,或從清單中選取 (如果定義給您的帳戶)。 在建立負載平衡器之後,您無法變更資源群組。
- 選取 網路負載平衡器 (NLB) 磚,以及您要在其中部署負載平衡器的子網路。
- 請選擇「私人」類型。
- 選擇性地新增標籤。
-
請檢閱遞送模式視窗中的核對清單指示,然後按一下按鈕以啟用它。
在完成佈建之後,您無法修改遞送模式 NLB 的配置。
-
按一下新建儲存區,並指定下列資訊來建立後端儲存區。
-
請輸入資料庫名稱,例如
my-pool。 -
輸入此儲存區中實例的通訊協定。 儲存區的通訊協定必須符合其關聯接聽器的通訊協定。 例如,若監聽器為 TCP,則資源池的協定必須是 TCP。
-
選取方法,這是負載平衡演算法。 顯示下列選項:
- 循環賽- 依序將請求轉發至各執行個體。 所有實例都會收到大約相等數目的用戶端連線。
- 加權輪詢 — 根據各實例的指定權重比例,將請求轉發至各實例。 舉例來說,假設有實例 A、B 和 C,且其權重分別設定為 60、60 和 30,那麼實例 A 和 B 將獲得相同數量的連線,而實例 C 獲得的連線數量則為其一半。
- 最少連線數 — 將請求轉發至當前連線數最少的實例。
- 加權轉發 — 透過 IP 雜湊演算法,根據分配的權重將封包分發至各目標,藉此轉發請求。 每個封包皆根據其標頭進行轉發,同時支援對稱與非對稱流量。
-
選擇階段作業組合,然後選取 無。
-
在性能檢查下,會顯示下列選項。
- 健康檢查路徑- 健康檢查路徑只有在您選擇 HTTP 作為健康檢查通訊協定。 健康檢查路徑指定了負載平衡器用於將 HTTP 健康檢查請求傳送至池中實例所使用的 URL。 預設情況下,狀態檢查會發送至根路徑 (/)。
- 健康檢查協定 — 負載平衡器用於向叢集中的實例發送健康檢查訊息的協定。
- 健康檢查埠 — 負載平衡器用來傳送健康檢查請求的埠號。 預設情況下,狀態檢查會透過與傳送至該實例的流量相同的埠進行傳送。
- 間隔 — 兩次連續健康檢查嘗試之間的間隔(以秒為單位)。 預設情況下,每 5 秒會發送一次狀態檢查。
- 超時 (秒) —— 系統等待健康檢查請求回應的最長時間。 預設情況下,負載平衡器會等待 2 秒以取得回應。
- 重試次數上限-在將實例宣告為性能不佳之前,負載平衡器所進行的性能檢查嘗試次數上限。 依預設,在兩次失敗的性能檢查之後,就不再將實例視為性能良好。
雖然負載平衡器會停止傳送連線至性能不佳的實例,但它仍會繼續監視這些實例的性能,並在再次發現它們性能良好 (亦即,如果它們順利通過兩次連續性能檢查嘗試) 時回復使用它們。
如果池中的執行個體狀態異常,而您認為應用程式運作正常,請重新檢查健康檢查協定與健康檢查路徑的值。 此外,請檢查附著於這些執行個體上的所有安全性群組,以確保其規則允許負載平衡器與執行個體之間的流量。
-
-
按一下 新建接聽器,並指定此接聽器將資料流量轉遞至其中的後端儲存區。
已為您選取接收送入要求的通訊協定,以及接收要求的接聽埠。
-
訂單摘要顯示定價預估。 請詳閱雲端服務條款。 然後,按一下 建立 以完成您的訂單。
使用 CLI 以遞送模式建立網路負載平衡器
若要使用 CLI 建立網路負載平衡器,請遵循下列步驟:
-
設定 CLI 環境。
-
請登入您的帳戶。 輸入密碼之後,系統會提示您要使用的帳戶和區域:
ibmcloud login --sso -
建立負載平衡器:
ibmcloud is load-balancer-create nlb-test public --subnet 0896-b1f24514-89dc-4afd-b0e2-5489a43cf45c --family network --route-mode true輸出範例:
Creating load balancer vnf under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs Provision status create_pending Operating status offline Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false -
請等待 NLB 進入「活躍」狀態後,再執行以下指令:
ibmcloud is load-balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512輸出範例:
Getting load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Name vnf CRN crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 Family Network Routing Mode Enabled true Host name c7cadd8e-us-east.lb.appdomain.cloud Subnets ID Name 0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024 nlb-subnet Public IPs Private IPs 10.241.64.16, 10.241.64.17 Provision status active Operating status online Is public false Listeners Pools ID Name Resource group ID Name 42c4f51adc3147b4b4049ad9826c30a1 Default Created 2021-09-14T17:54:24.584-05:00 Security groups supported false記下「專用 IP」中列出的第一個 IP 位址。 定義自訂路由時需要它。
-
新增儲存區。
ibmcloud is load-balancer-pool-create example-pool r006-df4c0e10-e882-4ade-a668-b2e518325d6a round_robin tcp 20 2 5 tcp輸出範例:
Creating pool example-pool of load balancer r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 under account CNS Development Account - netsvs as user ibm@us.ibm.com ID r014-474dca7d-aece-48a3-a636-fe8c3e654a3b Name example-pool Protocol tcp Algorithm round_robin Instance group ID Name - - Proxy protocol disabled Health monitor Type Port Health monitor URL Delay Retries Timeout tcp - 20 2 5 Session persistence Type Cookie name - - Members Provision status active Created 2021-09-14T18:03:56.274-05:00 -
新增成員。
ibmcloud is load-balancer-pool-member-create r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 r014-474dca7d-aece-48a3-a636-fe8c3e654a3b 200 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf輸出範例:
Creating member of pool r014-474dca7d-aece-48a3-a636-fe8c3e654a3b under account CNS Development Account - netsvs as user ibm@us.ibm.com... ID r014-1fdb900f-81a4-4204-839a-fcdee6c28e8a Port 200 Target 0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf Weight 50 Health unknown Created 2021-09-14T19:27:11.077-05:00 Provision status create_pending
使用 API 以遞送模式建立網路負載平衡器
若要使用 API 建立具有遞送模式的網路負載平衡器,請遵循下列步驟:
-
設定 API 環境。
-
使用下列範本來建立 API 要求有效負載。 使用您自己的值來修改名稱及子網路。
{ "name": "nlb-vnf", "is_public": false, "profile": { "name": "network-fixed" }, "route_mode": true, "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024" } ] }將此有效負載儲存至 JSON 檔案。 在下列範例中,檔案命名為
create.json。 -
使用下列指令提出建立 NLB 的要求。 必須先在有效負載中設定下列內容:
route_mode是trueis_public是false- 個人檔案名稱是
network_fixed
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers?version=2021-07-30&generation=2" | jqjqjq可能不會預先安裝在您建立實體時可用的所有 VPC 映像上 。 您可能需要在使用前安裝jq或使用您選擇的其他解析器。輸出範例:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377862525Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "offline", "pools": [], "private_ips": [], "provisioning_status": "create_pending", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true } -
當 NLB 處於活動狀態後,請執行
GET呼叫以擷取其狀態。curl -s -H "Authorization: Bearer $IAM_TOKEN" -X GET "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d?version=2021-07-30&generation=2" | jq輸出範例:
{ "id": "r014-020f4f34-bb49-4699-98a7-a53384cd649d", "name": "nlb-vnf", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::load-balancer:r014-020f4f34-bb49-4699-98a7-a53384cd649d", "is_public": false, "created_at": "2021-09-14T21:45:06.377863Z", "hostname": "020f4f34-us-east.lb.appdomain.cloud", "listeners": [], "operating_status": "online", "pools": [], "private_ips": [ { "address": "10.241.64.13" }, { "address": "10.241.64.14" } ], "provisioning_status": "active", "public_ips": [], "subnets": [ { "id": "0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "href": "https://us-east.iaas.cloud.ibm.com/v1/subnets/0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::subnet:0767-064498f3-4df5-4fa5-b2ed-de5a3bfea024", "name": "nlb-subnet" } ], "resource_group": { "id": "42c4f51adc3147b4b4049ad9826c30a1", "href": "https://resource-controller.cloud.ibm.com/v1/resource_groups/42c4f51adc3147b4b4049ad9826c30a1", "name": "Default" }, "resource_type": "load_balancer", "logging": { "datapath": { "active": false } }, "profile": { "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancer/profiles/network-fixed", "name": "network-fixed", "family": "Network" }, "security_groups": [], "security_group_supported": false, "route_mode": true }請注意
Private IPs中列出的第一個 IP 位址。 定義自訂路由時需要它。 -
新增儲存區。
首先,請使用下列範本來建立 API 要求有效負載。
{ "algorithm": "round_robin", "protocol": "tcp", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" } }然後,執行下列指令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools?version=2021-07-30&generation=2" | jq輸出範例:
{ "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "algorithm": "round_robin", "health_monitor": { "delay": 10, "max_retries": 2, "timeout": 5, "type": "tcp" }, "protocol": "tcp", "created_at": "2021-09-14T21:56:08.202217034Z", "provisioning_status": "active", "proxy_protocol": "disabled" } -
請等待 NLB 處於作用中狀態,然後新增接聽器。
接聽器的埠範圍必須定義如下:
port_min是1port_max是65535
使用下列範本建立 API 要求有效負載:
{ "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328" }, "port_min": 1, "port_max": 65535, "protocol": "tcp" }執行下列指令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @create_vnf.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners?version=2021-07-30&generation=2" | jq輸出範例:
{ "id": "r014-0ce87b15-9530-4624-a574-92495631f75d", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/listeners/r014-0ce87b15-9530-4624-a574-92495631f75d", "protocol": "tcp", "port": 1, "port_min": 1, "port_max": 65535, "default_pool": { "id": "r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328", "name": "flashbulb-marvelous-gainfully-skydiver" }, "provisioning_status": "create_pending", "created_at": "2021-09-14T22:01:13.523172702Z", "accept_proxy_protocol": false, "https_redirect": null } -
新增儲存區成員。
首先,請使用下列範本來建立 API 要求有效負載:
{ "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" } }然後,執行下列指令:
curl -s -H "Authorization: Bearer $IAM_TOKEN" -X POST -d @add_member.json "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members?version=2021-07-30&generation=2" | jq輸出範例:
{ "id": "r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "href": "https://us-east.iaas.cloud.ibm.com/v1/load_balancers/r014-020f4f34-bb49-4699-98a7-a53384cd649d/pools/r014-0b8f4cde-4684-484b-bd3c-64f55a917328/members/r014-c625efe0-6f69-4ae7-a2ef-9bf33c811a2c", "port": 90, "target": { "id": "0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "href": "https://us-east.iaas.cloud.ibm.com/v1/instances/0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf", "crn": "crn:v1:bluemix:public:is:us-east-2:a/be636a7a6e4d4b6296bedf669ce8f757::instance:0767_5545cfb3-febc-4f09-b9ea-0aeb66074edf" }, "weight": 50, "health": "unknown", "created_at": "2021-09-14T22:07:46.898295306Z", "provisioning_status": "create_pending" }
下一步
具有路由模式的 NLB 處於啟動狀態後,請遵循這些步驟來完成 NLB 設定:
-
收集下列資訊:
-
配置您的自訂路徑,如下所示:
- 對於指定給後端客戶工作量子網路的所有資料流量,請設定 NLB 專用 IP 的下一個躍點。
- 對於所有以用戶端子網路為目的地的資料流量,請將下一個躍點設為 NLB 專用 IP。
-
VNF 實例 (VNI) 必須與 NLB 位於同一個子網路,並且必須新增為您的資料池成員。