Introduction
On ne présente plus Openvswitch, une brique importante du SDN (Software-defined networking). OpenvSwitch est destiné aux déploiements de virtualisation multi-serveurs. Les possibilités d’OVS sont nombreuses, il gère les vlans, la QoS, OpenFlow, le bonding, le mirroring. Il supporte Xen, KVM, Proxmox, Virtualbox et est intégré dans Openstack, openQRM, OpenNebula et oVirt.
La plupart des articles que l’on trouve sont assez anciens. Ils préconisent de désinstaller NetworkManager de Linux, action qui devient problématique avec les versions 8 de Centos ou RedHat, puisque l’ancien service Network et la configuration des scripts dans /etc/sysconfig/network-scripts
sont tolérés mais considérés comme obsolète.
Installation
Pour l’installation rien de plus simple:
# dnf install openvswitch NetworkManager-ovs # systemctl start openvswitch.service # systemctl enable openvswitch.service
Utilisation dans NetworkManager
Pour créer son bridge, on va l’appeler originalement “mybridge” :
# nmcli c add type ovs-bridge conn.interface mybridge con-name mybridge # nmcli c add type ovs-port conn.interface mybridge master mybridge con-name ovs-port-mybridge # nmcli c add type ovs-interface slave-type ovs-port conn.interface mybridge master ovs-port-mybridge con-name ovs-if-mybridge
Vous remarquerez que l’on passe par la commande nmcli pour que les actions soient enregistrées par NetworkManager. La règle c’est : création d’un bridge qui contient un port qui lui même peut contenir des interfaces.
Ensuite on ajoute à notre bridge un interface physique :
# nmcli c add type ovs-port conn.interface eno1 master mybridge con-name ovs-port-eno1 # nmcli c add type ethernet conn.interface eno1 master ovs-port-eno1 con-name ovs-if-eno1 # nmcli connection up ovs-if-eno1 #on active la connection c'est maintenant le bridge qui possède l'IP de eno1
Vous pouvez maintenant constater le résultat avec la commande ovs-vsctl show
. Maintenant si vous le souhaitez, pour ajouter des vports, il faut utiliser les commandes suivantes:
# nmcli c add type ovs-port conn.interface vport0 master mybridge con-name ovs-port-vport0 # nmcli c add type ovs-interface conn.interface iface0 master vport0 con-name ovs-iface0
Pour ajouter enfin des vlans, c’est par ici:
# nmcli c add type ovs-port conn.interface vlan1 master mybridge ovs-port.tag 1 con-name ovs-port-vlan1 # nmcli c add type ovs-interface slave-type ovs-port conn.interface vlan1 master ovs-port-vlan1 con-name ovs-if-vlan1 ipv4.method static ipv4.address 192.168.7.1/24 # nmcli c add type ovs-port conn.interface vlan101 master mybridge ovs-port.tag 101 con-name ovs-port-vlan101 # nmcli c add type ovs-interface slave-type ovs-port conn.interface vlan101 master ovs-port-vlan101 con-name ovs-if-vlan101 ipv4.method static ipv4.address 192.168.11.1/24 # nmcli c add type ovs-port conn.interface vlan102 master mybridge ovs-port.tag 102 con-name ovs-port-vlan102 # nmcli c add type ovs-interface slave-type ovs-port conn.interface vlan102 master ovs-port-vlan102 con-name ovs-if-vlan102 ipv4.method static ipv4.address 192.168.13.1/24
Utilisation dans libvirt et KVM
Pour pouvoir bénéficier du bridge pour les VMs dans KVM, il faut éditer unitairement la configuration d’une VM :
# virsh list --all # virsh edit ...
et modifier la partie “interface” du fichier xml (pensez à changer l’adresse mac hein…) :
<interface type='bridge'>
<mac address="00:17:3E:EF:61:91"/>
<model type='virtio'/>
<source bridge='mybridge'/>
<virtualport type='openvswitch'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Enfin si vous voulez profiter de manière globale du bridge avec virsh-manager, créez un fichier xml par exemple dans /tmp/ovs-network.xml
:
<network>
<name>ovs-network</name>
<forward mode='bridge'/>
<bridge name='mybridge'/>
<virtualport type='openvswitch'/>
</network>
Ce fichier, on va l’intégrer dans libvirt pour qu’il obtienne un uuid :
# virsh net-define /tmp/ovs-network.xml # virsh net-start ovs-network # virsh net-autostart ovs-network # virsh net-list # pour voir le nouveau réseau
Et plus…
Voilà, vous pouvez maintenant bénéficier de votre bridge pour toutes vos nouvelles VMs, un vport sera ajouté automatiquement pour chaque serveur créé, que l’on pourra constater avec la commande ip addr
. Vous pouvez également l’utiliser dans Terraform, par exemple avec le provider libvirt et xslt.