Posted at

OpenStack の Quantum + Linux Bridge でVLAN構成を試してみた

More than 5 years have passed since last update.


概要

 OpenStack(Folsom) において、Quantum と Linux Bridge を使って "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 の Linux Bridge Agent

  • Quantum Server

  • DHCP Agent

を動作させます。

 Compute Node では、


  • Nova Compute

  • Quantum の Linux Bridge Agent

を動作させます。


1.初期状態


Network Node

Netowrk Node:初期状態


Compute Node

Compute Node:初期状態


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

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


Network Node

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


  • VLAN-ID:40 につなぐためのインタフェース eth0.40 を作成する。

  • VLAN-ID:40 をadd port したブリッジ brq* を作成する。

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


  • veth として tap* <-> ns* を作成し、tap* を VLAN-ID:40 のブリッジに add port する。

  • ns* に対して、VLAN-ID:40 用のネットワークの設定を与えた dnsmasq を起動する。

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


Compute Node

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


  • VLAN-ID:40 につなぐためのインタフェース eth0.40 を作成する。

  • VLAN-ID:40 をadd port したブリッジ brq* を作成する。

  • インスタンスのNICをVLAN-ID:40のブリッジに紐付けるための tap デバイス tap* を作成して、brq に add port する。

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


  • 上記の 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-linuxbridge-agent によって、以下の作業が実施される。


  • VLAN-ID:40 につなぐためのインタフェース eth0.40 は、既に存在するので、何もしない。

  • VLAN-ID:50 につなぐためのインタフェース eth0.50 を作成する。

  • eth0.40 を add port したブリッジ brq* は、既に存在するので、何もしない。

  • eth0.50 を add port したブリッジ brq* を作成する。

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


  • VLAN-ID:40 用の dnsmasq は、既に構成されているので、何もしない。

  • veth として tap* <-> ns* を作成し、tap* を VLAN-ID:50 のブリッジに add port する。

  • ns* に対して、VLAN-ID:50 用のネットワークの設定を与えた dnsmasq を起動する。

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


Compute Node

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


  • VLAN-ID:40 につなぐためのインタフェース eth0.40 は、既に存在するので、何もしない。

  • VLAN-ID:50 につなぐためのインタフェース eth0.50 を作成する。

  • eth0.40 を add port したブリッジ brq* は、既に存在するので、何もしない。

  • eth0.50 を add port したブリッジ brq* を作成する。

  • インスタンスの NIC を VLAN-ID:40 のブリッジに紐付けるための tap デバイス tap* を作成して、brq に add port する。

  • インスタンスの NIC を VLAN-ID:50 のブリッジに紐付けるための tap デバイス tap* を作成して、brq に add port する。

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

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

Quantum の実装を見たわけでは無く、設定されていく様子を段階的に見てまとめたので、嘘を書いている恐れがあります。ツッコミ大歓迎です。