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

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

浮動IPアドレス

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

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

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

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

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

Floating IP 規則タイプは、いくつかのロード バランサーの構成パターンの基盤になります。 現在使用できる 1 つの例として、1 つ以上の Always On 可用性グループ リスナーの構成があります。 これらのシナリオについては、今後徐々に文書化します。

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

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

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

以下の例では、すべて IPv4 を使用します。IPv6 を使用するには、"ipv4" を "ipv6" に置き換える必要があります。

Windows Server

展開

バックエンドプール内の各VMに対して、まずWindows Serverネットワークアダプター管理を使ってループバックネットワークアダプターを追加します。 その後、サーバー上の昇格されたWindowsコマンドプロンプトで以下のコマンドを実行します。

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

    netsh interface ipv4 show interface 
    
  2. VM NIC (Azure マネージド) の場合は、 インターフェイス名 を使用するインターフェイスの名前に置き換えた後、次のコマンドを入力します。

    netsh interface ipv4 set interface <interface-name> weakhostreceive=enabled
    
  3. 追加したループバック インターフェイスごとに、ループバック インターフェイス名をループバック インターフェイスの名前に置き換え、floating-IP と floating-IPnetmask をロード バランサーのフロントエンド IP に対応する適切な値に置き換えた後、次のコマンドを入力します。

    netsh interface ipv4 add addr <loopback-interface-name> <floating-IP> <floating-IPnetmask>
    netsh interface ipv4 set interface <loopback-interface-name> weakhostreceive=enabled  weakhostsend=enabled 
    
  4. ゲストホストがファイアウォールを使用している場合は、適切なポートでトラフィックがVMに到達できるようにルールを設定してください。 この例の構成は、ロードバランサーのフロントエンドIP構成1.2.3.4とポート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
    
  5. ループバックインターフェースにフロントエンドのIPアドレスが割り当てられているか確認してください:

    netsh interface ipv4 show addresses name="<loopback-interface-name>"
    

    出力にフロントエンドのIPアドレスが含まれているか確認してください。 ロードバランサーに到達できるクライアントから、フロントエンドのIPアドレスとルールポートに接続して、トラフィックがVMに到達しているかを確認します。

ウブントゥ

展開

バックエンドプール内の各VMに対して、以下のコマンドをSSHセッションで実行します。 Linuxはすでに lo ループバックデバイスを提供しています。コマンドはアドレスラベルとして lo:0 を使うため、別のループバックインターフェースを作成する必要はありません。

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

    ip addr
    
  2. フロントエンドのIPアドレスをループバックデバイスに追加してください。 floating-IPをロードバランサーのフロントエンドIPアドレスに、floating-IPnetmaskをLinuxのCIDRプレフィックス長に置き換えます。例えば24:

    sudo ip addr add <floating-IP>/<floating-IPnetmask> dev lo:0
    
  3. ゲストホストがファイアウォールを使用している場合は、適切なポートでトラフィックが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
    
  4. ループバックデバイスにフロントエンドのIPアドレスが割り当てられているか確認してください:

    ip address show dev lo
    

    出力にフロントエンドのIPアドレスが含まれているか確認してください。 ロードバランサーに到達できるクライアントから、フロントエンドのIPアドレスとルールポートに接続して、トラフィックがVMに到達しているかを確認します。

制限事項

フローティングIPを有効にすると、アウトバウンド接続はアプリケーションが使用するネットワークインターフェースのIP設定やループバックのフロントエンドIPアドレスへのバインド方法に依存します。

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

次のステップ