Premier Training & Business Partner Red Hat

Amministrazione di Open vSwitch

Davide Rebeccani
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

Open vSwitch

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.

Info about author

Davide Rebeccani