Azure Load Balancer のフローティング IP の構成

ロード バランサーは、UDP と TCP の両方のアプリケーションに対していくつかの機能を提供します。

フローティング IP

一部のアプリケーション シナリオでは、バックエンド プール内の 1 つの VM で複数のアプリケーション インスタンスが同じポートを使用することが望ましいか、または必須となります。 ポートを再利用する一般的な例としては、高可用性のためにクラスタリングする、ネットワークの仮想アプライアンス、再暗号化なしに複数の TLS エンドポイントを公開する場合などが挙げられます。

フローティング IP の状態 Outcome
フローティング IP が有効 Azure は、IP アドレス マッピングを Load Balancer のフロントエンド IP アドレスへ 変更する
フローティング IP が無効 Azure で VM インスタンスの IP アドレスが公開される

複数の規則でバックエンド ポートを再利用するには、規則の定義でフローティング IP を有効にする必要があります。 フローティング IP を有効にすると、柔軟性が向上します。

次の図は、フローティング IP の有効化の前と後における、IP アドレス マッピングの動作を示しています。この図は、フローティング IP を有効にする前の、ロード バランサー経由のネットワーク トラフィックを示しています。

この図は、フローティング IP を有効にした後の、ロード バランサー経由のネットワーク トラフィックを示しています。

フローティング IP は、Azure portal、REST API、CLI、PowerShell、または他のクライアントを使用してロード バランサー規則で構成します。 フローティング IP を使用するには、規則の構成に加えて、仮想マシンのゲスト OS も構成する必要があります。

フローティング IP を使用した複数のフロントエンド IP のロード バランサー トラフィックの図。

このシナリオでは、バックエンド プール内のすべての VM に次の 3 つのネットワーク インターフェイスがあります。

  • バックエンド IP: VM に関連付けられている仮想 NIC (Azure の NIC リソースの IP 構成)。
  • フロントエンド 1 (FIP1): FIP1 の IP アドレスで構成されているゲスト OS 内のループバック インターフェイス。
  • フロントエンド 2 (FIP2): FIP2 の IP アドレスで構成されているゲスト OS 内のループバック インターフェイス。

前のシナリオと同じフロントエンド構成であると仮定します。

フロントエンド IP アドレス protocol port
緑のフロントエンド 1 65.52.0.1 TCP 80
紫のフロントエンド 2 65.52.0.2 TCP 80

次の 2 つのフローティング IP 規則を定義します。

ルール フロントエンド バックエンド プールにマップ
1 緑の規則 FIP1:80 緑のバックエンドFIP1:80 (VM1 および VM2 内)
2 紫色の規則 FIP2:80 紫のバックエンドFIP2:80 (VM1 および VM2 内)

次の表は、ロード バランサーの完全なマッピングを示します。

ルール フロントエンド IP アドレス protocol port 宛先 port
緑の規則 1 65.52.0.1 TCP 80 フロントエンドと同じ (65.52.0.1) フロントエンドと同じ (80)
紫の規則 2 65.52.0.2 TCP 80 フロントエンドと同じ (65.52.0.2) フロントエンドと同じ (80)

受信フローの宛先は、VM のループバック インターフェイスのフロントエンド IP アドレスになりました。 各規則は、宛先 IP アドレスと宛先ポートの一意の組み合わせでフローを生成する必要があります。 宛先 IP アドレスを、フローのフロントエンド IP アドレスに変更することで、同じ VM でポートを再利用できます。 お使いのサービスは、ロード バランサーをフロントエンドの IP アドレスと対応するループバック インターフェイスのポートにバインドすることによって、ロード バランサーに公開されます。

この例では、宛先ポートが変更されないことがわかります。 これはフローティング IP のシナリオで、Azure Load Balancer はバックエンドの宛先ポートを変更する負荷分散規則の定義もサポートし、フロントエンドの宛先ポートとは異なる規則にします。

Floating IP 規則タイプは、いくつかのロード バランサーの構成パターンの基盤になります。 現在使用できる 1 つの例として、1 つ以上の Always On 可用性グループ リスナーの構成があります。 これらのシナリオについては、今後徐々に文書化します。 フローティング IP を有効にするために必要な特定のゲスト OS 構成について詳しくは、「Azure Load Balancer のフローティング IP の構成」の次のセクションを参照してください。

フローティング IP のゲスト OS の構成

動作させるために、ロード バランサーのフロントエンド IP およびポート宛てのすべてのトラフィックを受信するように仮想マシンのゲスト OS を構成します。 VM の構成では、以下を行う必要があります。

  • ループバック ネットワーク インターフェイスを追加する
  • ロード バランサーのフロントエンド IP アドレスを使用したループバックを構成します
  • システムがインターフェイスで、そのインターフェイスに割り当てられている IP アドレスを持たないパケットを送受信できるようにする。Windows システムでは、"弱いホスト" モデルを使用するようにインターフェイスを設定する必要があります。 Linux システムの場合、このモデルは通常、既定で使用されます。
  • フロントエンド IP ポートでのトラフィックを許可するようにホスト ファイアウォールを構成する。

注意

以下の例では、すべて IPv4 を使用します。IPv6 を使用するには、"ipv4" を "ipv6" に置き換える必要があります。 また、IPv6 のフローティング IP は、内部ロード バランサーでは機能しないことに注意してください。

Windows Server

展開

バックエンドプール内の各 VM に対して、サーバーの Windows コマンドプロンプトで次のコマンドを実行します。

VM 上のインターフェイス名の一覧を取得するには、次のコマンドを入力します。

netsh interface ipv4 show interface 

VM NIC (Azure マネージド) では、次のコマンドを入力します。

netsh interface ipv4 set interface "interfacename" weakhostreceive=enabled

("interfacename" を、このインターフェイスの名前に置き換えてください)

追加した各ループバック インターフェイスに対して、次のコマンドを繰り返します。

netsh interface ipv4 add addr floatingipaddress floatingip floatingipnetmask
netsh interface ipv4 set interface floatingipaddress weakhostreceive=enabled  weakhostsend=enabled 

(loopbackinterface をこのループバック インターフェイスの名前に、floatingipfloatingipnetmask を、ロード バランサーのフロントエンド IP に対応する適切な値に置き換えてください)

最後に、ゲスト ホストでファイアウォールを使用する場合は、トラフィックが適切なポートで VM に到達できるようにルールを設定してください。

次の構成例では、1.2.3.4 のロード バランサー フロントエンド IP 構成と、ポート 80 の負荷分散規則を想定しています。

netsh int ipv4 set int "Ethernet" weakhostreceive=enabled
netsh int ipv4 add addr "Loopback Pseudo-Interface 1" 1.2.3.4 255.255.255.0
netsh int ipv4 set int "Loopback Pseudo-Interface 1" weakhostreceive=enabled weakhostsend=enabled
netsh advfirewall firewall add rule name="http" protocol=TCP localport=80 dir=in action=allow enable=yes

Ubuntu

展開

バックエンド プール内の各 VM について、SSH セッションを使用して次のコマンドを実行します。

VM 上のインターフェイス名の一覧を取得するには、次のコマンドを入力します。

ip addr

ループバック インターフェイスごとに、次のコマンドを繰り返します。これにより、フローティング IP がループバック エイリアスに割り当てられます。

sudo ip addr add floatingip/floatingipnetmask dev lo:0

(floatingipfloatingipnetmask を、ロード バランサーのフロントエンド IP に対応する適切な値に置き換えます)

最後に、ゲスト ホストでファイアウォールを使用する場合は、トラフィックが適切なポートで VM に到達できるようにルールを設定してください。

次の構成例では、1.2.3.4 のロード バランサー フロントエンド IP 構成と、ポート 80 の負荷分散規則を想定しています。 この例では、Ubuntu での UFW (Uncomplicated Firewall) の使用も想定しています。

sudo ip addr add 1.2.3.4/24 dev lo:0
sudo ufw allow 80/tcp

制限事項

  • 負荷分散規則でフローティング IP が有効になっている場合、アプリケーションは送信にネットワーク インターフェイスのプライマリ IP 構成を使用する必要があります。
  • 負荷分散シナリオのセカンダリ IPv4 構成ではフローティング IP を使用できません。 この制限は、デュアルスタック (IPv4 および IPv6) 構成のパブリック ロード バランサーや、アウトバウンド接続に NAT ゲートウェイを利用するアーキテクチャには適用されません。
  • ご利用のアプリケーションがゲスト OS のループバック インターフェイスに構成されているフロントエンド IP アドレスにバインドされると、Azure のアウトバウンドがアウトバウンド フローを書き換えられないため、フローが失敗します。 アウトバウンドのシナリオを確認してください。

次のステップ