Nel precedente articolo abbiamo analizzato la struttura ed il posizionamento all’interno di un sistema GNU/Linux di Open vSwitch. Ora ci occuperemo di analizzare gli strumenti messi a disposizione dal pacchetto per la sua amministrazione.
Open vSwitch mette a disposizione una ricca suite di utility per la sua amministrazione. Iniziamo con l’analizzare lo strumento fornito per l’interazione con OVSDB che prende il nome di ovsdb-client. Questo strumento permette di interagire con il database che raccoglie le informazioni di configurazione del nostro switch software secondo lo schema definito all’interno del file /usr/share/openvswitch/vswitch.schema. E’ possibile quindi interrogare il sistema per conoscere quali databases sono attualmente gestiti con il comando:
# ovsdb-client list-dbs |
nel nostro caso l’output del comando sarà semplicemente:
Open_vSwitch |
Esploriamo quindi il contenuto del database Open_vSwitch con il comando:
# ovsdb-client list-tables Open_vSwitch |
ci verrà quindi mostrato un riepilogo delle tabelle presenti nel db:
Table ------------------------- Port Manager Bridge Interface SSL IPFIX Open_vSwitch Queue NetFlow Mirror QoS Controller Flow_Table sFlow Flow_Sample_Collector_Set |
All’interno delle tabelle riportate sopra sono definite le configurazioni relative ad ognuna delle entità associate, per cui all’interno della tabella Port sono contenute le informazioni di configurazione relative ad ogni porta del nostro switch virtualizzato. Volendo analizzare la struttura di una singola tabella possiamo eseguire il comando ovsdb-client list-columns [TABLE], che nel caso della tabella Port sarà così composto:
# ovsdb-client list-columns Port |
dando in output:
Column Type --------------- ------------------------------------------------------------------------------------------ name "string" statistics {"key":"string","max":"unlimited","min":0,"value":"integer"} vlan_mode {"key":{"enum":["set",["access","native-tagged","native-untagged","trunk"]],"type":"string"},"min":0} qos {"key":{"refTable":"QoS","type":"uuid"},"min":0} _uuid "uuid" trunks {"key":{"maxInteger":4095,"minInteger":0,"type":"integer"},"max":4096,"min":0} mac {"key":"string","min":0} status {"key":"string","max":"unlimited","min":0,"value":"string"} interfaces {"key":{"refTable":"Interface","type":"uuid"},"max":"unlimited"} bond_downdelay "integer" _version "uuid" bond_mode {"key":{"enum":["set",["active-backup","balance-slb","balance-tcp"]],"type":"string"},"min":0} bond_updelay "integer" external_ids {"key":"string","max":"unlimited","min":0,"value":"string"} other_config {"key":"string","max":"unlimited","min":0,"value":"string"} bond_fake_iface "boolean" tag {"key":{"maxInteger":4095,"minInteger":0,"type":"integer"},"min":0} fake_bridge "boolean" lacp {"key":{"enum":["set",["active","off","passive"]],"type":"string"},"min":0} |
Per visualizzare il contenuto dell’intero database possiamo eseguire:
# ovsdb-client dump Open_vSwitch |
Vediamo quindi come configurare l’istanza Open vSwitch. L’utility messa a disposizione dagli sviluppatori del progetto è ovs-vsctl. Eseguendo il comando su un istanza appena configurata:
# ovs-vsctl show 9ca39d74-828b-4493-854d-d94c61019c7a ovs_version: "2.1.2" |
Viene riportato l’UUID dello switch e la versione del software. Con questa utility possiamo creare nuovi bridge e nuove porte associate ad essi. Ad esempio:
# ovs-vsctl add-br cubo # ovs-vsctl show 9ca39d74-828b-4493-854d-d94c61019c7a Bridge cubo Port cubo Interface cubo type: internal ovs_version: "2.1.2" |
Come si può vedere il primo comando ha creato un bridge di nome “cubo” con una porta di nome “cubo” di tipo internal. Se volessimo invece aggiungere la nostra interfaccia di rete fisica al bridge appena creato:
# ovs-vsctl add-port cubo ens33 # ovs-vsctl show 9ca39d74-828b-4493-854d-d94c61019c7a Bridge cubo Port cubo Interface cubo type: internal Port "ens33" Interface "ens33" ovs_version: "2.1.2" |
Unico inconveniente di questa operazione è la perdita di connettività da parte dell’host che ospita Open vSwitch!
Per ovviare a questo problema è necessario migrare la configurazione IP della nostra interfaccia di rete fisica sull’interaccia denominata cubo ed il tutto tornerà a funzionare.
Se volessimo sfruttare le feature legate ai concetti di Software Defined Networking dovremmo istruire il nostro switch in modo che si colleghi ad un controller SDN. Per effettuare questa operazione bisogna procedere nel seguente modo:
# ovs-vsctl set-controller cubo tcp:127.0.0.1:6633 # ovs-vsctl show 9ca39d74-828b-4493-854d-d94c61019c7a Bridge cubo Controller "tcp:127.0.0.1:6633" Port cubo Interface cubo type: internal Port "ens33" Interface "ens33" ovs_version: "2.1.2" |
In questo modo è possibile specificare indirzzo IP e porta TCP ai quali collegare uno dei bridge definiti all’interno dell’istanza Open vSwitch.
Nel prossimo articolo vedremo come avviene la gestione dei flussi all’interno dello switch virtualizzato.