任意のポートでバランシング設定をする

Z.com Cloud のコントロールパネルに表示されていないポートのバランシング設定は、APIにて設定いただけます。
以下手順では、DSRロードバランサーの10080番ポートにアクセスがあった場合、バランシング先サーバーの10080番ポートに転送する設定をご案内します。
なお、DSRロードバランサーでは、ロードバランサー側のポートとバランシング先ポートは同一である必要がございます。

APIによるcurlコマンドを用いた設定手順となりますので、任意のサーバーにて実行ください。

 DSRロードバランサーのVIPを追加

コントロールパネルからDSRロードバランサーに VIP(グローバルIPアドレス)の追加を行います。
VIPを追加済みの場合は、本項目の[ 4 ]からご確認ください。

[ 1 ] 左メニューより [ネットワーク] をクリックします。

image

[ 2 ] ロードバランサーから [+ ロードバランサー] をクリックします。

image

[ 3 ] [DSRロードバランサー] をご選択後、[追加] をクリックします。

image

[ 4 ] 以下のようにロードバランサー設定にVIPが追加されます。後述するAPIの操作手順にて使用しますので、VIPの「UUID」情報をメモしておきます。

image

 ヘルスモニタールールの作成

コントロールパネルからヘルスモニタールールを作成します。
ルールを作成済みの場合は、本項目の[ 5 ]からご確認ください。

[ 1 ] 左メニューより [ネットワーク] をクリックします。

image

[ 2 ] ロードバランサーから [ヘルスモニタールール] を選択の上、[設定] アイコンをクリックします。

image

[ 3 ] [+] をクリックします。

image

[ 4 ] 「プロトコル」は [TCP]、「判定時間(秒)」は [10] をご選択 もしくは ご入力の上、[保存] ボタンをクリックします。

image

[ 5 ] 以下のようにヘルスモニターリストに追加されます。後述するAPIの操作手順にて使用しますので、「UUID」情報をメモしておきます。

image

 API操作

コマンドラインにてバランシング設定に必要なAPIを実行します。

・トークンの発行

[ 1 ] API認証を行い、トークンの取得ならびに発行されたトークンIDを確認します。実行コマンドの赤字の部分は、API情報に差し替えて実行ください。

※ 対象のAPIリファレンスは こちら
認証の
エンドポイント
コントロールパネル内のAPIメニューから「Identity Service」をご確認ください。
APIユーザー名 コントロールパネル内のAPIメニューからAPIユーザーを作成ください。
パスワード コントロールパネルのAPIメニューからAPIユーザーを作成する際に設定するパスワード。
テナント名 コントロールパネル内のAPIメニューから「テナント名」をご確認ください。
curl -i -X POST \ -H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"auth":{"passwordCredentials":{"username": "APIユーザー名", "password": "パスワード"},"tenantName":"テナント名"}}' \
認証のエンドポイント/tokens
コンソール画面上には以下のようにリクエストの結果が返ってきます。「access」の「id」の値がAPI操作を行う際に必要となるトークンIDです。以降の手順では、トークンIDと表示されているものは全てこのIDを指すものとします。トークンIDは発行後24時間で失効となりますので、作業に24時間以上かかる場合は都度発行する必要があります。
{“access”:{"token":{"issued_at":"2016-11-27T08:01:26.504595","expires":"2016-11-28T08:01:26Z",
"id":"9e54605ee98043b2a89d28f80bc1ce3f"
・POOLの作成
[ 2 ] 以下コマンドを実行し、POOLを作成します。実行コマンドの赤字の部分は、API情報やこれまでに実行したAPIでご確認いただいている内容に差し替えて実行ください。

※ 対象のAPIリファレンスは こちら
ネットワークの
エンドポイント
コントロールパネル内のAPIメニューから「Network Service」をご確認ください。
curl -i -X POST  \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"pool":{"lb_method":"ROUND_ROBIN","protocol":"TCP","name":"10080_lb","subnet_id":"VIPのUUID情報"}}' \
ネットワークのエンドポイント/v2.0/lb/pools
正しく実行されると以下のような戻り値が返ります。「POOL_ID」の値が後述する設定手順で必要となる値になりますのでメモしておきます。
{"pool": 
 {
  "status": "PENDING_CREATE",
  "lb_method": "ROUND_ROBIN",
  "protocol": "TCP", 
  "description": "", 
  "health_monitors": [], 
  "members": [], 
  "status_description": null, 
  "id": "POOL_ID", 
  "vip_id": null, 
  "name": "10080_lb", 
  "admin_state_up": true, 
  "subnet_id": "VIPのUUID情報", 
  "tenant_id": "テナントID", 
  "health_monitors_status": [], 
  "provider": "lbdsr1"
 }
}
・ヘルスモニタールールの関連付け
[ 3 ] 以下コマンドを実行し、作成したヘルスモニターのルールをPOOLに関連付けます。実行コマンドの赤字の部分は、API情報やこれまでに実行したAPIでご確認いただいている内容に差し替えて実行ください。

※ 対象のAPIリファレンスは こちら
curl -i -X POST \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"health_monitor":{"id":"ヘルスモニタールールのUUID情報"}}' \
ネットワークのエンドポイント/v2.0/lb/pools/POOL_ID/health_monitors
正しく実行されると以下のような戻り値が返ります。
{
"health_monitor": {}
}
・VIPの設定
[ 4 ] 以下コマンドを実行し、VIPにポート番号情報を紐付けます。実行コマンドの赤字の部分は、API情報やこれまでに実行したAPIでご確認いただいている内容に差し替えて実行ください。

※ 対象のAPIリファレンスは こちら
curl -i -X POST \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"vip":{"address":"DSRロードバランサーのVIP","protocol":"TCP","protocol_port":"10080","subnet_id":"VIPのUUID情報","admin_state_up":true,"pool_id":"POOL_ID","name":"vip_http_10080"}}' \
ネットワークのエンドポイント/v2.0/lb/vips
正しく実行されると以下のようなステータスコードの戻り値がきます。
HTTP/1.1 201 Created
・MEMBERの作成
[ 5 ] 以下コマンドを実行し、バランシング先となる仮想サーバーの10080番に転送させる設定をします。実行コマンドの赤字の部分は、API情報やこれまでに実行したAPIでご確認いただいている内容に差し替えて実行ください。

※ 対象のAPIリファレンスは こちら
curl -i -X POST \
-H "Accept: application/json" -H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"member": {"pool_id": "POOL_ID","address": "対象サーバーのグローバルIPアドレス","protocol_port": "10080"}}' \
ネットワークのエンドポイント/v2.0/lb/members

  ※バランシング先として指定可能なIPアドレスは標準グローバルネットワークのIPアドレスのみとなります。

正しく実行されると以下のような戻り値が返ります。
{
 "member": {
            "admin_state_up": true, 
            "status": "PENDING_CREATE", 
            "status_description": null, 
            "weight": 1, 
            "address": "対象サーバーのグローバルIPアドレス", 
            "tenant_id": "テナントID", 
            "protocol_port": 10080, 
            "id": "MEMBER_ID", 
            "pool_id": "POOL_ID"
           }
}
・ポートの更新
[ 6 ] バランシング先グローバルIPアドレスの「ポート情報」を確認します。

※ 対象のAPIリファレンスは こちら
curl -i -X GET \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: トークンID" \
ネットワークのエンドポイント/v2.0/ports
上記リクエストが正常に処理されると以下のような結果が返ってきます。「id」の値がAPI操作を行う際に必要となるポートIDです。以降の手順でAPIの操作に必要となりますので、該当サーバーにアタッチされているグローバルIPアドレス等の情報から対象サーバーの「ポートID」をご確認の上、メモをとってください。
{
    "ports": [
        {
            "admin_state_up": true, 
            "allowed_address_pairs": [], 
            "binding:vnic_type": "normal", 
            "device_id": "デバイスID", 
            "device_owner": "compute:None", 
            "extra_dhcp_opts": [], 
            "fixed_ips": [
                {
                    "ip_address": "IPアドレス", 
                    "subnet_id": "サブネットID"
                }
            ], 
            "id": "ポートID", 
            "mac_address": "MACアドレス", 
            "name": "ポートの名前", 
            "network_id": "ネットワークID", 
            "security_groups": [
                "セキュリティグループID"
            ], 
            "status": "ACTIVE", 
            "tenant_id": "テナントID"
        },
[ 7 ] バランシング先サーバーのポートにDSRロードバランサーからのバランシング用の設定を適用します。

※ 対象のAPIリファレンスは こちら
curl -X PUT \
-H "Accept: application/json" \
-H "X-Auth-Token: トークンID" \
-d '{"port": {"allowed_address_pairs": [{"ip_address": "DSRロードバランサーのVIP"}]}}' \
ネットワークのエンドポイント/v2.0/ports/ポートID

 サーバー側の設定手順

DSRロードバランサーのパケット転送方法はDSR方式のため、サーバーからクライアントへ直接パケットを転送する必要があり、DSRロードバランサーのVIP(グローバルIPアドレス)へのリクエストが処理できるようサーバー側でネットワークの設定を変更する必要があります。
以下ではCentOS7系にてループバックインターフェイスを追加する方法をご案内します。

・ループバックインターフェイスを設定する方法

[ 1 ] ループバックインターフェイスの設定ファイルを追加します。
# vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
IPADDR=DSRロードバランサーのVIP
NETMASK=255.255.255.255
ONBOOT=yes
[ 2 ] ネットワークのリスタートをします。
# systemctl restart network

以上で設定は完了です。バランシング先の仮想サーバーで10080番が待ち受けになっている状態であれば、外部からVIPの10080番ポートに対して接続した際に対象サーバーに接続できるようになります。
お手元のWebブラウザにてお試しください。


本リファレンスはZ.com Cloudにてサーバーをご利用いただく場合の一例であり、お客様の運用やポリシーによってその限りではございません。
お客様のご利用用途に応じて必要な設定や操作を行なってください。

Internet for everyone

Copyright (c) 2024 GMO Internet Group, Inc. All Rights Reserved.