第12章 ブリッジマッピングの設定
本章では、Red Hat OpenStack Platform の ブリッジマッピング の設定方法を説明します。
12.1. ブリッジマッピングを使用する目的
ブリッジマッピングにより、プロバイダーネットワークのトラフィックは、物理ネットワークに到達することが可能となります。トラフィックは、ルーターの qg-xxx インターフェースからプロバイダーネットワークの外部に送出されて、br-int に達します。次に br-int と br-ex の間のパッチポートにより、トラフィックはプロバイダーネットワークのブリッジを通過して物理ネットワークまで到達することができます。
12.1.1. ブリッジマッピングの設定
以下は、br-int と br-ex のパッチピアの例です。
int-br-ex <-> phy-br-ex
この接続は、bridge_mappings で設定します。以下に例を示します。
bridge_mappings = physnet1:br-ex,physnet2:br-ex2
bridge_mapping エントリーが見つからない場合には、ネットワーク接続が存在しないか、物理ネットワークへの通信が機能していません。
この設定の最初のエントリーは、パッチピアケーブルを使用して br-int と br-ex の間の接続を作成します。2 番目のエントリーは、br-ex2 のパッチピアを作成します。
12.1.2. コントローラーノードの設定
bridge_mappings の設定は、コントローラーノードの network_vlan_ranges オプションと相関する必要があります。たとえば、上記の例では、コントローラーノードを以下のように設定します。
network_vlan_ranges = physnet1:10:20,physnet2:21:25
これらの値により、対応する外部ネットワークを表すプロバイダーが作成されてから、外部ネットワークはルーターのインターフェースを介してテナントのネットワークに接続されます。このため、ルーターがスケジュールされているネットワークノード上で bridge_mappings を設定する必要があります。これは、プロバイダーネットワークによって表されているルーターのトラフィックが正しい物理ネットワーク (例: physnet1) を使用して送信できることを意味します。
12.1.3. トラフィックの流れ
この設定は、接続の作成以外に、br-int と br-ex で OVS フローを設定し、外部ネットワークとの間でネットワークトラフィックの送受信が可能になります。外部ネットワークはそれぞれ、内部 VLAN id で表され、ルーターの qg-xxx ポートにタグ付けされます。パケットが phy-br-ex に到達すると、br-ex ポートは VLAN タグをストリップ化して、このパケットを物理インターフェース、その後に外部ネットワークに移動します。外部ネットワークからのリターンパケットは br-ex に到達して、phy-br-ex <→ int-br-ex を使用することで br-int に移動されます。パケットが int-br-ex に到達すると、br-int の別のフローがパケットに内部 VLAN タグを追加します。これにより、パケットは qg-xxx により受理可能になります。
12.2. ブリッジマッピングのメンテナンス
マッピングを削除した後には、patch port のクリーンアップを実行する必要があります。この操作により、ブリッジ設定から誤ったエントリーが確実に消去されます。このタスクを実行するには 2 つのオプションを利用できます。
- 手動ポートクリーンアップ: 不要なポートを慎重に削除する必要があります。ネットワーク接続を停止する必要はありません。
- neutron-ovs-cleanup を使用した自動ポートクリーンアップ: クリーンアップが自動で実行されますが、ネットワーク接続を停止する必要があります。また、必要なマッピングを再度追加する必要があります。このオプションは、ネットワーク接続を停止しても支障がない場合に選択してください。
各オプションの例を以下に示します。
12.2.1. 手動ポートクリーンアップ
手動ポートクリーンアッププロセスは、不要なポートを削除します。ネットワーク接続を停止する必要がありません。これらのポートは命名規則を使用して特定することができます。br-$external_bridge では、"phy-"$external_bridge、br-int では "int-"
$external_bridge という名前が指定されます。
以下の例に記載する手順では、bridge_mappings からブリッジを削除し、対応するポートをクリーンアップします。1. openvswitch_agent.ini を編集して、bridge_mappings から physnet2:br-ex2 のエントリーを削除します。
bridge_mappings = physnet1:br-ex,physnet2:br-ex2
physnet2:br-ex2 のエントリーを削除します。削除した後の bridge_mappings は以下のようになります。
bridge_mappings = physnet1:br-ex
2. ovs-vsctl を使用して、削除した physnet2:br-ex2 エントリーに関連付けられた patch port を削除します。
# ovs-vsctl del-port br-ex2 phy-br-ex2 # ovs-vsctl del-port br-int int-br-ex2
bridge_mappings エントリー全体が削除またはコメントアウトされた場合には、各エントリーに対してクリーンアップコマンドを実行する必要があります。
3. neutron-openvswitch-agent を再起動します。
# service neutron-openvswitch-agent restart
12.2.2. 「neutron-ovs-cleanup」を使用した自動ポートクリーンアップ
この操作は neutron-ovs-cleanup コマンドに --ovs_all_ports フラグを指定して実行します。neutron サービスまたはノード全体を再起動して、ブリッジを通常の稼動状態に戻します。このプロセスでは、ネットワーク接続を完全に停止する必要があります。
neutron-ovs-cleanup コマンドは、すべての OVS ブリッジから全ポート (インスタンス、qdhcp/qrouter など) を抜線します。--ovs_all_ports フラグを使用すると br-int から全ポートが削除されて、br-tun からトンネルエンドが、またブリッジ間からは patch port がクリーンアップされます。また、物理インターフェース (例: eth0、eth1) はブリッジ (例: br-ex、br-ex2) から削除されます。これにより、ovs-vsctl を使用してポートを手動で再度追加するまでの間は、インスタンスへの接続はできなくなります。
# ovs-vsctl add-port br-ex eth1
12.2.2.1. neutron-ovs-cleanup の使用例
1. openvswitch_agent.ini> に記載されている bridge_mapping のエントリーをバックアップします。
2. neutron-ovs-cleanup コマンドに --ovs_all_ports フラグを指定して実行します。このステップにより、ネットワーク接続が完全に停止される点に注意してください。
# /usr/bin/neutron-ovs-cleanup --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini --log-file /var/log/neutron/ovs-cleanup.log --ovs_all_ports
3. OpenStack Networking サービスを再起動します。
# systemctl restart neutron-openvswitch-agent # systemctl restart neutron-l3-agent.service # systemctl restart neutron-dhcp-agent.service
4. openvswitch_agent.ini に bridge_mapping エントリーを再度追加して、接続をリストアします。
5. neutron-openvswitch-agent サービスを再起動します。
# systemctl restart neutron-openvswitch-agent
OVS エージェントを再起動する際には、bridge_mappings に設定されていない接続には影響はありません。br-int を br-ex2 に接続していて、かつ br-ex2 にフローがある場合には、bridge_mappings 設定から削除 (または完全にコメントアウト) してしまうと、サービスやノードを再起動するなど、どのような操作を行なっても、2 つのブリッジは切断されません。