ここでは、OVSを使ったOpenStackのネットワークをVLAN構成で構築してみます。
方針
基盤
- 環境は、VMwareのESXi上にControllerノードとComputeノードを構築します。
- ControllerノードとComputeノードは物理的に分けます。
- 管理系、テナント、外部ネットワークは仮想NICで分けます。
- ネットワークには、vDSとL2スイッチ(2960)を使います。
- テナントネットワークには、VLAN 1100-1200 を使うのでトランクさせます。
検証
- ここでの操作はHorizonから実施します。
- OpenStack上に作成するインスタンスは
cirros
を使います。 - 外部のVMは、ESXi上に
CentOS
のインスタンスを作成します。 - OpenStackにテナントのネットワークが設定できることを確認します。
- テナントから外部のVMに通信ができることを確認します。
- 外部のVMからFloating IPで通信ができることを確認します。
環境
環境図
環境説明
ホストについて
ホスト | 説明 |
---|---|
Controller | OpenStackのコントローラーノードです。 |
Compute1 | インスタンスが起動するコントローラーです。 |
Ext_VM | 外部ネットワークのVMです。 |
ネットワークについて
対象 | ポートグループ名 | VLAN | 説明 |
---|---|---|---|
P1 | admin | – | 管理系のネットワーク |
P2 | VLAN 1100-1200 Trunk | 1100-1200(Trunk) | テナントネットワーク |
P3 | external | – | 外部通信用ネットワーク |
構築手順
L2スイッチ
(1) テナント用のトランク設定は以下の様になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
C2960#sh run int giga 0/19 Building configuration... Current configuration : 125 bytes ! interface GigabitEthernet0/19 switchport trunk allowed vlan 1100-1200 switchport mode trunk switchport nonegotiate end C2960#sh run int giga 0/20 Building configuration... Current configuration : 125 bytes ! interface GigabitEthernet0/20 switchport trunk allowed vlan 1100-1200 switchport mode trunk switchport nonegotiate end C2960#sh vtp status VTP Version : running VTP2 Configuration Revision : 0 Maximum VLANs supported locally : 255 Number of existing VLANs : 10 VTP Operating Mode : Transparent VTP Domain Name : VTP Pruning Mode : Disabled VTP V2 Mode : Enabled VTP Traps Generation : Disabled MD5 digest : 0x5E 0xA7 0x46 0xDE 0x6D 0x7D 0x27 0x7D Configuration last modified by 0.0.0.0 at 0-0-00 00:00:00 |
vDS
(1) テナント通信用ポートグループの設定です。
(2) 外部ネットワーク用ポートグループの設定です。
Cotrollerの手順
ブリッジの追加
(1) テナント用のブリッジを追加します。
1 2 3 |
[root@controller ~]# ovs-vsctl add-br br-eno33557248 [root@controller ~]# ovs-vsctl add-port br-eno33557248 eno33557248 |
(2) 外部ネットワーク用のブリッジを追加します。
1 2 3 |
[root@controller ~]# ovs-vsctl add-br br-ext [root@controller ~]# ovs-vsctl add-port br-ext eno50336512 |
ML2設定ファイル修正
(1) ML2の設定でVLANを使うように修正します。
1 2 3 4 5 6 7 |
[root@controller ~]# vi /etc/neutron/plugins/ml2/ml2_conf.ini (snip) tenant_network_types = vlan (snip) network_vlan_ranges = physnet1:1100:1200 (snip) |
openvswitch設定ファイル修正
(1) openvswitchの設定を修正します。
1 2 3 4 5 |
[root@controller ~]# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini (snip) bridge_mappings = physnet1:br-eno33557248 (snip) |
外部接続用の設定
(1) 外部との通信用ブリッジ設定をします。
1 2 3 4 5 |
[root@controller ~]# vi /etc/neutron/l3_agent.ini (snip) external_network_bridge = br-ext (snip) |
サービスの再起動
(1) neutronとopenvswitch-agentを再起動します。
1 2 |
[root@controller ~]# systemctl restart neutron-server neutron-openvswitch-agent neutron-l3-agent |
Computeの手順
ブリッジの追加
(1) テナント用のブリッジを追加します。
1 2 3 |
[root@compute1 ~]# ovs-vsctl add-br br-eno33557248 [root@compute1 ~]# ovs-vsctl add-port br-eno33557248 eno33557248 |
ML2設定ファイル修正
(1) ML2の設定でVLANを使うように修正します。
1 2 3 4 5 6 7 |
[root@compute1 ~]# vi /etc/neutron/plugins/ml2/ml2_conf.ini (snip) tenant_network_types = vlan (snip) network_vlan_ranges = physnet1:1100:1200 (snip) |
openvswitch設定ファイル修正
(1) openvswitchの設定を修正します。
1 2 3 4 5 |
[root@compute1 ~]# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini (snip) bridge_mappings = physnet1:br-eno33557248 (snip) |
サービスの再起動
(1) openvswitch-agentを再起動します。
1 2 |
[root@compute1 ~]# systemctl restart neutron-openvswitch-agent |
OpenStackネットワーク作成
外部ネットワーク作成
(1) 外部通信用のネットワークを作成します。
内部ネットワーク作成
(1) テナント用のネットワークを作成します。
ルーターと内部セグメントを作成し、ルーターに内部と外部ネットワークを接続します。
動作確認
テナントから外部通信
(1) テナントのインスタンスから外部のインスタンスにpingを実行します。
対象 | IP |
---|---|
Ext_VM | 192.168.1.100 |
cirros | 内部 : 192.168.2.2 |
外部からテナントへFloating IPで通信
(1) 外部からFloating IPで内部のインスタンスにpingを実行します。
対象 | IP |
---|---|
Ext_VM | 192.168.1.100 |
cirros | 内部 : 192.168.2.2,Floating IP : 192.168.1.151 |
内部、外部共に通信できることが確認できました 🙂