Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第14章 分散仮想ルーター (DVR) の設定

Red Hat OpenStack Platform 13 をデプロイする場合には、そのデプロイメントに対して集中ルーティングモデルまたは DVR のオプションから選択することができます。DVR は完全にサポートされており、設定オプションとして利用できますが、Red Hat OpenStack Platform 13 director のデフォルトの設定は、集中ルーティングのままとなっています。

集中ルーティングも、DVR も有効なルーティングモデルで、それぞれに短所、長所がある点に留意することが重要です。本書を使用して、集中ルーティングと DVR のどちらがニーズにより適しているかを慎重に計画することを推奨します。

14.1. レイヤー 3 ルーティングの概要

OpenStack Networking (neutron) は、プロジェクトネットワークにルーティングサービスを提供します。ルーターがない場合には、プロジェクトネットワーク内のインスタンスは、共有 L2 ブロードキャストドメインでのみ相互通信が可能となります。ルーターを作成して、テナントネットワークに割り当てると、そのネットワークのインスタンスが他のプロジェクトネットワークやアップストリームと通信することができます (外部ゲートウェイがルーターに定義されている場合)。

14.1.1. ルーティングのフロー

OpenStack のルーティングサービスは主に、3 つのフローに分類できます。

  • East-West ルーティング: 同じテナント内の異なるネットワーク間のトラフィックのルーティング。このトラフィックは OpenStack デプロイメント外には出ません。この定義は、IPv4 と IPv6 のサブネット両方に提供されます。
  • Floating IP を使用した North-South ルーティング: Floating IP のアドレス指定とはインスタンス間をフロートする変更可能な 1 対 1 の NAT であるという説明が最も適しています。Floating IP は、Floating IP と neutron ポートの間での 1 対 1 の関連付けとしてモデル化されていますが、Floating IP は NAT の変換を実行する neutron ルーターとの関連付けで実装されています。Floating IP 自体は、外部と接続可能なルーターを提供するアップリンクネットワークから取得しているため、インスタンスと (インターネットのエンドポイントなど) 外部のリソースとの間の通信が可能です。Floating IP は、IPv4 の概念で、IPv6 には適用されません。プロジェクトが使用する IPv6 のアドレス指定は、プロジェクト全体で重複のないグローバルユニキャストアドレス (GUA) を使用することが前提であるため、NAT なしにルーティングが可能です。
  • Floating IP なしの North-South ルーティング (別名: SNAT): Neutron は、Floating IP が割り当てられていないインスタンスに、デフォルトのポートアドレス変換 (PAT) サービスを提供します。このサービスを使用すると、インスタンスはルーター経由で外部のエンドポイントと通信ができますが、外部のエンドポイントからはインスタンスへは通信ができません。たとえば、インターネット上の Web サイトをブラウズできますが、外部の Web ブラウザーはこのインスタンス内でホストされている Web サイトをブラウスすることはできません。SNAT は、IPv4 トラフィックのみに適用されます。さらに、GUA プレフィックスが割り当てられた neutron プロジェクトネットワークでは、外部にアクセスするために neutron ルーターの外部ゲートウェイポート上に NAT は必要ありません。

14.1.2. 集中ルーティング

neutron は当初、集中ルーティングモデルで設計されました。このモデルでは、neutron L3 エージェントで管理されるプロジェクトの仮想ルーターはすべて専用のノードまたはノードのクラスター (ネットワークノードまたはコントローラーノード) にデプロイされるので、ルーティングの機能が必要となる度に (East/West、Floating IP または SNAT)、トラフィックはトポロジー内の専用のノードを経由します。そのため、複数の課題が発生し、トラフィックフローは最適な状態ではありませんでした。以下に例を示します。

  • コントローラーノード経由で伝送されるインスタンス間のトラフィック: L3 を使用して 2 つのインスタンス間で通信する必要がある場合に、トラフィックはコントローラーノードを経由する必要があります。同じコンピュートノードでインスタンスがそれぞれスケジューリングされている場合でも、トラフィックはコンピュートノードを離れてからコントローラーを通過して、コンピュートノードに戻ってくる必要があるため、パフォーマンスに悪影響を与えます。
  • コントローラーノード経由でパケットを送受信するインスタンス (Floating IP を使用): 外部ネットワークのゲートウェイインターフェースはコントローラーノードのみで利用できるので、トラフィックはインスタンスから開始される場合でも、外部ネットワークにあるインスタンスを宛先とする場合でも、トラフィックはコントローラーノードを経由する必要があります。その結果、大規模な環境では、コントローラーノードにかかるトラフィックの負荷が高くなり、パフォーマンスやスケーラビリティーに影響を及ぼします。また、外部ネットワークのゲートウェイインターフェースで十分な帯域幅を確保できるように慎重に計画する必要があります。SNAT トラフィックにも同じ要件が適用されます。

L3 エージェントのスケーリングを改善するには、neutron で複数のノードに仮想ルーターを分散する L3 HA の機能を使用することができます。コントローラーノードが失われた場合には、HA ルーターは別のノードのスタンバイにフェイルオーバーして、HA ルーターのフェイルオーバーが完了するまではパケットが失われます。この機能は、Red Hat Enterprise Linux OpenStack Platform 6 から導入されており、デフォルトで有効になっています。

14.2. DVR の概要

分散仮想ルーティング (DVR) では、別のルーティング設計も提供されており、Red Hat OpenStack Platform 11 以降のバージョンで完全にサポートされています。これは、コントローラーノードの障害のあるドメインを分離して、L3 エージェントをデプロイしてネットワークトラフィックを最適化し、全コンピュートノードにルーターをスケジューリングすることが目的です。DVR の使用時には以下が可能です。

  • East-West トラフィックは分散されて、コンピュートノード上で直接ルーティングされます。
  • Floating IP を持つインスタンスの North-South トラフィックは、分散されて、コンピュートノードにルーティングされます。これには、外部ネットワークを全コンピュートノードに接続する必要があります。
  • Floating IP を持たないインスタンスの North-South トラフィックは分散されず、依然として専用のコントローラーノードが必要です。

    • ノードコントローラーノード上の L3 エージェントを新しい dvr_snat モードで設定して、ノードが SNAT トラフィックのみにサービスを提供するようにします。
  • neutron のメタデータエージェントは分散され、全コンピュートノード上にデプロイされます。このメタデータのプロキシーサービスは分散された全ルーター上でホストされます。

14.3. 既知の問題および警告

注記

Red Hat OpenStack Platform 14 では、カーネルバージョンが kernel-3.10.0-514.1.1.el7 以降でない場合には、DVR は使用しないでください。

  • DVR のサポートは、ML2 のコアプラグイン、Open vSwitch (OVS) のメカニズムドライバー、および OVN に制限されます。他のバックエンドはサポートされません。
  • DVR が有効化されている場合でも、SNAT トラフィックは分散されません。SNAT は機能しますが、送信/受信トラフィックは中央のコントローラーノードを経由する必要があります。
  • DVR が有効化されている場合でも、IPv6 トラフィックは分散されません。IPv6 ルーティングは機能しますが、送信/受信トラフィックはすべて中央のコントローラーノードを経由する必要があります。IPv6 ルーティングを広範囲にわたり、使用している場合には、今回は DVR を使用しないことを推奨します。
  • DVR は、L3 HA を使用する場合にはサポートされません。Red Hat OpenStack Platform 14 director では、DVR を使用する場合は、L3 HA はオフになります。つまり、ルーターはこれまでどおりネットワークノードでスケジューリングされ (また L3 エージェントの間で負荷が共有され) ますが、エージェントが機能しなくなると、このエージェントがホストするルーターすべてが機能しなくなります。影響があるのは、SNAT トラフィックのみです。allow_automatic_l3agent_failover 機能を使用すると、1 つのネットワークノードが失敗してもルーターは別のノードで再スケジュールされるので、このような場合に推奨されます。
  • neutron DHCP エージェントが管理する DHCP サーバーは分散されず、コントローラーノードにデプロイされます。Red Hat OpenStack Platform では、ルーティング設計 (集中型または DVR) にかかわらず、DHCP エージェントは高可用性構成でコントローラーノードにデプロイされます。
  • Floating IP の場合は、各コンピュートノードに 外部 ネットワーク上のインターフェースが 1 つ必要です。また、外部ゲートウェイポートの実装と Floating IP ネットワークの名前空間が原因で、各コンピュートノードに追加の IP アドレスが 1 つ必要となりました。
  • プロジェクトデータの分離において、VLAN、GRE、VXLAN のすべてがサポートされます。GRE または VXLAN を使用する場合は、L2 Population 機能はオンにする必要があります。Red Hat OpenStack Platform director では、インストール時にこれは強制的に有効になります。

14.4. サポートされているルーティングアーキテクチャー

  • 集中 HA ルーティング: Red Hat Enterprise Linux OpenStack Platform 8 から Red Hat OpenStack Platform 14
  • 分散ルーティング: Red Hat OpenStack Platform 12 以降
  • 集中 HA ルーティングを実行する Red Hat OpenStack Platform 8 以降のデプロイメントから分散ルーティングのみを使用する Red Hat OpenStack Platform 10 以降のデプロイメントへのアップグレード

14.5. ML2 OVS を使用した DVR のデプロイ

neutron-ovs-dvr.yaml の環境ファイルは、必須の DVR 固有のパラメーターを設定します。任意のデプロイメント構成の DVR を設定するには他にも考慮する事項があります。要件は以下のとおりです。

(a) 外部ネットワークトラフィック用の物理ネットワークに接続されたインターフェースは、コンピュートノードとコントローラーノードの両方で設定すること。

(b) コンピュートノードおよびコントローラーノードでブリッジを作成して、外部ネットワークトラフィック用のインターフェースを設定すること。

(c) Neutron がこのブリッジを使用できるように設定すること。

ホストのネットワーク設定 (a および b) は Heat テンプレートが制御しており、これらのテンプレートにより、os-net-config プロセスで使用できるように、Heat が管理するノードに設定が渡されます。これは基本的には、ホストのネットワークのプロビジョニングを自動化しています。プロビジョニングしたネットワーク環境と一致するように、Neutron も設定する必要があります (c)。デフォルトの設定は、実稼動環境で機能するように想定されていません。たとえば、通常のデフォルト設定を使用する概念実証用の環境は、以下のようになります。

1. environments/neutron-ovs-dvr.yamlOS::TripleO::Compute::Net::SoftwareConfig の値が使用中の OS::TripleO::Controller::Net::SoftwareConfig の値と同じであることを確認します。これは通常、environments/net-multiple-nics.yaml など、オーバークラウドのデプロイ時に使用するネットワーク環境ファイルに含まれます。これにより、コンピュートノードの L3 エージェントに適した外部のネットワークブリッジが作成されます。

注記

コンピュートノードのネットワーク設定をカスタマイズした場合には、これらのファイルに適切な設定を追加する必要がある場合があります。

2. OS::TripleO::Compute::Ports::ExternalPort: ../network/ports/external.yaml など、OS::TripleO::Compute::Ports::ExternalPort を適切な値に変更して、外部ネットワークにあるコンピュートノードの neutron ポートを設定します。

3. オーバークラウドのデプロイ時に環境ファイルとして environments/neutron-ovs-dvr.yaml を追加します。以下に例を示します。

$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dvr.yaml

4. L3 HA が無効になっていることを確認します。

実稼動環境 (または、ネットワークの分離、専用の NIC など、特別にカスタマイズする必要があるテスト環境) の場合には、環境の例は指針として利用してください。L2 エージェント (例: OVS) が使用するブリッジマッピングタイプのパラメーターや、他のエージェント (例: L3 エージェント) の外部向けのブリッジへの参照には、細心の注意を払う必要があります。

注記

L3 エージェントの外部ブリッジの設定は現在も提供されていますが非推奨となっており、今後廃止される予定です。

14.6. 集中ルーティングから分散ルーティングへの移行

本項では、L3 HA 集中ルーティングを使用する Red Hat OpenStack Platform デプロイメントの分散ルーティングへのアップグレードパスについて説明します。

1. デプロイメントをアップグレードして、正しく機能していることを確認します。

2. 「ML2 OVS を使用した DVR のデプロイ」に記載の手順に従って、director のスタック更新を実行して DVR を設定します。

3. 既存のルーターでルーティングがまだ機能していることを確認します。

4. L3 HA ルーターを直接 分散型 に移行することはできません。代わりに、各ルーターで L3 HA オプションを無効にしてから分散型のオプションを有効にします。

4a. ルーターの admin 状態を無効にします。

$ neutron router-update --admin-state-up=False

4b. ルーターを レガシー タイプに変換します。

$ neutron router-update --ha=False

4c. ルーターが DVR を使用するように設定します。

$ neutron router-update --distributed=True

4d. ルーターを admin 状態に切り替えます。

$ neutron router-update --admin-state-up=True

4e. ルーティングがまだ機能しており、分散型になったことを確認します。