建立具有遞送模式的專用網路負載平衡器

「虛擬網路功能 (VNF)」裝置是在虛擬機器上執行的虛擬化網路服務 (例如路由器及防火牆)。 使用 IBM Cloud VPC,您可以佈建 VNF 裝置,以獲得比購買實體網路裝置更好且更經濟實惠的可調整性。

針對 IBM Cloud VPC 中伺服器的資料流量必須遞送至健全的 VNF 裝置; 否則會發生資料流量中斷。 您可以使用具有遞送模式的網路負載平衡器來執行性能檢查,並確保工作負載僅通過性能良好的 VNF 裝置。 因此,具有遞送模式的網路負載平衡器僅支援 VNF 裝置作為後端目標。

如需您可以使用遞送模式來部署 NLB 的各種方式的詳細範例,請參閱 HA VNF 部署

開始之前

若要配置已啟用遞送模式的網路負載平衡器,請確定您已符合下列必要條件:

  • 如果您沒有 VPC,請在您要建立 NLB 的地區中 建立 VPC

  • 在 VPC 的偏好區域中建立子網路。

  • 若要支援遞送模式,您必須先為 NLB 建立服務對服務鑑別原則。 操作方法如下:

    1. 從瀏覽器登入 IBM Access Management
    2. 按一下「授權」,然後按一下「建立」。
    3. 針對來源服務,選取 VPC 基礎架構服務。 對於範圍存取,請選取 根據所選屬性的資源 > 資源類型 > Load Balancer for VPC
    4. 針對目標服務,選取 VPC 基礎架構服務。 對於範圍存取,請選取 基於所選屬性的資源 > 資源類型 > Virtual Private Cloud
    5. 選取 編輯者 勾選框以提供您自己「編輯者」存取權,然後按一下 授權

下列清單詳細說明啟用遞送模式之網路負載平衡器的一些重要考量:

  • 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,請遵循下列步驟:

  1. 請在瀏覽器中開啟 IBM Cloud 控制台,並登入您的帳戶。

  2. 選取導覽功能表 功能表圖示,然後按一下 Infrastructure VPC 圖示 > Network > Load balancers

  3. 按一下頁面右上方的 新建負載平衡器 +

  4. 在訂單表格中,完成下列資訊:

    • 鍵入負載平衡器的唯一名稱,並選取 VPC。
    • 選取資源群組。 使用預設群組,或從清單中選取 (如果定義給您的帳戶)。 在建立負載平衡器之後,您無法變更資源群組。
    • 選取 網路負載平衡器 (NLB) 磚,以及您要在其中部署負載平衡器的子網路。
    • 請選擇「私人」類型。
    • 選擇性地新增標籤。
  5. 請檢閱遞送模式視窗中的核對清單指示,然後按一下按鈕以啟用它。

    在完成佈建之後,您無法修改遞送模式 NLB 的配置。

  6. 按一下新建儲存區,並指定下列資訊來建立後端儲存區。

    • 請輸入資料庫名稱,例如 my-pool

    • 輸入此儲存區中實例的通訊協定。 儲存區的通訊協定必須符合其關聯接聽器的通訊協定。 例如,若監聽器為 TCP,則資源池的協定必須是 TCP。

    • 選取方法,這是負載平衡演算法。 顯示下列選項:

      • 循環賽- 依序將請求轉發至各執行個體。 所有實例都會收到大約相等數目的用戶端連線。
      • 加權輪詢 — 根據各實例的指定權重比例,將請求轉發至各實例。 舉例來說,假設有實例 A、B 和 C,且其權重分別設定為 60、60 和 30,那麼實例 A 和 B 將獲得相同數量的連線,而實例 C 獲得的連線數量則為其一半。
      • 最少連線數 — 將請求轉發至當前連線數最少的實例。
      • 加權轉發 — 透過 IP 雜湊演算法,根據分配的權重將封包分發至各目標,藉此轉發請求。 每個封包皆根據其標頭進行轉發,同時支援對稱與非對稱流量。
    • 選擇階段作業組合,然後選取

    • 在性能檢查下,會顯示下列選項。

      • 健康檢查路徑- 健康檢查路徑只有在您選擇 HTTP 作為健康檢查通訊協定。 健康檢查路徑指定了負載平衡器用於將 HTTP 健康檢查請求傳送至池中實例所使用的 URL。 預設情況下,狀態檢查會發送至根路徑 (/)。
      • 健康檢查協定 — 負載平衡器用於向叢集中的實例發送健康檢查訊息的協定。
      • 健康檢查埠 — 負載平衡器用來傳送健康檢查請求的埠號。 預設情況下,狀態檢查會透過與傳送至該實例的流量相同的埠進行傳送。
      • 間隔 — 兩次連續健康檢查嘗試之間的間隔(以秒為單位)。 預設情況下,每 5 秒會發送一次狀態檢查。
      • 超時 (秒) —— 系統等待健康檢查請求回應的最長時間。 預設情況下,負載平衡器會等待 2 秒以取得回應。
      • 重試次數上限-在將實例宣告為性能不佳之前,負載平衡器所進行的性能檢查嘗試次數上限。 依預設,在兩次失敗的性能檢查之後,就不再將實例視為性能良好。

      雖然負載平衡器會停止傳送連線至性能不佳的實例,但它仍會繼續監視這些實例的性能,並在再次發現它們性能良好 (亦即,如果它們順利通過兩次連續性能檢查嘗試) 時回復使用它們。

      如果池中的執行個體狀態異常,而您認為應用程式運作正常,請重新檢查健康檢查協定與健康檢查路徑的值。 此外,請檢查附著於這些執行個體上的所有安全性群組,以確保其規則允許負載平衡器與執行個體之間的流量。

  7. 按一下 新建接聽器,並指定此接聽器將資料流量轉遞至其中的後端儲存區。

    已為您選取接收送入要求的通訊協定,以及接收要求的接聽埠。

  8. 訂單摘要顯示定價預估。 請詳閱雲端服務條款。 然後,按一下 建立 以完成您的訂單。

使用 CLI 以遞送模式建立網路負載平衡器

若要使用 CLI 建立網路負載平衡器,請遵循下列步驟:

  1. 設定 CLI 環境

  2. 請登入您的帳戶。 輸入密碼之後,系統會提示您要使用的帳戶和區域:

    ibmcloud login --sso
    
  3. 建立負載平衡器:

    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
    
  4. 請等待 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 位址。 定義自訂路由時需要它。

  5. 新增儲存區。

    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
    
  6. 新增成員。

    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 建立具有遞送模式的網路負載平衡器,請遵循下列步驟:

  1. 設定 API 環境

  2. 使用下列範本來建立 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

  3. 使用下列指令提出建立 NLB 的要求。   必須先在有效負載中設定下列內容:

    • route_modetrue
    • is_publicfalse
    • 個人檔案名稱是 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" | jq
    

    jq jq 可能不會預先安裝在您建立實體時可用的所有 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
    }
    
  4. 當 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 位址。 定義自訂路由時需要它。

  5. 新增儲存區。

    首先,請使用下列範本來建立 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"
    }
    
  6. 請等待 NLB 處於作用中狀態,然後新增接聽器。

    接聽器的埠範圍必須定義如下:

    • port_min1
    • port_max65535

    使用下列範本建立 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
    }
    
  7. 新增儲存區成員。

    首先,請使用下列範本來建立 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 設定:

  1. 收集下列資訊:

    • 您的子網路 CIDR(您的工作負載 VSI 所在的子網路,這將是用作目的地 IP 的 IP)。

    • 在負載平衡器的回應中,您會發現列出了兩個私有 IP。 記下第一個。

      您可以執行 CLIAPI 程序的步驟 4 來產生此回應。

      列出的第一個 IP 是主要 IP,第二個是次要 IP,用於備份目的。 列出這兩個 IP,以便將來發生故障移轉時,可以同時知道主動和被動 IP。

    • 您的後端工作量子網路 CIDR。

  2. 配置您的自訂路徑,如下所示:

    • 對於指定給後端客戶工作量子網路的所有資料流量,請設定 NLB 專用 IP 的下一個躍點。
    • 對於所有以用戶端子網路為目的地的資料流量,請將下一個躍點設為 NLB 專用 IP。
  3. VNF 實例 (VNI) 必須與 NLB 位於同一個子網路,並且必須新增為您的資料池成員。