ネタとしては全く今更な内容なのですが、自分用メモとして。
以下は、以前の私の自宅のネットワークの大雑把なイメージです。(必要な部分だけ)。
各KVM Host内では、複数の仮想マシンが複数のVLANを使ってネットワークを作っています。この仮想マシンには、勉強(検証)用だけでなく、インターネットに接続するためのルータやFirewallも含まれてます。(書いてませんが、論理構成ではネットワークが分離されてます。)
これを、次のように変更しました。
変更の多い(勉強用)仮想スイッチと、安定して動作させたい仮想スイッチを分け、前者については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を通した通信が行えることを確認する。