LoginSignup
24

More than 5 years have passed since last update.

OpenStack の Quantum + Open vSwitch でVLAN構成を試してみた

Posted at

概要

 OpenStack(Folsom) において、Quantum と Open vSwitch を使って "tenant_network_type = vlan" の構成を組むと、各ノードにどのような形で仮想インタフェースやブリッジが構成されるのか知りたかったので、調査しました。

 仮想インスタンス群で、下記のような論理構成を組む意図で、

  • 3つのVLANを用意する。
    • そのうち、仮想インスタンス用には2つを使用する。
    • 1つは、OpenStackの管理ネットワークとして使用する。
  • 上記のVLANは一つの物理インタフェースに共存する。
    • 実際には、インタフェースを物理的に分けるのが好ましいが、試験環境の都合のため。

という前提で、L3 Agent を除いた構成を確認しました。

論理構成

詳細

 仮に上図のVLAN-Xを VLAN-ID:50、VLAN-Yを VLAN-ID:40、OpenStackの管理用ネットワークをVLAN-ID:30とします。
 Network Node では、

  • Quantum の Open vSwitch Agent
  • Quantum Server
  • DHCP Agent

を動作させます。

 Compute Node では、

  • Nova Compute
  • Quantum の Open vSwitch Agent

を動作させます。

1.初期状態

Network Node

br-* は、ovs-vsctl add-br で手動で作成する必要があります。
Netowrk Node:初期状態

Compute Node

br-* は、ovs-vsctl add-br で手動で作成する必要があります。
Compute Node:初期状態

2.片方のネットワーク(VLAN:40)のみに繋ぐ仮想インスタンスを作成

 1.の状態で、VLAN:40のネットワークを紐付けたインスタンスの作成指示を発行すると、下記のように変化します。

Network Node

 quantum-plugin-openvswitch-agent によって、以下の作業が実施されます。

  • br-int と br-eth0 をつなぐための、veth: int-br-eth0 <-> phy-br-eth0 を作成する。
  • int-br-eth0 を br-int に add port する。
    • int-br-eth0 -> br-int の flow に「VLAN-ID:40だったらVLAN-ID:1 に変換する」ルールを定義する。
  • phy-br-eth0 を br-eth0 に add port する。
    • phy-br-eth0 -> br-eth0 の flow に「VLAN-ID:1だったらVLAN-ID:40 に変換する」ルールを定義する。

 DHCP Agent によって、以下の作業が実施されます。

  • tap*を作成して、VLAN-ID:1 で br-int に add port する。
  • tap* に対して、VLAN-ID:40 用のネットワークの設定を与えた dnsmasq を起動する。

Netowrk Node:SingleNic インスタンス作成後

Compute Node

 quantum-plugin-openvswitch-agent によって、以下の作業が実施されます。

  • br-int と br-eth0 をつなぐための、veth: int-br-eth0 <-> phy-br-eth0 を作成する。
  • int-br-eth0 を br-int に add port する。
    • int-br-eth0 -> br-int の flow に「VLAN-ID:40だったらVLAN-ID:1 に変換する」ルールを定義する。
  • phy-br-eth0 を br-eth0 に add port する。
    • phy-br-eth0 -> br-eth0 の flow に「VLAN-ID:1だったらVLAN-ID:40 に変換する」ルールを定義する。

nova-compute によって、以下の作業が実施されます。

  • Linux Bridge: qbr* を作成する。
  • qbr* を br-int と接続するための、veth: qvb <->qbo を作成する。
    • qvb* を qbr* に add port する。
    • qvo* を br-int に VLAN-ID:1 で add port する。
  • Tap Device: vnet*を 作成する。
    • vnet* を qbr* に add port する。
  • 上記の tap* に紐付けた VM を起動する。

これにより、VM が VLAN-ID:40 に所属し、dnsmasq の提供する DHCP サーバから、IPアドレスを取得します。

Compute Node:SingleNic インスタンス作成後

3.両方のネットワーク(VLAN:40, 50)に繋ぐMultiNic仮想インスタンスを作成

2.の状態で、VLAN-ID:40 と VLAN-ID:50 を紐付けたインスタンスの作成指示を発行すると、下記のように変化します。

Network Node

 quantum-plugin-openvswitch-agent によって、以下の作業が実施される。

  • int-br-eth0 -> br-int の flow に「VLAN-ID:50だったらVLAN-ID:2 に変換する」ルールを定義する。
  • phy-br-eth0 -> br-eth0 の flow に「VLAN-ID:2だったらVLAN-ID:50 に変換する」ルールを定義する。

 DHCP Agent によって、以下の作業が実施される。

  • tap*を作成して、VLAN-ID:2 で br-int にadd port する。
  • tap* に対して、VLAN-ID:50 用のネットワークの設定を与えた dnsmasq を起動する。

Netowrk Node:MultiNic インスタンス作成後

Compute Node

 quantum-plugin-openvswitch-agent によって、以下の作業が実施される。

  • int-br-eth0 -> br-int の flow に「VLAN-ID:50だったらVLAN-ID:2 に変換する」ルールを定義する。
  • phy-br-eth0 -> br-eth0 の flow に「VLAN-ID:2だったらVLAN-ID:50 に変換する」ルールを定義する。

 nova-compute によって、以下の作業が実施されます。

  • Linux Bridge: qbr* を作成する。
  • qbr* を br-int と接続するための、veth: qvb <->qbo を作成する。
    • qvb* を qbr* に add port する。
    • qvo* を br-int に VLAN-ID:1 で add port する。
  • Tap Device: vnet*を作成する。
    • vnet* を qbr* に add port する。
  • 上記の手順をVLAN-ID:2 についても行う。
  • 上記のtap*に紐付けたVMを起動する。

これにより、VMがVLAN-ID:40, 50に所属し、DHCPによって、管理ノードのdnsmasqからIPアドレスを取得します。

Compute Node:MultiNic インスタンス作成後

このようにして、仮想インスタンス間で始めに示したような論理ネットワークを構成できます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24