LoginSignup
8
8

More than 5 years have passed since last update.

openvswitchのvxlanで、KVM(libvirt)ホストの仮想ネットワークを接続する

Last updated at Posted at 2018-03-10

ネタとしては全く今更な内容なのですが、自分用メモとして。

以下は、以前の私の自宅のネットワークの大雑把なイメージです。(必要な部分だけ)。

vxlan_1.png

各KVM Host内では、複数の仮想マシンが複数のVLANを使ってネットワークを作っています。この仮想マシンには、勉強(検証)用だけでなく、インターネットに接続するためのルータやFirewallも含まれてます。(書いてませんが、論理構成ではネットワークが分離されてます。)

これを、次のように変更しました。

vxlan_2.png

変更の多い(勉強用)仮想スイッチと、安定して動作させたい仮想スイッチを分け、前者についてはVXLANで接続します。
これで、勉強用にVLANを追加・変更したい際は、赤枠の仮想スイッチをいじれば良いだけとなりました。

このページでは、この構成変更を行った際の手順を記載します。

環境

KVM Host OS: CentOS 7.4
openvswitch: v2.6.1
libvirt: v3.2.0

手順

操作は、全て、両方のKVM Hostで行います。

仮想スイッチの作成

まず、現状の確認。

$ ovs-vsctl show 

    Bridge "ovsbr0"
     ・
     ・
     ・
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal

現在、仮想スイッチは ovsbr0 のみ。

そこで、vxlan用に ovsvbr1 という名前の仮想スイッチを追加することにする。

$ ovs-vsctl add-br ovsbr1

仮想スイッチが作成されたことを確認する。

$ ovs-vsctl show 

    Bridge "ovsbr0"
     ・
     ・
     ・
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
    Bridge "ovsbr1"
        Port "ovsbr1"
            Interface "ovsbr1"
                type: internal

今後、再起動時には、起動時に自動的にこの仮想スイッチが作成されるよう network-scripts ファイルも作成する。

$ vi /etc/sysconfig/network-scripts/ifcfg-ovsbr1 
-------------
DEVICE=ovsbr1
NAME=ovsbr1
BOOTPROTO=none
ONBOOT=yes
DEVICETYPE=ovs
IPV6INIT=no
TYPE=OVSBridge
-------------

vxlan用仮想ポートの作成

作成した仮想スイッチに、vxlan用の仮想ポートを作成する。

# (KVM Host1)

$ ovs-vsctl add-port ovsbr1 vxlan0 -- set Interface vxlan0 type=vxlan options:key=flow options:local_ip="KVM_Host1のIPアドレス" options:remote_ip="KVM_Host2のIPアドレス"

# (KVM Host2)

$ ovs-vsctl add-port ovsbr1 vxlan0 -- set Interface vxlan0 type=vxlan options:key=flow options:local_ip="KVM_Host2のIPアドレス" options:remote_ip="KVM_Host1のIPアドレス"

vxlan用ポート "vxlan0" が追加されたことを確認する。

# (以下のサンプルはKVM Host1のみ。KVM Host2でも同様に確認すること)

$ ovs-vsctl show 
    Bridge "ovsbr0"
     ・
     ・
     ・
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
    Bridge "ovsbr1"
        Port "vxlan0"
            Interface "vxlan0"
                type: vxlan
                options: {key=flow, local_ip="KVM_HOST1のIPアドレス", remote_ip="KVM_HOST2のIPアドレス"}
        Port "ovsbr1"
            Interface "ovsbr1"
                type: internal

Firewalldの許可

CentOS標準のfirewalldが有効な場合、VXLANの通信(4879/udp)は許可されていないため、通信を許可する。

$ firewall-cmd --add-port=4789/udp --permanent
success

$ firewall-cmd --add-port=4789/udp 
success

libvitdの仮想ネットワーク作成

作成する仮想ネットワークは、作成した仮想スイッチ(ovsbr1)とブリッジさせる。
まず、作成したい仮想ネットワークを定義したXMLファイルを用意する。


$ vi ovs-vxlan.xml 
--------------------------------------------
<network>
  <name>ovs-vxlan</name>
  <forward mode='bridge'/>
  <bridge name='ovsbr1'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan_10'>
    <vlan>
      <tag id='10'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan_20'>
    <vlan>
      <tag id='20'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan_30'>
    <vlan>
      <tag id='30'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan_40'>
    <vlan>
      <tag id='40'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan_all'>
    <vlan trunk='yes'>
      <tag id='10'/>
      <tag id='20'/>
      <tag id='30'/>
      <tag id='40'/>
    </vlan>
  </portgroup>
</network>
--------------------------------------------

次に、作成したMLファイルを元に、仮想ネットワークを定義する。

$ virsh net-define ovs-vxlan.xml 

定義した仮想ネットワークを有効にする。

$ virsh net-start ovs-vxlan

設定はこれで完了。

確認

両方のKVM Hostで、vxlanで接続した仮想スイッチ内の同一VLANで通信ができることを確認する。

また、KVM Hostを再起動して、起動後、自動的に同じ設定になること、vxlanを通した通信が行えることを確認する。

8
8
0

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
8
8