Azure Load Balancer のフローティング IP の構成
ロード バランサーは、UDP と TCP の両方のアプリケーションに対していくつかの機能を提供します。
フローティング IP
一部のアプリケーション シナリオでは、バックエンド プール内の 1 つの VM で複数のアプリケーション インスタンスが同じポートを使用することが望ましいか、または必須となります。 ポートを再利用する一般的な例としては、高可用性のためにクラスタリングする、ネットワークの仮想アプライアンス、再暗号化なしに複数の TLS エンドポイントを公開する場合などが挙げられます。 複数の規則でバックエンド ポートを再利用するには、規則の定義でフローティング IP を有効にする必要があります。 フローティング IP を有効にすると、柔軟性が向上します。
フローティング IP の状態 | Outcome |
---|---|
フローティング IP が有効 | Azure は、IP アドレス マッピングを Load Balancer のフロントエンド IP アドレスへ 変更する |
フローティング IP が無効 | Azure で VM インスタンスの IP アドレスが公開される |
次の図は、フローティング IP の有効化の前と後における、IP アドレス マッピングの動作を示しています。
フローティング IP は、Azure portal、REST API、CLI、PowerShell、または他のクライアントを使用してロード バランサー規則で構成します。 フローティング IP を使用するには、規則の構成に加えて、仮想マシンのゲスト OS も構成する必要があります。
このシナリオでは、バックエンド プール内のすべての 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" に置き換える必要があります。
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 をこのループバック インターフェイスの名前に、floatingip と floatingipnetmask を、ロード バランサーのフロントエンド 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
(floatingip と floatingipnetmask を、ロード バランサーのフロントエンド 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 構成を使用する必要があります。
- ご利用のアプリケーションがゲスト OS のループバック インターフェイスに構成されているフロントエンド IP アドレスにバインドされると、Azure のアウトバウンドがアウトバウンド フローを書き換えられないため、フローが失敗します。 アウトバウンドのシナリオを確認してください。
- 負荷分散シナリオのセカンダリ IP 構成ではフローティング IP を使用できません。 この制限は、セカンダリ IP 構成がデュアルスタック構成の一部であり IPv6 であるパブリック ロード バランサーや、アウトバウンド接続に NAT Gateway を利用するアーキテクチャには適用されません。
次のステップ
- Azure Load Balancer で複数のフロントエンドを使用する方法について学習する。
- Azure Load Balancer のアウトバウンド接続について学習する。