シナリオ: Linux Bridge を使った基本構成

シナリオ: Linux Bridge を使った基本構成

このシナリオでは、 OpenStack Networking サービスの ML2 プラグインと Linux ブリッジを使ったクラシック実装について説明します。

クラシック実装は、一般ユーザー (非特権ユーザー) がプロジェクト内の仮想ネットワークを管理する方法を提供し、セルフサービスによる仮想データセンター基盤のネットワーク部分を構成します。以下のようなコンポーネントがあります。

  • プロジェクト (テナント) ネットワーク

    プロジェクトネットワークは、特定のプロジェクトのインスタンスに対して接続性を提供します。一般ユーザー (非特権ユーザー) は、管理者やオペレーターが定義した範囲内でプロジェクトネットワークを管理できます。プロジェクトネットワークは VLAN, VXLAN を転送方式として使用できますが、管理者が割り当てた内容によって変わります。一般的には、プロジェクトネットワークはプライベート IP アドレスの範囲 (RFC1918) を使用し、インターネットなどの外部ネットワークへの接続性はありません。 Networking では、プロジェクトネットワークの IP アドレスは Fixed (固定) IP アドレスと呼ばれます。

  • 外部ネットワーク

    外部ネットワークは、インターネットなどの外部ネットワークへの接続性を提供します。外部ネットワークは物理ネットワーク基盤とやり取りを行うので、管理者ユーザー (特権ユーザー) だけが外部ネットワークを管理できます。外部ネットワークには、物理ネットワーク基盤に応じて、フラットか VLAN を転送方式を使用できます。一般的には、パブリック IP アドレスの範囲を外部ネットワークでは使用します。

    注釈

    フラットネットワークは本質的にタグなし VLAN、つまり素のネットワークを使います。物理ネットワークのレイヤー 2 の性質と同様、 1 つの外部ブリッジには 1 つのフラットネットワークだけを接続できます。ほとんどの場合、本番環境では外部ネットワークに VLAN 転送方式を使用すべきでしょう。

  • ルーター

    ルーターは通常プロジェクトネットワークと外部ネットワークを接続します。デフォルトでは、ルーターは SNAT を実装し、プロジェクトネットワーク上のインスタンスに対して外部への接続性を提供します。各ルーターは SNAT 用に外部ネットワークに割り当てられた IP アドレスの 1 つを使用します。ルーターは DNAT を使って、プロジェクトネットワーク上のインスタンスへの外部からの接続性を Floating IP アドレスとして提供します。ルーターは、同じプロジェクトに所属するプロジェクトネットワーク間の接続も行います。

  • 補助サービス

    補助サービスとして DHCP やメタデータがあります。 DHCP サービスは、プロジェクトネットワーク上のインスタンスの IP アドレスを管理します。メタデータサービスは、プロジェクトネットワーク上のインスタンスが SSH 鍵などのメタデータを取得する API を提供します。

設定例では、フラット外部ネットワーク 1 つと VXLAN のプロジェクトネットワーク 1 つを作成しますが、この設定は VLAN 外部ネットワーク、VLAN プロジェクトネットワークにも対応しています。 Linux ブリッジエージェントは GRE プロジェクトネットワークには対応していません。

前提

この前提は、このシナリオをデプロイするのに必要な最低限の物理インフラと直接の OpenStack サービスの依存関係を記載しています。例えば、Networking サービスは Identity サービスに直接依存しており、Compute サービスは Networking サービスに直接依存しています。 Networking サービスは Image サービスに直接は依存していないので、これらの依存関係には Image サービスなどのサービスは含まれていません。 しかしながら、 Compute サービスはインスタンスを起動するために Image サービスに依存しています。このシナリオの設定例では、 Networking サービスコンポーネントの基本的な設定に関する知識を前提にしています。

インフラストラクチャー

  1. 1 台のコントローラーノード。ネットワークインターフェースは management の 1 つ。

  2. 1 台のネットワークノード。ネットワークインターフェースは 4 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク、外部ネットワーク (通常はインターネット)。

  3. 最低 1 台のコンピュートノード。ネットワークインターフェースは 3 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク。

ネットワークトラフィックの流れを理解しやすくため、ネットワークノードとコンピュートノードは VLAN プロジェクトネットワーク用に別のネットワークインターフェースを使っています。本番環境では、VLAN プロジェクトネットワークにどんなネットワークインターフェースも使用できます。

設定例では、管理ネットワークは 10.0.0.0/24、トンネルネットワークは 10.0.1.0/24、外部ネットワークは 203.0.113.0/24 を使用します。 VLAN ネットワークはレイヤー 2 の接続性のみを扱うので IP アドレス範囲は必要ありません。

Hardware layout Network layout Service layout

注釈

VLAN 外部ネットワークと VLAN プロジェクトネットワークでは、物理ネットワーク基盤は VLAN タグに対応していなければいけません。 VXLAN プロジェクトネットワークで最大限の性能を得るには、ネットワーク基盤はジャンボフレームをサポートしている必要があるでしょう。

警告

VXLAN ネットワークを使用するにはカーネル 3.13 以降が必要です。

OpenStack サービス - コントローラーノード

  1. neutron データベースがある SQL サーバーと neutron.conf ファイルの適切な設定。

  2. メッセージキューサービスと neutron.conf ファイルの適切な設定。

  3. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  4. OpenStack Compute コントローラー/管理サービスと nova.conf ファイルの適切な設定。

  5. Neutron サーバーサービス、ML2 プラグインと依存サービス。

OpenStack サービス - ネットワークノード

  1. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  2. Linux ブリッジエージェント、L3 エージェント、 DHCP エージェント、メタデータエージェントと依存サービス。

OpenStack サービス - コンピュートノード

  1. OpenStack Identity サービスと neutron.conf ファイルの適切な設定。

  2. OpenStack Compute コントローラー/管理サービスと nova.conf ファイルの適切な設定。

  3. Linux ブリッジエージェントと依存サービス。

アーキテクチャー

クラシックアーキテクチャーは、基本的な仮想ネットワーク基盤を提供します。プロジェクトネットワークや外部ネットワーク間のルーティングはすべてのネットワークノードを経由します。他のアーキテクチャーよりも簡単にデプロイできますが、すべての機能をネットワークノードに置くのは、単一障害点ができますし、潜在的な性能問題につながります。冗長性を持たせ、性能を向上させるため、本番環境では DVR や L3 HA アーキテクチャーの採用を検討してください。ただし、 DVR アーキテクチャーでは Open vSwitch が必要です。

Architecture overview

ネットワークノードは、以下のネットワークコンポーネントを持ちます。

  1. Linux ブリッジエージェント。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。

  2. DHCP エージェント。qdhcp 名前空間を管理します。 qdhcp 名前空間はプロジェクトネットワークを使用するインスタンスに対して DHCP サービスを提供します。

  3. L3 エージェント。 qrouter 名前空間を管理します。 qrouter 名前空間は、プロジェクトネットワークと外部ネットワーク間、プロジェクトネットワーク同士のルーティングを提供します。 qrouter 名前空間は、インスタンスとメタデータエージェント間のメタデータトラフィックのルーティングも行います。

  4. メタデータエージェント。インスタンスに対してメタデータ操作を扱います。

Network node components - overview Network node components - connectivity

コンピュートノードには Linux ブリッジエージェントが置かれます。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、セキュリティーグループ、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。

Compute node components - overview Compute node components - connectivity

パケットフロー

注釈

north-south ネットワークトラフィックは、インスタンスと外部ネットワーク (通常はインターネット) 間の通信です。 easy-west ネットワークトラフィックは、インスタンス間の通信です。

ケース 1: Fixed IP アドレスを持つインスタンスの north-south トラフィック

Fixed IP を持つインスタンスに対して、ネットワークノードはプロジェクトネットワークと外部ネットワーク間の north/south ネットワークトラフィックを転送します。

  • 外部ネットワーク

    • ネットワーク 203.0.113.0/24

    • IP アドレス割り当て範囲は 203.0.113.101 から 203.0.113.200 まで

    • プロジェクトネットワークのルーターインターフェース 203.0.113.101 TR

  • プロジェクトネットワーク

    • ネットワーク 192.168.1.0/24

    • ゲートウェイ 192.168.1.1 (MAC アドレスは TG)

  • コンピュートノード 1

    • インスタンス 1 192.168.1.11 (MAC アドレスは I1)

  • インスタンス 1 はコンピュートノード 1 上にあり、プロジェクトネットワークを使用します。

  • インスタンスが外部ネットワーク上のホストにパケットを送信します。

注釈

図には VXLAN と VLAN の両方のプロジェクトネットワークが書かれていますが、このパケットフローでは VXLAN プロジェクトネットワークを使うインスタンスだけを扱っています。

以下の手順は、コンピュートノード 1 に関係します。

  1. VXLAN プロジェクトネットワークの場合:

    1. インスタンス 1 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG です。

    2. トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。

    3. トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

    4. 物理トンネルインターフェースは、パケットをネットワークノードに転送します。

  2. VLAN プロジェクトネットワークの場合:

    1. インスタンス 1 の tap インターフェースはパケットを VLAN ブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG です。

    2. VLAN ブリッジ qbr 上のセキュリティーグループルールで、このパケットに対する状態追跡 (state tracking) が行われます。

    3. VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。

    4. 論理 VLAN インターフェース device.sid は、パケットを物理 VLAN インターフェース経由でネットワークノードに転送します。

以下の手順は、ネットワークノードに関係します。

  1. VXLAN プロジェクトネットワークの場合:

    1. 物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

    2. 論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。

    3. トンネルブリッジ qbr は、パケットをルーター名前空間 qrouterqr インターフェース (5) に転送します。 qr インターフェースはプロジェクトネットワークのルーターインターフェースの IP アドレス TG を持ちます。

  2. VLAN プロジェクトネットワークの場合:

    1. 物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。

    2. 論理 VLAN インターフェース device.sid は、パケットを VLAN ブリッジ qbr に転送します。

    3. VLAN ブリッジ qbr は、パケットをルーター名前空間 qrouterqr インターフェースに転送します。 qr インターフェースはプロジェクトネットワーク 1 のゲートウェイの IP アドレス TG を持ちます。

  3. iptables サービス (6) は、 qg インターフェース (7) を送信元 IP アドレスとして使ってパケットの SNAT を行います。 qg インターフェースはプロジェクトネットワークのルーターインターフェースの IP アドレス TR を持ちます。

  4. ルーター名前空間 qrouter は、パケットを外部ブリッジ qbr に転送します。

  5. 外部ブリッジ qbr は、パケットを物理外部インターフェース経由で外部ネットワークに転送します。

注釈

戻りのトラフィックは、同様の手順の逆順で処理されます。

Network traffic flow - north/south with fixed IP address

ケース 2: Floating IP アドレスを持つインスタンスの north-south トラフィック

Floating IP を持つインスタンスに対して、ネットワークノードはプロジェクトネットワークと外部ネットワーク間の north/south ネットワークトラフィックを転送します。

  • 外部ネットワーク

    • ネットワーク 203.0.113.0/24

    • IP アドレス割り当て範囲は 203.0.113.101 から 203.0.113.200 まで

    • プロジェクトネットワークのルーターインターフェース 203.0.113.101 TR

  • プロジェクトネットワーク

    • ネットワーク 192.168.1.0/24

    • ゲートウェイ 192.168.1.1 (MAC アドレスは TG)

  • コンピュートノード 1

    • インスタンス 1 192.168.1.11 (MAC アドレスは I1)、 Floating IP アドレス 203.0.113.102 (F1)

  • インスタンス 1 はコンピュートノード 1 上にあり、プロジェクトネットワークを使用します。

  • インスタンスが外部ネットワーク上のホストからパケットを受信します。

注釈

図には VXLAN と VLAN の両方のプロジェクトネットワークが書かれていますが、このパケットフローでは VXLAN プロジェクトネットワークを使うインスタンスだけを扱っています。

以下の手順は、ネットワークノードに関係します。

  1. 物理外部インターフェースは、パケットを外部ブリッジ qbr に転送します。

  2. 外部ブリッジ qbr は、パケットをルーター名前空間 qrouterqg インターフェース (1) に転送します。 qg インターフェースはインスタンスの Floating IP アドレス F1 を持ちます。

  3. iptables サービス (2) は、 qr インターフェース (3) を送信元 IP アドレスとして使ってパケットの DNAT を行います。 qr インターフェースはプロジェクトネットワークのゲートウェイの IP アドレス TR を持ちます。

  4. VXLAN プロジェクトネットワークの場合:

    1. ルーター名前空間 qrouter は、パケットをトンネルブリッジ qbr に転送します。

    2. トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

    3. 物理トンネルインターフェースは、パケットをコンピュートノード 1 に転送します。

  5. VLAN プロジェクトネットワークの場合:

    1. ルーター名前空間 qrouter は、パケットを VLAN ブリッジ qbr に転送します。

    2. VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。

    3. 物理 VLAN インターフェースが、パケットをコンピュートノード 1 に転送します。

以下の手順は、コンピュートノード 1 に関係します。

  1. VXLAN プロジェクトネットワークの場合:

    1. 物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (5) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

    2. 論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。

    3. トンネルブリッジ qbr 上のセキュリティーグループルール (6) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。

    4. トンネルブリッジ qbr は、パケットをインスタンス 1 の tap インターフェース (7) に転送します。

  2. VLAN プロジェクトネットワークの場合:

    1. 物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。

    2. 論理 VLAN インターフェース device.sid は、パケットを VLAN ブリッジ qbr に転送します。

    3. VLAN ブリッジ qbr 上のセキュリティーグループルールで、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。

    4. VLAN ブリッジ qbr は、パケットをインスタンス 1 の tap インターフェースに転送します。

注釈

戻りのトラフィックは、同様の手順の逆順で処理されます。

Network traffic flow - north/south with a floating IP address

ケース 3: 別のネットワークのインスタンスでの east/west トラフィック

Fixed IP か Floating IP を持つインスタンスに対して、ネットワークノードは、同じプロジェクトルーターに接続されたプロジェクトネットワーク間の east-west ネットワークトラフィックをルーティングします。

  • プロジェクトネットワーク 1

    • ネットワーク: 192.168.1.0/24

    • ゲートウェイ: 192.168.1.1 (MAC アドレスは TG1)

  • プロジェクトネットワーク 2

    • ネットワーク: 192.168.2.0/24

    • ゲートウェイ: 192.168.2.1 (MAC アドレスは TG2)

  • コンピュートノード 1

    • インスタンス 1: 192.168.1.11 (MAC アドレスは I1)

  • コンピュートノード 2

    • インスタンス 2: 192.168.2.11 (MAC アドレスは I2)

  • インスタンス 1 はコンピュートノード 1 上にあり、VXLAN プロジェクトネットワーク 1 を使用します。

  • インスタンス 2 はコンピュートノード 2 上にあり、 VLAN プロジェクトネットワーク 2 を使用します。

  • 両方のプロジェクトネットワークは同じルーター上にあります。

  • インスタンス 1 がインスタンス 2 にパケットを送信します。

以下の手順は、コンピュートノード 1 に関係します。

  1. インスタンス 1 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG1 です。

  2. トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。

  3. トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  4. 物理トンネルインターフェースは、パケットをネットワークノードに転送します。

以下の手順は、ネットワークノードに関係します。

  1. 物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  2. 論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。

  3. トンネルブリッジ qbr は、パケットをルーター名前空間 qrouterqr-1 インターフェース (5) に転送します。 qr-1 インターフェースはプロジェクトネットワーク 1 のゲートウェイ IP アドレス TG1 を持ちます。

  4. ルーター名前空間 qrouter は、パケットを qr-2 インターフェース (7) にルーティングします (6)。 qr-2 インターフェースはプロジェクトネットワーク 2 のゲートウェイ IP アドレス TG2 を持ちます。

  5. ルーター名前空間 qrouter は、パケットを VLAN ブリッジ qbr に転送します。

  6. VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース vxlan-sid (8) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  7. 物理 VLAN インターフェースが、パケットをコンピュートノード 2 に転送します。

以下の手順は、コンピュートノード 2 に関係します。

  1. 物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース vlan.sid (9) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  2. 論理 VLAN インターフェース vlan.sid は、パケットを VLAN ブリッジ qbr に転送します。

  3. VLAN ブリッジ qbr 上のセキュリティーグループルール (10) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。

  4. VLAN ブリッジ qbr は、パケットをインスタンス 2 の tap インターフェース (11) に転送します。

注釈

戻りのトラフィックは、同様の手順の逆順で処理されます。

Network traffic flow - east/west for instances on different networks

ケース 4: 同じネットワークのインスタンスでの east/west トラフィック

Fixed IP か Floating IP を持つインスタンスに対して、プロジェクトネットワークは、ネットワークノード上のプロジェクトルーターを経由せずに、インスタンス間の east-west ネットワークトラフィックをスイッチングします。

  • プロジェクトネットワーク

    • ネットワーク: 192.168.1.0/24

  • コンピュートノード 1

    • インスタンス 1: 192.168.1.11 (MAC アドレスは I1)

  • コンピュートノード 2

    • インスタンス 2: 192.168.1.12 (MAC アドレスは I2)

  • インスタンス 1 はコンピュートノード 1 上にあります。

  • インスタンス 2 はコンピュートノード 2 上にあります。

  • 両方のインスタンスは同じ VXLAN プロジェクトネットワーク上にあります。

  • インスタンス 1 がインスタンス 2 にパケットを送信します。

  • Linux ブリッジエージェント。プロジェクトネットワーク内のスイッチングを扱います。

以下の手順は、コンピュートノード 1 に関係します。

  1. インスタンス 1 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は同じネットワーク上にあるので、パケットの宛先 MAC アドレスは I2 です。

  2. トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。

  3. トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  4. 物理トンネルインターフェースは、パケットをコンピュートノード 2 に転送します。

以下の手順は、コンピュートノード 2 に関係します。

  1. 物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。

  2. 論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。

  3. トンネルブリッジ qbr 上のセキュリティーグループルール (5) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。

  4. トンネルブリッジ qbr は、パケットをインスタンス 2 の tap インターフェース (6) に転送します。

注釈

戻りのトラフィックは、同様の手順の逆順で処理されます。

Network traffic flow - east/west for instances on the same network

設定例

以下の設定例を、お使いの環境でこのシナリオをデプロイする際の雛形として使ってください。

コントローラーノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    core_plugin = ml2
    service_plugins = router
    allow_overlapping_ips = True
    
  2. ML2 プラグインを設定します。/etc/neutron/plugins/ml2/ml2_conf.ini ファイルを編集します。

    [ml2]
    type_drivers = flat,vlan,vxlan
    tenant_network_types = vlan,vxlan
    mechanism_drivers = linuxbridge,l2population
    extension_drivers = port_security
    
    [ml2_type_flat]
    flat_networks = external
    
    [ml2_type_vlan]
    network_vlan_ranges = external,vlan:MIN_VLAN_ID:MAX_VLAN_ID
    
    [ml2_type_vxlan]
    vni_ranges = MIN_VXLAN_ID:MAX_VXLAN_ID
    
    [securitygroup]
    enable_ipset = True
    

    MIN_VLAN_ID, MAX_VLAN_ID, MIN_VXLAN_ID, MAX_VXLAN_ID は、お使いの環境に応じた VLAN, VXLAN ID の最小値、最大値に置き換えてください。

    注釈

    tenant_network_types` オプションの最初の値は、一般ユーザーがネットワークを作成した際のデフォルトのプロジェクトネットワーク種別になります。

    注釈

    network_vlan_ranges オプションの external 値に VLAN ID を指定しなければ、管理ユーザーは任意の VLAN ID を使用できます。

  3. 以下のサービスを実行します。

    • Server

ネットワークノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    
  2. Linux ブリッジエージェントを設定します。/etc/neutron/plugins/ml2/linuxbridge_agent.ini ファイルを編集します。

    [linux_bridge]
    physical_interface_mappings = vlan:PROJECT_VLAN_INTERFACE,external:EXTERNAL_INTERFACE
    
    [vxlan]
    enable_vxlan = True
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    l2_population = True
    
    [agent]
    prevent_arp_spoofing = True
    
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    enable_security_group = True
    

    PROJECT_VLAN_INTERFACEEXTERNAL_INTERFACE は VLAN プロジェクトネットワークと外部ネットワークを扱うインターフェース名に置き換えます。 TUNNEL_INTERFACE_IP_ADDRESS はプロジェクトトンネルネットワークを扱うインターフェースの IP アドレスに置き換えます。

  3. L3 エージェントを設定します。/etc/neutron/l3_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    use_namespaces = True
    external_network_bridge =
    

    注釈

    external_network_bridge オプションには意図的に値を指定していません。

  4. DHCP エージェントを設定します。/etc/neutron/dhcp_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata = True
    
  5. (オプション) VXLAN プロジェクトネットワークの MTU の縮小

    1. /etc/neutron/dhcp_agent.ini ファイルを編集します。

      [DEFAULT]
      dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
      
    2. /etc/neutron/dnsmasq-neutron.conf ファイルを編集します。

      dhcp-option-force=26,1450
      
  6. メタデータエージェントを設定します。 /etc/neutron/metadata_agent.ini ファイルを編集します。

    [DEFAULT]
    verbose = True
    nova_metadata_ip = controller
    metadata_proxy_shared_secret = METADATA_SECRET
    

    METADATA_SECRET を適切な値に置き換えます。

  7. 以下のサービスを実行します。

    • Linux ブリッジエージェント

    • L3 エージェント

    • DHCP エージェント

    • メタデータエージェント

コンピュートノード

  1. 共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。

    [DEFAULT]
    verbose = True
    
  2. Linux ブリッジエージェントを設定します。/etc/neutron/plugins/ml2/linuxbridge_agent.ini ファイルを編集します。

    [linux_bridge]
    physical_interface_mappings = vlan:PROJECT_VLAN_INTERFACE
    
    [vxlan]
    enable_vxlan = True
    local_ip = TUNNEL_INTERFACE_IP_ADDRESS
    l2_population = True
    
    [agent]
    prevent_arp_spoofing = True
    
    [securitygroup]
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    enable_security_group = True
    

    PROJECT_VLAN_INTERFACE は、 VLAN プロジェクトネットワークと外部ネットワークを扱うインターフェース名に置き換えます。 TUNNEL_INTERFACE_IP_ADDRESS は VXLAN プロジェクトネットワークを扱うインターフェースの IP アドレスに置き換えます。

  3. 以下のサービスを実行します。

    • Linux ブリッジエージェント

サービスの動作検証

  1. 管理プロジェクトのクレデンシャルを読み込みます。

  2. エージェントの存在と動作を検証します。

    $ neutron agent-list
    +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+
    | id                                   | agent_type         | host        | alive | admin_state_up | binary                    |
    +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+
    | 0146e482-f94a-4996-9e2a-f0cafe2575c5 | L3 agent           | network1    | :-)   | True           | neutron-l3-agent          |
    | 0dd4af0d-aafd-4036-b240-db12cf2a1aa9 | Linux bridge agent | compute2    | :-)   | True           | neutron-linuxbridge-agent |
    | 2f9e5434-575e-4079-bcca-5e559c0a5ba7 | Linux bridge agent | network1    | :-)   | True           | neutron-linuxbridge-agent |
    | 4105fd85-7a8f-4956-b104-26a600670530 | Linux bridge agent | compute1    | :-)   | True           | neutron-linuxbridge-agent |
    | 8c15992a-3abc-4b14-aebc-60065e5090e6 | Metadata agent     | network1    | :-)   | True           | neutron-metadata-agent    |
    | aa2e8f3e-b53e-4fb9-8381-67dcad74e940 | DHCP agent         | network1    | :-)   | True           | neutron-dhcp-agent        |
    +--------------------------------------+--------------------+-------------+-------+----------------+---------------------------+
    

初期ネットワークの作成

この例は、フラット外部ネットワーク、VXLAN プロジェクトネットワークを作成します。

  1. 管理プロジェクトのクレデンシャルを読み込みます。

  2. 外部ネットワークを作成します。

    $ neutron net-create ext-net --router:external True \
      --provider:physical_network external --provider:network_type flat
    Created a new network:
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | True                                 |
    | id                        | d57703fd-5571-404c-abca-f59a13f3c507 |
    | name                      | ext-net                              |
    | provider:network_type     | flat                                 |
    | provider:physical_network | external                             |
    | provider:segmentation_id  |                                      |
    | router:external           | True                                 |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tenant_id                 | 897d7360ac3441209d00fbab5f0b5c8b     |
    +---------------------------+--------------------------------------+
    
  3. 外部ネットワークにサブネットを作成します。

    $ neutron subnet-create ext-net --name ext-subnet --allocation-pool \
      start=203.0.113.101,end=203.0.113.200 --disable-dhcp \
      --gateway 203.0.113.1 203.0.113.0/24
    Created a new subnet:
    +-------------------+----------------------------------------------------+
    | Field             | Value                                              |
    +-------------------+----------------------------------------------------+
    | allocation_pools  | {"start": "203.1.113.101", "end": "203.0.113.200"} |
    | cidr              | 201.0.113.0/24                                     |
    | dns_nameservers   |                                                    |
    | enable_dhcp       | False                                              |
    | gateway_ip        | 203.0.113.1                                        |
    | host_routes       |                                                    |
    | id                | 020bb28d-0631-4af2-aa97-7374d1d33557               |
    | ip_version        | 4                                                  |
    | ipv6_address_mode |                                                    |
    | ipv6_ra_mode      |                                                    |
    | name              | ext-subnet                                         |
    | network_id        | d57703fd-5571-404c-abca-f59a13f3c507               |
    | tenant_id         | 897d7360ac3441209d00fbab5f0b5c8b                   |
    +-------------------+----------------------------------------------------+
    

注釈

設定例では、先頭のプロジェクトネットワーク種別は vlan です。管理ユーザーだけが VXLAN などの他の種別のネットワークを作成できます。以下のコマンドでは、 VXLAN プロジェクトネットワークを作成するのに admin プロジェクトのクレデンシャルを使用しています。

  1. 一般プロジェクトの ID を取得します。この例では、 demo プロジェクトを使用しています。

    $ openstack project show demo
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | Demo Project                     |
    | enabled     | True                             |
    | id          | 8dbcb34c59a741b18e71c19073a47ed5 |
    | name        | demo                             |
    +-------------+----------------------------------+
    
  2. プロジェクトネットワークを作成します。

    $ neutron net-create demo-net --tenant-id 8dbcb34c59a741b18e71c19073a47ed5 \
      --provider:network_type vxlan
    Created a new network:
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | True                                 |
    | id                        | 3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed |
    | name                      | demo-net                             |
    | provider:network_type     | vxlan                                |
    | provider:physical_network |                                      |
    | provider:segmentation_id  | 1                                    |
    | router:external           | False                                |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tenant_id                 | 8dbcb34c59a741b18e71c19073a47ed5     |
    +---------------------------+--------------------------------------+
    
  3. 通常のプロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。

  4. プロジェクトネットワークにサブネットを作成します。

    $ neutron subnet-create demo-net --name demo-subnet --gateway 192.168.1.1 \
      192.168.1.0/24
    Created a new subnet:
    +-------------------+--------------------------------------------------+
    | Field             | Value                                            |
    +-------------------+--------------------------------------------------+
    | allocation_pools  | {"start": "192.168.1.2", "end": "192.168.1.254"} |
    | cidr              | 192.168.1.0/24                                   |
    | dns_nameservers   |                                                  |
    | enable_dhcp       | True                                             |
    | gateway_ip        | 192.168.1.1                                      |
    | host_routes       |                                                  |
    | id                | 1d5ab804-8925-46b0-a7b4-e520dc247284             |
    | ip_version        | 4                                                |
    | ipv6_address_mode |                                                  |
    | ipv6_ra_mode      |                                                  |
    | name              | demo-subnet                                      |
    | network_id        | 3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed             |
    | tenant_id         | 8dbcb34c59a741b18e71c19073a47ed5                 |
    +-------------------+--------------------------------------------------+
    
  5. プロジェクトルーターを作成します。

    $ neutron router-create demo-router
    +-----------------------+--------------------------------------+
    | Field                 | Value                                |
    +-----------------------+--------------------------------------+
    | admin_state_up        | True                                 |
    | external_gateway_info |                                      |
    | id                    | 299b2363-d656-401d-a3a5-55b4378e7fbb |
    | name                  | demo-router                          |
    | routes                |                                      |
    | status                | ACTIVE                               |
    | tenant_id             | 8dbcb34c59a741b18e71c19073a47ed5     |
    +-----------------------+--------------------------------------+
    
  6. プロジェクトサブネットをルーターにインターフェースとして接続します。

    $ neutron router-interface-add demo-router demo-subnet
    Added interface 4f819fd4-be4d-42ab-bd47-ba1b2cb39006 to router demo-router.
    
  7. ルーターに外部ネットワークへのゲートウェイを追加します。

    $ neutron router-gateway-set demo-router ext-net
    Set gateway for router demo-router
    

ネットワーク動作の検証

  1. ネットワークノードにおいて、qrouterqdhcp 名前空間が作成されていることを確認します。

    $ ip netns
    qdhcp-3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed
    qrouter-299b2363-d656-401d-a3a5-55b4378e7fbb
    

    注釈

    インスタンスを起動するまでは qdhcp 名前空間は存在しない場合があります。

  2. プロジェクトネットワークのルーターの外部ネットワーク側のゲートウェイ IP アドレスを調べます。通常は、外部ネットワークのサブネット IP 割り当て範囲の中で最小の IP アドレスです。

    $ neutron router-port-list demo-router
    +--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
    | id                                   | name | mac_address       | fixed_ips                                                                            |
    +--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
    | b1a894fd-aee8-475c-9262-4342afdc1b58 |      | fa:16:3e:c1:20:55 | {"subnet_id": "1d5ab804-8925-46b0-a7b4-e520dc247284", "ip_address": "192.168.1.1"}   |
    | ff5f93c6-3760-4902-a401-af78ff61ce99 |      | fa:16:3e:54:d7:8c | {"subnet_id": "020bb28d-0631-4af2-aa97-7374d1d33557", "ip_address": "203.0.113.101"} |
    +--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
    
  3. コントローラーノードか外部ネットワークにアクセスできるホストから、プロジェクトルーターの外部ネットワーク側のゲートウェイ IP アドレスに ping を行います。

    $ ping -c 4 203.0.113.101
    PING 203.0.113.101 (203.0.113.101) 56(84) bytes of data.
    64 bytes from 203.0.113.101: icmp_req=1 ttl=64 time=0.619 ms
    64 bytes from 203.0.113.101: icmp_req=2 ttl=64 time=0.189 ms
    64 bytes from 203.0.113.101: icmp_req=3 ttl=64 time=0.165 ms
    64 bytes from 203.0.113.101: icmp_req=4 ttl=64 time=0.216 ms
    
    --- 203.0.113.101 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms
    
  4. 通常のプロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。

  5. プロジェクトネットワークに接続されたインタフェースを持つインスタンスを起動します。

  6. インスタンスへのコンソールアクセスを取得します。

    1. プロジェクトルーターへの接続性を確認します。

      $ ping -c 4 192.168.1.1
      PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
      64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.357 ms
      64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.473 ms
      64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=0.504 ms
      64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=0.470 ms
      
      --- 192.168.1.1 ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 2998ms
      rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms
      
    2. インターネットへの接続性を確認します。

      $ ping -c 4 openstack.org
      PING openstack.org (174.143.194.225) 56(84) bytes of data.
      64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
      64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
      64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
      64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms
      
      --- openstack.org ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 3003ms
      rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
      
  7. 適切なセキュリティーグループを作成し、インスタンスへの ping と SSH を許可します。例えば以下のようにします。

    $ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
     +-------------+-----------+---------+-----------+--------------+
     | IP Protocol | From Port | To Port | IP Range  | Source Group |
     +-------------+-----------+---------+-----------+--------------+
     | icmp        | -1        | -1      | 0.0.0.0/0 |              |
     +-------------+-----------+---------+-----------+--------------+
    
     $ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
     +-------------+-----------+---------+-----------+--------------+
     | IP Protocol | From Port | To Port | IP Range  | Source Group |
     +-------------+-----------+---------+-----------+--------------+
     | tcp         | 22        | 22      | 0.0.0.0/0 |              |
     +-------------+-----------+---------+-----------+--------------+
    
  8. 外部ネットワークに Floating IP アドレスを作成します。

    $ neutron floatingip-create ext-net
    +---------------------+--------------------------------------+
    | Field               | Value                                |
    +---------------------+--------------------------------------+
    | fixed_ip_address    |                                      |
    | floating_ip_address | 203.0.113.102                        |
    | floating_network_id | e5f9be2f-3332-4f2d-9f4d-7f87a5a7692e |
    | id                  | 77cf2a36-6c90-4941-8e62-d48a585de050 |
    | port_id             |                                      |
    | router_id           |                                      |
    | status              | DOWN                                 |
    | tenant_id           | 443cd1596b2e46d49965750771ebbfe1     |
    +---------------------+--------------------------------------+
    
  9. Floating IP アドレスをインスタンスに関連付けます。

    $ nova floating-ip-associate demo-instance1 203.0.113.102
    
  10. インスタンスに Floating IP アドレスが追加されていることを確認します。

    $ nova list
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    | ID                                   | Name           | Status | Task State | Power State | Networks                                |
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    | 05682b91-81a1-464c-8f40-8b3da7ee92c5 | demo-instance1 | ACTIVE | -          | Running     | demo-net=192.168.1.3, 203.0.113.102     |
    +--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
    
  11. コントローラーノードか外部ネットワークにアクセスできるホストから、インスタンスに関連付けられた Floating IP アドレスに ping を行います。

    $ ping -c 4 203.0.113.102
    PING 203.0.113.102 (203.0.113.112) 56(84) bytes of data.
    64 bytes from 203.0.113.102: icmp_req=1 ttl=63 time=3.18 ms
    64 bytes from 203.0.113.102: icmp_req=2 ttl=63 time=0.981 ms
    64 bytes from 203.0.113.102: icmp_req=3 ttl=63 time=1.06 ms
    64 bytes from 203.0.113.102: icmp_req=4 ttl=63 time=0.929 ms
    
    --- 203.0.113.102 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3002ms
    rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.