このシナリオでは、 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 台のコントローラーノード。ネットワークインターフェースは management の 1 つ。
1 台のネットワークノード。ネットワークインターフェースは 4 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク、外部ネットワーク (通常はインターネット)。
最低 1 台のコンピュートノード。ネットワークインターフェースは 3 つ: 管理ネットワーク, プロジェクトトンネルネットワーク、 VLAN プロジェクトネットワーク。
ネットワークトラフィックの流れを理解しやすくため、ネットワークノードとコンピュートノードは VLAN プロジェクトネットワーク用に別のネットワークインターフェースを使っています。本番環境では、VLAN プロジェクトネットワークにどんなネットワークインターフェースも使用できます。
設定例では、管理ネットワークは 10.0.0.0/24、トンネルネットワークは 10.0.1.0/24、外部ネットワークは 203.0.113.0/24 を使用します。 VLAN ネットワークはレイヤー 2 の接続性のみを扱うので IP アドレス範囲は必要ありません。
注釈
VLAN 外部ネットワークと VLAN プロジェクトネットワークでは、物理ネットワーク基盤は VLAN タグに対応していなければいけません。 VXLAN プロジェクトネットワークで最大限の性能を得るには、ネットワーク基盤はジャンボフレームをサポートしている必要があるでしょう。
警告
VXLAN ネットワークを使用するにはカーネル 3.13 以降が必要です。
neutron データベースがある SQL サーバーと neutron.conf ファイルの適切な設定。
メッセージキューサービスと neutron.conf ファイルの適切な設定。
OpenStack Identity サービスと neutron.conf ファイルの適切な設定。
OpenStack Compute コントローラー/管理サービスと nova.conf ファイルの適切な設定。
Neutron サーバーサービス、ML2 プラグインと依存サービス。
OpenStack Identity サービスと neutron.conf ファイルの適切な設定。
Linux ブリッジエージェント、L3 エージェント、 DHCP エージェント、メタデータエージェントと依存サービス。
OpenStack Identity サービスと neutron.conf ファイルの適切な設定。
OpenStack Compute コントローラー/管理サービスと nova.conf ファイルの適切な設定。
Linux ブリッジエージェントと依存サービス。
クラシックアーキテクチャーは、基本的な仮想ネットワーク基盤を提供します。プロジェクトネットワークや外部ネットワーク間のルーティングはすべてのネットワークノードを経由します。他のアーキテクチャーよりも簡単にデプロイできますが、すべての機能をネットワークノードに置くのは、単一障害点ができますし、潜在的な性能問題につながります。冗長性を持たせ、性能を向上させるため、本番環境では DVR や L3 HA アーキテクチャーの採用を検討してください。ただし、 DVR アーキテクチャーでは Open vSwitch が必要です。
ネットワークノードは、以下のネットワークコンポーネントを持ちます。
Linux ブリッジエージェント。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。
DHCP エージェント。qdhcp 名前空間を管理します。 qdhcp 名前空間はプロジェクトネットワークを使用するインスタンスに対して DHCP サービスを提供します。
L3 エージェント。 qrouter 名前空間を管理します。 qrouter 名前空間は、プロジェクトネットワークと外部ネットワーク間、プロジェクトネットワーク同士のルーティングを提供します。 qrouter 名前空間は、インスタンスとメタデータエージェント間のメタデータトラフィックのルーティングも行います。
メタデータエージェント。インスタンスに対してメタデータ操作を扱います。
コンピュートノードには Linux ブリッジエージェントが置かれます。仮想スイッチ、仮想スイッチ間の接続性、および仮想ポート経由での名前空間、セキュリティーグループ、物理インターフェースなどの他のネットワークコンポーネントとのやり取りを管理します。
注釈
north-south ネットワークトラフィックは、インスタンスと外部ネットワーク (通常はインターネット) 間の通信です。 easy-west ネットワークトラフィックは、インスタンス間の通信です。
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 に関係します。
VXLAN プロジェクトネットワークの場合:
インスタンス 1 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG です。
トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。
トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
物理トンネルインターフェースは、パケットをネットワークノードに転送します。
VLAN プロジェクトネットワークの場合:
インスタンス 1 の tap インターフェースはパケットを VLAN ブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG です。
VLAN ブリッジ qbr 上のセキュリティーグループルールで、このパケットに対する状態追跡 (state tracking) が行われます。
VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。
論理 VLAN インターフェース device.sid は、パケットを物理 VLAN インターフェース経由でネットワークノードに転送します。
以下の手順は、ネットワークノードに関係します。
VXLAN プロジェクトネットワークの場合:
物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。
トンネルブリッジ qbr は、パケットをルーター名前空間 qrouter の qr インターフェース (5) に転送します。 qr インターフェースはプロジェクトネットワークのルーターインターフェースの IP アドレス TG を持ちます。
VLAN プロジェクトネットワークの場合:
物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。
論理 VLAN インターフェース device.sid は、パケットを VLAN ブリッジ qbr に転送します。
VLAN ブリッジ qbr は、パケットをルーター名前空間 qrouter の qr インターフェースに転送します。 qr インターフェースはプロジェクトネットワーク 1 のゲートウェイの IP アドレス TG を持ちます。
iptables サービス (6) は、 qg インターフェース (7) を送信元 IP アドレスとして使ってパケットの SNAT を行います。 qg インターフェースはプロジェクトネットワークのルーターインターフェースの IP アドレス TR を持ちます。
ルーター名前空間 qrouter は、パケットを外部ブリッジ qbr に転送します。
外部ブリッジ qbr は、パケットを物理外部インターフェース経由で外部ネットワークに転送します。
注釈
戻りのトラフィックは、同様の手順の逆順で処理されます。
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 プロジェクトネットワークを使うインスタンスだけを扱っています。
以下の手順は、ネットワークノードに関係します。
物理外部インターフェースは、パケットを外部ブリッジ qbr に転送します。
外部ブリッジ qbr は、パケットをルーター名前空間 qrouter の qg インターフェース (1) に転送します。 qg インターフェースはインスタンスの Floating IP アドレス F1 を持ちます。
iptables サービス (2) は、 qr インターフェース (3) を送信元 IP アドレスとして使ってパケットの DNAT を行います。 qr インターフェースはプロジェクトネットワークのゲートウェイの IP アドレス TR を持ちます。
VXLAN プロジェクトネットワークの場合:
ルーター名前空間 qrouter は、パケットをトンネルブリッジ qbr に転送します。
トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
物理トンネルインターフェースは、パケットをコンピュートノード 1 に転送します。
VLAN プロジェクトネットワークの場合:
ルーター名前空間 qrouter は、パケットを VLAN ブリッジ qbr に転送します。
VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。
物理 VLAN インターフェースが、パケットをコンピュートノード 1 に転送します。
以下の手順は、コンピュートノード 1 に関係します。
VXLAN プロジェクトネットワークの場合:
物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (5) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。
トンネルブリッジ qbr 上のセキュリティーグループルール (6) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。
トンネルブリッジ qbr は、パケットをインスタンス 1 の tap インターフェース (7) に転送します。
VLAN プロジェクトネットワークの場合:
物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース device.sid に転送します。 device は物理 VLAN インターフェースで、 sid はプロジェクトネットワークの segmentation ID です。
論理 VLAN インターフェース device.sid は、パケットを VLAN ブリッジ qbr に転送します。
VLAN ブリッジ qbr 上のセキュリティーグループルールで、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。
VLAN ブリッジ qbr は、パケットをインスタンス 1 の tap インターフェースに転送します。
注釈
戻りのトラフィックは、同様の手順の逆順で処理されます。
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 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は別のネットワーク上にあるので、パケットの宛先 MAC アドレスは TG1 です。
トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。
トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
物理トンネルインターフェースは、パケットをネットワークノードに転送します。
以下の手順は、ネットワークノードに関係します。
物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。
トンネルブリッジ qbr は、パケットをルーター名前空間 qrouter の qr-1 インターフェース (5) に転送します。 qr-1 インターフェースはプロジェクトネットワーク 1 のゲートウェイ IP アドレス TG1 を持ちます。
ルーター名前空間 qrouter は、パケットを qr-2 インターフェース (7) にルーティングします (6)。 qr-2 インターフェースはプロジェクトネットワーク 2 のゲートウェイ IP アドレス TG2 を持ちます。
ルーター名前空間 qrouter は、パケットを VLAN ブリッジ qbr に転送します。
VLAN ブリッジ qbr は、パケットを論理 VLAN インターフェース vxlan-sid (8) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
物理 VLAN インターフェースが、パケットをコンピュートノード 2 に転送します。
以下の手順は、コンピュートノード 2 に関係します。
物理 VLAN インターフェースは、パケットを論理 VLAN インターフェース vlan.sid (9) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
論理 VLAN インターフェース vlan.sid は、パケットを VLAN ブリッジ qbr に転送します。
VLAN ブリッジ qbr 上のセキュリティーグループルール (10) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。
VLAN ブリッジ qbr は、パケットをインスタンス 2 の tap インターフェース (11) に転送します。
注釈
戻りのトラフィックは、同様の手順の逆順で処理されます。
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 の tap インターフェース (1) はパケットをトンネルブリッジ qbr に転送します。宛先は同じネットワーク上にあるので、パケットの宛先 MAC アドレスは I2 です。
トンネルブリッジ qbr 上のセキュリティーグループルール (2) で、このパケットに対する状態追跡 (state tracking) が行われます。
トンネルブリッジ qbr は、パケットを論理トンネルインターフェース vxlan-sid (3) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
物理トンネルインターフェースは、パケットをコンピュートノード 2 に転送します。
以下の手順は、コンピュートノード 2 に関係します。
物理トンネルインターフェースは、パケットを論理トンネルインターフェース vxlan-sid (4) に転送します。 sid はプロジェクトネットワークの segmentation ID です。
論理トンネルインターフェース vxlan-sid は、パケットをトンネルブリッジ qbr に転送します。
トンネルブリッジ qbr 上のセキュリティーグループルール (5) で、このパケットに対するファイアウォールと状態追跡 (state tracking) が行われます。
トンネルブリッジ qbr は、パケットをインスタンス 2 の tap インターフェース (6) に転送します。
注釈
戻りのトラフィックは、同様の手順の逆順で処理されます。
以下の設定例を、お使いの環境でこのシナリオをデプロイする際の雛形として使ってください。
共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。
[DEFAULT]
verbose = True
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
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 を使用できます。
以下のサービスを実行します。
共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。
[DEFAULT]
verbose = True
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_INTERFACE と EXTERNAL_INTERFACE は VLAN プロジェクトネットワークと外部ネットワークを扱うインターフェース名に置き換えます。 TUNNEL_INTERFACE_IP_ADDRESS はプロジェクトトンネルネットワークを扱うインターフェースの IP アドレスに置き換えます。
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 オプションには意図的に値を指定していません。
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
(オプション) VXLAN プロジェクトネットワークの MTU の縮小
/etc/neutron/dhcp_agent.ini ファイルを編集します。
[DEFAULT]
dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf
/etc/neutron/dnsmasq-neutron.conf ファイルを編集します。
dhcp-option-force=26,1450
メタデータエージェントを設定します。 /etc/neutron/metadata_agent.ini ファイルを編集します。
[DEFAULT]
verbose = True
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
METADATA_SECRET を適切な値に置き換えます。
以下のサービスを実行します。
Linux ブリッジエージェント
L3 エージェント
DHCP エージェント
メタデータエージェント
共通のオプションを設定します。 /etc/neutron/neutron.conf ファイルを編集します。
[DEFAULT]
verbose = True
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 アドレスに置き換えます。
以下のサービスを実行します。
Linux ブリッジエージェント
管理プロジェクトのクレデンシャルを読み込みます。
エージェントの存在と動作を検証します。
$ 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 プロジェクトネットワークを作成します。
管理プロジェクトのクレデンシャルを読み込みます。
外部ネットワークを作成します。
$ 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 |
+---------------------------+--------------------------------------+
外部ネットワークにサブネットを作成します。
$ 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 プロジェクトのクレデンシャルを使用しています。
一般プロジェクトの ID を取得します。この例では、 demo プロジェクトを使用しています。
$ openstack project show demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| enabled | True |
| id | 8dbcb34c59a741b18e71c19073a47ed5 |
| name | demo |
+-------------+----------------------------------+
プロジェクトネットワークを作成します。
$ 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 |
+---------------------------+--------------------------------------+
通常のプロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。
プロジェクトネットワークにサブネットを作成します。
$ 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 |
+-------------------+--------------------------------------------------+
プロジェクトルーターを作成します。
$ 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 |
+-----------------------+--------------------------------------+
プロジェクトサブネットをルーターにインターフェースとして接続します。
$ neutron router-interface-add demo-router demo-subnet
Added interface 4f819fd4-be4d-42ab-bd47-ba1b2cb39006 to router demo-router.
ルーターに外部ネットワークへのゲートウェイを追加します。
$ neutron router-gateway-set demo-router ext-net
Set gateway for router demo-router
ネットワークノードにおいて、qrouter と qdhcp 名前空間が作成されていることを確認します。
$ ip netns
qdhcp-3a0663f6-9d5d-415e-91f2-0f1bfefbe5ed
qrouter-299b2363-d656-401d-a3a5-55b4378e7fbb
注釈
インスタンスを起動するまでは qdhcp 名前空間は存在しない場合があります。
プロジェクトネットワークのルーターの外部ネットワーク側のゲートウェイ 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"} |
+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
コントローラーノードか外部ネットワークにアクセスできるホストから、プロジェクトルーターの外部ネットワーク側のゲートウェイ 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
通常のプロジェクトの認証情報を読み込みます。 以下の手順では demo プロジェクトを使用します。
プロジェクトネットワークに接続されたインタフェースを持つインスタンスを起動します。
インスタンスへのコンソールアクセスを取得します。
プロジェクトルーターへの接続性を確認します。
$ 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
インターネットへの接続性を確認します。
$ 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
適切なセキュリティーグループを作成し、インスタンスへの 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 | |
+-------------+-----------+---------+-----------+--------------+
外部ネットワークに 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 |
+---------------------+--------------------------------------+
Floating IP アドレスをインスタンスに関連付けます。
$ nova floating-ip-associate demo-instance1 203.0.113.102
インスタンスに 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 |
+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+
コントローラーノードか外部ネットワークにアクセスできるホストから、インスタンスに関連付けられた 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
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.