KVM on ESXi (openvswitch)

Linux Bridgeではなく、openvswitchを使って、通信を試してみた。
まずは、Linux Bridgeからの置き換えから。

心配していたのは、ovsにvmをどうやってbindするのかってこと。。virt-install時にbr1とか
設定してたけど、そこをovsのbridge名に変更するだけでいいのかと。。。
そのあたりを調査すると、openvswitchにbridge compatモードみたいので動作させている事例が多い。

openvswitchの情報によると、libvirt 0.9.11からネイティブ?に対応しているようです。

早速、KVMサーバで調べてみると、対応してる様子。xmlファイルの記載もある。virtualportとかで良さそうです。

[root@kvm1 ~]# rpm -qa | grep libvirt
libvirt-client-0.10.2-18.el6_4.9.x86_64
libvirt-0.10.2-18.el6_4.9.x86_64
libvirt-python-0.10.2-18.el6_4.9.x86_64

openvswitchは最新のものを使う事にした。現時点では、1.10.0です。
コンパイルしてやるのもいいかと考えたが、起動スクリプトとか面倒なので、rpmを探してみたが、ない。。。
ここに、rpmの作成方法までありました。しかもCentOS6.4で同じ。ラッキー。いや、ラッキーじゃなく感謝ですね。ありがとうございます。
コンパイルオプションとか全く見てないので、なにがどうなってるかわかりませんが、とりあえず突き進みます。

[root@kvm1 ~]# yum install kmod-openvswitch-1.10.0-1.el6.x86_64.rpm
[root@kvm1 ~]# yum install openvswitch-1.10.0-1.x86_64.rpm  
[root@kvm1 ~]# rpm -qa | grep openvs (確認)
openvswitch-1.10.0-1.x86_64
kmod-openvswitch-1.10.0-1.el6.x86_64

現在のこれまでの設定だと、Linux Bridgeで動作してしまうので、KVMサーバ上で、

# cd /etc/sysconfig/network-scripts
# rm ifcfg-br1 (ブリッジ設定消しちゃいます)
# vi ifcfg-eth1
---
DEVICE=eth1
HWADDR=00:0C:...
TYPE=Ethernet
UUID=029eb193-c711-.....
ONBOOT=yes
#BRIDGE=br1   BRIDGEのところをコメントにします。
---

再起動!
とりあえず、ifconfigでeth1がupしていること、br1が作成されていないことを確認します。

ovsでブリッッジを作成し、eth1を接続します。br1とかすると、Linux Bridgeと混乱するので、bridgeの名前は、
ovsbr1としています。ifconfigでovsbr1が作成していることを確認します。

[root@kvm1 ~]# ovs-vsctl add-br ovsbr1
[root@kvm1 ~]# ovs-vsctl add-port ovsbr1 eth1
[root@kvm1 ~]# ovs-vsctl show
d74e37a6-b456-42a3-a83a-153d8544cafb
    Bridge "ovsbr1"
        Port "eth1"
            Interface "eth1"
        Port "ovsbr1"
            Interface "ovsbr1"
                type: internal
    ovs_version: "1.10.0"

[root@kvm1 ~]# ifconfig -a
...
ovs-system Link encap:Ethernet  HWaddr AA:4F:EE:DF:3D:06  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ovsbr1    Link encap:Ethernet  HWaddr 00:0C:29:E7:3D:46  
          inet6 addr: fe80::d0f1:cbff:fe4e:ab35/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)

さて、いよいよvmとovsbr1との接続ですが、上記のopenvswitchの情報に従って変更します。

# virsh edit vm71
  ---  編集前 ---
    <interface type='bridge'>
      <mac address='52:54:00:fc:a5:fa'/>
      <source bridge='br1'/>       (変更します)
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
   --- 編集後 ---
    <interface type='bridge'>
      <mac address='52:54:00:fc:a5:fa'/>
      <source bridge='ovsbr1'/>
      <virtualport type='openvswitch/'>  (追加)
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

# virsh start vm71

変更後、vmを起動します。

ovsの状態を確認します。vnet0としてovsに接続されていますね。。

[root@kvm1 ~]# ovs-vsctl show
d74e37a6-b456-42a3-a83a-153d8544cafb
    Bridge "ovsbr1"
        Port "vnet0"
            Interface "vnet0"
        Port "eth1"
            Interface "eth1"
        Port "ovsbr1"
            Interface "ovsbr1"
                type: internal
    ovs_version: "1.10.0"

ifconfigでvnet0ができているのも確認。

# ifconfig -a
...
vnet0     Link encap:Ethernet  HWaddr FE:54:00:FC:A5:FA  
          inet6 addr: fe80::fc54:ff:fefc:a5fa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:826 (826.0 b)  TX bytes:667 (667.0 b)

2台のKVMを同様にしてovsに置き換えて、各KVMサーバ上でvmを2つ動作させて通信します。
構成は、こんな感じ。

KVM-OVS

vm76からvm71へのping。

[root@vm76 ~]# ping 192.168.200.71
PING 192.168.200.71 (192.168.200.71) 56(84) bytes of data.
64 bytes from 192.168.200.71: icmp_seq=1 ttl=64 time=1.07 ms
64 bytes from 192.168.200.71: icmp_seq=2 ttl=64 time=0.607 ms

vnet0とかvnet1とかは自動で設定されるんですね。便利。

# virsh dumpxml vm71
...
      <source bridge='ovsbr1'/>
      <virtualport type='openvswitch'>
        <parameters interfaceid='9c8f005e-df3b-3d25-3e26-dc58d12a04f9'/>
      </virtualport>
      <target dev='vnet0'/>
      <model type='virtio'/>
...

target dev=vnet0とか自動で追加されていますね。。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*