ルーティングモード付きプライベートネットワークロードバランサーの作成
仮想ネットワーク機能 (VNF) デバイスは、仮想マシン上で稼働する仮想化ネットワーク・サービス (ルーターやファイアウォールなど) です。 IBM Cloud VPC を使用すると、スケーラビリティーの面で物理ネットワーク・デバイスを購入するより安価で優れた、VNF デバイスをプロビジョンすることができます。
IBM Cloud VPC 内のサーバー宛のトラフィックは、正常な VNF デバイスに配信する必要があります。そうしないと、トラフィックが中断されます。 ネットワーク・ロード・バランサーを経路モードで使用することで、ヘルス・チェックを実行し、正常な VNF デバイスのみをワークロードが通過するようにすることができます。 このため、経路モードのネットワーク・ロード・バランサーは、バックエンド・ターゲットとして VNF デバイスのみをサポートします。
ルーティング・モードを使用して NLB をデプロイするさまざまな方法の詳細な例については、 HA VNF デプロイメント を参照してください。
開始前に
ルーティングモードを有効にしてネットワークロードバランサーを設定するには、以下の前提条件を満たしていることを確認してください:
-
VPCがない場合は、NLBを作成したいリージョンに VPCを作成する。
-
VPC の任意のゾーンにサブネットを作成します。
-
経路モードをサポートするには、最初に NLB のサービス間認証ポリシーを作成する必要があります。 これを行うためには、以下の手順を実行します。
- ブラウザーで IBM アクセス管理にログインします。
- **「許可」をクリックしてから、「作成」**をクリックします。
- ソース・サービスで**「VPC Infrastructure Services」を選択します。 アクセス権限の範囲では、「選択された属性に基づくリソース」>「リソース・タイプ」>「Load Balancer for VPC」**を選択します。
- ターゲット・サービスでは、「VPC Infrastructure Services」を選択します。 アクセス権限の範囲では、「選択された属性に基づくリソース」>「リソース・タイプ」>**「Virtual Private Cloud」**を選択します。
- エディター チェック・ボックスを選択して自分自身に編集者権限を付与し、許可をクリックします。
以下のリストは、ルーティング・モードが有効になっているネットワーク・ロード・バランサーに関する重要な考慮事項の詳細を示しています。
- NLB 経路モードには 2 つの IP アドレス (アクティブ/スタンバイ) があります。
- NLB 経路モードは透過的に設計されています。 フェイルオーバーが発生すると、ルート・モードは、スタンバイ・アプライアンス IP の
next_hop
を使用して同じ VPC の下で作成されたすべてのルーティング・ルールを更新します。 その結果、NLB の存続期間中に両方の IP が経路モードで使用される可能性があります。 - Transit VPC 構成の場合は、NLB を
vpc-hub
にデプロイし、vpc-spoke
で出口経路を構成することができます。 これにより、vpc-hub
で経路モードを使用して NLB にデータが強制的に戻されます。vpc-hub
にvpc-spoke
の同等の入力ルールを追加し、出力ルールを変更する必要がないようにしてください。 トラフィックがvpc-hub
に到達すると、入力ルーティングルールがnext_hop
を上書きし、プライマリアプライアンスに送信します。
UI を使用した経路モードでのネットワーク・ロード・バランサーの作成
IBM Cloud コンソールで Network Load Balancer for VPC をルーティングモードで作成・設定するには、以下の手順に従う:
-
ブラウザから、 IBM Cloud コンソールを開き、アカウントにログインします。
-
ナビゲーションメニューの
選択し、 インフラストラクチャ
> ネットワーク > ロードバランサーをクリックします。
-
ページの右上にある**「新規ロード・バランサー + (New load balancer +)」**をクリックします。
-
オーダー・フォームで、以下の情報を入力します。
- ロード・バランサーの固有の名前を入力し、VPC を選択します。
- リソース・グループを選択します。 デフォルト・グループを使用するか、またはリストから選択します (アカウントに定義されている場合)。 ロードバランサーを作成した後にリソースグループを変更することはできません。
- **「ネットワーク・ロード・バランサー (NLB) (Network Load Balancer (NLB))」**タイル、およびロード・バランサーをデプロイするサブネットを選択します。
- **「プライベート」**タイプを選択します。
- オプションで、タグを追加します。
-
経路モードのウィンドウでチェックリストの説明を確認してから、ボタンをクリックして経路モードを有効にします。
プロビジョニングが終了した後は、経路モードの NLB の構成を変更することはできません。
-
**「新規プール」**をクリックして、バックエンド・プールを作成するために以下の情報を指定します。
-
プールの名前 (
my-pool
など) を入力します。 -
このプール内のインスタンスのプロトコルを入力します。 プールのプロトコルは、その関連リスナーのプロトコルと一致している必要があります。 例えば、リスナーが TCP である場合、プールのプロトコルは TCP にする必要があります。
-
方式 (ロード・バランシング・アルゴリズム) を選択します。 以下のオプションが表示されます:
- ラウンドロビン - 各インスタンスに要求を順番に転送します。 すべてのインスタンスが、ほぼ同数のクライアント接続を受信します。
- 重みづけしたラウンドロビン - 割り当てられた重みに比例して各インスタンスに要求を転送します。 例えば、インスタンスA、B、Cがあり、それぞれの重みが60、60、30に設定されている場合、インスタンスAとBは同数の接続を受け、インスタンスCは半分の接続を受ける。
- 最小接続数 - 現時点で接続数が最小のインスタンスに要求を転送します。
-
セッション維持を選択し、 「なし」 を選択します。
-
「ヘルス・チェック」に以下のオプションが表示されます。
- ヘルス・チェック・パス- ヘルス・チェック・パスは、ヘルス・チェック・プロトコルとして HTTP を選択した場合にのみ適用されます。 ヘルス・チェック・パスは、プール内のインスタンスに HTTP ヘルス・チェック要求を送信するためにロード・バランサーが使用する URL を指定します。 デフォルトでは、ヘルス・チェックはルート・パス (/) に送信されます。
- ヘルス・プロトコル - ロード・バランサーがプール内のインスタンスにヘルス・チェック・メッセージを送信するために使用するプロトコル。
- ヘルスポート- ロードバランサーがヘルスチェックリクエストを送るポート。 デフォルトでは、ヘルス・チェックは、インスタンスにトラフィックを送信するときと同じポートで送信されます。
- 間隔 - 連続する 2 回のヘルス・チェック試行の間隔 (秒単位)。 デフォルトでは、ヘルス・チェックは 5 秒間隔で送信されます。
- Timeout (sec)- システムがヘルスチェック要求からの応答を待つ最大時間。 デフォルトでは、ロード・バランサーは応答を 2 秒待ちます。
- Max retries- インスタンスが不健康と宣言されるまでにロードバランサが行う健康チェックの最大回数。 デフォルトでは、ヘルス・チェックが 2 回失敗すると、インスタンスは正常ではないと見なされます。
ロードバランサは不健全なインスタンスへのコネクションの送信を止めるが、 それでもこれらのインスタンスの健全性を監視し続け、再び健全であることが 判明した場合(つまり、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 r014-c7cadd8e-9e8b-4965-bee3-5d9ff95b3512 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
はtrue
is_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" | jq
この例では、
jq
をパーサーとして使用しています。jq
は、 MIT ライセンスの 下でライセンスされたサードパーティツールです。インスタンスの作成時に利用可能なすべての 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
は1
port_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構成を確定します
-
以下の情報を収集します。
-
お客様のサブネットCIDR(お客様のワークロードVSIが存在するサブネット。これは、送信先IPとして使用するIPになります)。
-
ロードバランサーの応答には、2つのプライベートIPがリストされています。 最初のものをメモしてください。
この応答を生成するには、CLI または API の手順にあるステップ 4 を実行します。
最初に記載されたIPアドレスがプライマリIPアドレスであり、2番目に記載されたIPアドレスがセカンダリIPアドレスで、バックアップ用です。 両方がリストに記載されているため、将来フェイルオーバーが発生した場合、アクティブIPとパッシブIPの両方がわかります。
-
バックエンド・ワークロードのサブネット CIDR。
-
-
カスタム経路を以下のように構成します。
- バックエンドのカスタマー・ワークロード・サブネット宛のすべてのトラフィックについて、ネクスト・ホップとして NLB プライベート IP を設定します。
- クライアント・サブネット宛のすべてのトラフィックについて、ネクスト・ホップとして NLB プライベート IP を設定します。
-
VNFインスタンス(VNI)はNLBと同じサブネット上に存在する必要があり、プールにメンバーとして追加する必要があります。