KVMで使うブリッジをOpenvSwitchにしてみた


KVMで使用するスイッチをLinux標準のブリッジからOpenvSwitchに変更して、外部と接続してみました。
その手順を備忘録として記します。
また、KVMの環境で1つ以上のVMが存在していることを前提とし、VM作成の説明は省きます。VMの作成方法がわからない方はこちら→CentOS7でKVMを使って仮想マシンをつくってみたを参考にしてみてください。

完成イメージ

環境

  • Host CentOS 7.5
  • openvswitch 2.0.0

手順

パッケージのインストールと起動

まずは、OpenvSwtichのインストールとデーモンの起動をさせましょう。
最新版のものを触りたのであれば、ソースからインストールするんのがいいでしょう。方法はネット上に転がっていると思うので、ここでは説明しません。

# yum install -y openvswitch python-openvswitch
# systemctl start openvswitch
# systemctl enable openvswitch

ブリッジの作成

ブリッジの作成はovs-vsctl add-brコマンドでもできますが、ここではスクリプトに直接書き込みます。
xxの部分は自身の環境に合わせてください。

# vi /etc/sysconfig/network-scripts/ifcfg-ovsbr0  // 以下のように書き込みます

DEVICE=ovsbr0
NAME=ovsbr0
ONBOOT=yes
BOOTPROTO=none
DEVICETYPE=ovs
TYPE=OVSBridge
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=xx.xx.xx.xx
DNS1=xx.xx.xx.xx

# systemctl restart network  // 設定を反映させる

ブリッジとホストのインターフェースを結びつける

# ovs-vsctl add-port ovsbr0 eno1

ブリッジとホストのインターフェースがちゃんと結びついていれば、以下のような出力が得られます。

# ovs-vsctl show
2dc06fcd-3735-4498-a963-3642d7e662d4
    Bridge "ovsbr0"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "eno1"
            Interface "eno1"
    ovs_version: "2.0.0"

VMのネットワーク設定を編集

既存のVMのネットワーク設定を変更して、ovsbr0に接続して、外部と通信できるようにしましょう。
編集する部分は、先頭に「+」がついている部分です。
ちなみに、vinanoで直接ファイルを編集しても変更は反映されません。

# virsh edit vm
+ <interface type='bridge'>
     <mac address='52:54:00:6c:4a:50'/>
+    <source bridge='ovsbr0'/>
+    <virtualport type='openvswitch'>
     <model type='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 
 </interface>

一旦保存終了してから、また開くと以下のようにパラメータが追加されています。

 <interface type='bridge'>
     <mac address='52:54:00:6c:4a:50'/>
     <source bridge='ovsbr0'/>
     <virtualport type='openvswitch'>
+       <parameters interfaceid='97233b2f-b55a-4a48-b6f0-cb254854ed39'/>
+     </virtualport>
     <model type='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 
 </interface>

確認

以上で設定が終わったので、vmがovsbr0と接続されているか、確認してみましょう。

# virsh start vm  // vmの起動
# ovs-vsctl show
2dc06fcd-3735-4498-a963-3642d7e662d4
    Bridge "ovsbr0"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "eno1"
            Interface "eno1"
        Port "vnet0"             // ←が追加されているので成功!
            Interface "vnet0"
    ovs_version: "2.0.0"

参考