OpenvSwitch vs openSUSE Tumbleweed

Volem posar en el nostre node KVM el switch virtual Openvswitch. No cal que sigui exclusiu. Pot conviure amb xarxa definides tipus linux-brigde les que crea libvirt per defecte.

Instal·larem el paquet necessari

zypper install openvswitch
systemctl enable openvswitch.service 
systemctl start openvswitch.service 

Procedirem a la configuració amb wicked per integrar el switch virtual al port real del servidor.

Substituirem el fitxer actual:

cat /etc/sysconfig/network/ifcfg-enp3s0
IPADDR='192.168.100.10/24'
BOOTPROTO='static'
STARTMODE='auto'

Canviarem d’ubicació el fitxer original per no entrar en conflicte

mv /etc/sysconfig/network/ifcfg-enp3s0 /root

Pel següent que integrarem el port real que teniem configurat dins bridge virtual del openvswitch

cat >/etc/sysconfig/network/ifcfg-br0 <<EOF
IPADDR='192.168.100.10/24'
BOOTPROTO='static'
STARTMODE='auto'
OVS_BRIDGE="yes"
OVS_BRIDGE_PORT_DEVICE_1='enp3s0'
EOF

Per iniciar la configuració caldrà la comanda següent:

wicked ifup br0

Per integrar-lo amb KVM farem servir una interficies tap0

cat >>/etc/sysconfig/network/ifcfg-br0 <<EOF
OVS_BRIDGE_PORT_DEVICE_2='tap0'
EOF

Crearem també un fitxer de configuració pel dispositiu tap0

cat >/etc/sysconfig/network/ifcfg-tap0 <<EOF
STARTMODE='auto'
BOOTPROTO='none'
TUNNEL='tap'
TUNNEL_SET_OWNER=sergi
#TUNNEL_SET_GROUP=GROUP_NAME
EOF

Reiniciarem la configuració

wicked ifreload br0

Exemple d’execució amb QEMU

qemu-kvm -drive file=/PATH/TO/DISK-IMAGE 1 -m 512 -net nic,vlan=0,macaddr=00:11:22:EE:EE:EE -net tap,ifname=tap0,script=no,downscript=no

Exemple amb LIBVIRT

virsh edit VM_NAME
.
.
.
    <interface type='network'>
      <mac address='52:54:00:c3:e8:21'/>
      <source network='ovs-vlan-100'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

.
.
.

Definit una vlan com a xarxa de libvirt

cat >ovs-network.xml <<EOF
<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan-01' default='yes'>
  </portgroup>
  <portgroup name='vlan-02'>
    <vlan>
      <tag id='2'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-03'>
    <vlan>
      <tag id='3'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-all'>
    <vlan trunk='yes'>
      <tag id='2'/>
      <tag id='3'/>
    </vlan>
  </portgroup>
</network>
EOF
virsh net-define ovs-network.xml
virsh net-start ovs-network

Desde el Cockpit hauria de veure’s així

Configurar la màquina virtual perquè utilitzi aquesta xarxa

<interface type="network">
  <mac address="52:54:00:c3:e8:21"/>
  <source network="ovs-network" portgroup="vlan-02"/>
  <model type="virtio"/>
  <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>

Per utilitzar per defecte seria

<interface type="network">
  <mac address="52:54:00:c3:e8:21"/>
  <source network="ovs-vlan-default" />
  <model type="virtio"/>
  <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</interface>

Exemples diversos

cat >ovs-vlan-default.xml <<EOF
<network>
  <name>ovs-vlan-default</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='default' default='yes'>
  </portgroup>
</network>
EOF
virsh net-define ovs-vlan-default.xml
virsh net-start ovs-vlan-default
virsh net-autostart ovs-vlan-default

VLAN 100

cat >ovs-vlan-100.xml <<EOF
<network>
  <name>ovs-vlan-100</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan100' default='yes'>
    <vlan>
      <tag id='100'/>
    </vlan>
  </portgroup>
</network>
EOF
virsh net-define ovs-vlan-100.xml
virsh net-start ovs-vlan-100
virsh net-autostart ovs-vlan-100

Comandes interessants:

ovs-vsctl : Utilitat per consultar i configurar ovs-vswitchd

ovs-vsctl show

ovs-dpctl: administra els camins de dades Open vSwitch

ovs-dpctl show

ovs-ofctl: administra OpenFlow

ovs-ofctl show br0

ovs-appctl: Utilitat per configurar l’execució de dimonis Open vSwitch

ovs-appctl coverage/show