Grazie al software open source, ora possiamo assumere il controllo e modificare il comportamento di quasi tutti i componenti di un sistema IT. Possiamo modificare qualsiasi cosa, dallo stack di rete nel kernel fino al codice del server Web nello spazio utente per apportare miglioramenti o implementare nuove funzionalità.
L'ultimo ostacolo per avere il controllo completo sul nostro stack hardware e software è l'hardware di rete fisica. Questi dispositivi sono solitamente costruiti con gli strumenti open source che amiamo, ma sono presentati come scatole nere che non possono essere facilmente modificate dagli operatori di rete.
Standard aperti come OpenFlow e P4 promettevano di migliorare il panorama aprendo l'accesso a questi dispositivi tramite un'API programmabile, ma richiedono comunque che qualcuno scriva un controller per implementare nuovamente le normali funzionalità degli switch, come l'inoltro e il routing, in un multi- fornitore, modo conforme agli standard. Ciò ha portato il nostro gruppo a scrivere il controller di rete definita dal software (SDN) Faucet, che consente a chiunque di realizzare pienamente il sogno delle reti programmabili.
Come funziona Faucet
Faucet è un controller OpenFlow compatto e open source che consente agli utenti di eseguire le proprie reti nello stesso modo in cui gestiscono i cluster di server. Faucet rende il networking accessibile a tutti portando il flusso di lavoro DevOps nel networking. Lo fa rendendo le funzioni di rete (come i protocolli di routing, il neighbor discovery e gli algoritmi di commutazione) facili da gestire, testare ed estendere spostandole su un normale software che gira su un server, rispetto all'approccio tradizionale di incorporare queste funzioni nel firmware di uno switch o di un router. Faucet funziona importando un file di configurazione YAML che rappresenta la topologia di rete e la funzionalità di rete richiesta, e fa il lavoro per programmare ogni dispositivo sulla rete con OpenFlow.
La storia di Faucet è iniziata nel settembre 2015 quando REANNZ ha scritto la prima versione di Faucet basata sul codice prototipo del WAND Network Research Group presso l'Università di Waikato. Da allora, questi gruppi e molti altri in Nuova Zelanda e oltre, hanno collaborato per scrivere e mantenere un controller OpenFlow funzionale che può essere utilizzato dalle masse. Ci siamo impegnati a essere un progetto open source sin dal primo giorno, poiché riteniamo che questo sia il modo migliore in cui possiamo rendere disponibili i nostri contributi per aiutare la comunità e siamo felici di aver ricevuto modifiche al codice da oltre 40 sviluppatori diversi fino ad oggi.
Test e compatibilità tra fornitori
Quando si scrivono controller di rete, è fondamentale fornire codice funzionante con ogni versione che non interrompa le distribuzioni di produzione quando vengono aggiornate. Di conseguenza, la testabilità è uno degli importanti principi guida di Faucet. Abbiamo una suite di test completa che non solo verifica la qualità del codice con linting e analisi statica, ma testiamo anche un gran numero di topologie di rete con diverse funzionalità Faucet abilitate. Questo test viene eseguito automaticamente ad ogni modifica del codice.
La nostra suite di test ci consente inoltre di qualificare i dispositivi hardware che supportano tutte le funzionalità di Faucet. Ciò ha reso la compatibilità SDN tra fornitori una reale possibilità, poiché numerosi fornitori eseguono la suite di test Faucet come parte del processo di controllo qualità per convalidare che il loro firmware supporti Faucet. Questo ci consente anche di evitare di scrivere driver aggiuntivi o estensioni del fornitore per programmare nuovi dispositivi, il che ha l'ulteriore vantaggio di mantenere la nostra base di codice piccola e coerente.
Rubinetto nel mondo reale
Faucet è stato implementato in molte reti diverse in tutto il mondo. Più di recente, abbiamo collaborato con la conferenza ACM/IEEE Supercomputing Conference 2018 (SC18) per implementare un'ampia rete Faucet come parte della rete SCinet che fornisce terabit al secondo di Internet agli stand dell'area espositiva. La rete che abbiamo costruito comprendeva hardware di Allied Telesis, Cisco e NoviFlow e siamo riusciti a superare i 9 terabit al secondo di capacità.
Un dispositivo NoviFlow che esegue un circuito integrato specifico dell'applicazione (ASIC) Barefoot Tofino P4 era il router principale della rete. NoviFlow ha scritto OpenFlow come applicazione P4, che ha consentito a Faucet di utilizzare OpenFlow come API di runtime su P4. Abbiamo scritto del codice di automazione Ansible da integrare con il database di connessione del cliente SC18 e generare al volo la configurazione del rubinetto. Il database ha assegnato a ciascuna cabina una VLAN e informazioni sulla subnet.
Il lavoro di Faucet era di eseguire il routing inter-VLAN sul router principale e il peer BGP (Border Gateway Protocol) con i due router SCinet principali per consentire alle cabine di instradare a Internet. L'implementazione del Link Aggregation Control Protocol (LACP) all'interno di Faucet ci ha consentito di raggruppare collegamenti 2x100G a ciascun router a monte per consentire la resilienza (in caso di problemi con la fibra). Ad ogni cabina è stata fornita una connessione Internet (1 Gb, 10 Gb o 100 Gb) tramite uno switch di accesso (fornito da uno dei fornitori) anch'esso controllato da Faucet. Gli switch di accesso hanno inoltrato e implementato politiche di sicurezza su ciascuna porta di accesso per proteggere la rete. Un'ulteriore sicurezza di rete è stata fornita da Poseidon di CyberReboot, uno strumento di apprendimento automatico che si integra con Faucet e può identificare gli host finali sospetti sulla rete. Tutti i servizi sulla rete, come DHCP (Dynamic Host Configuration Protocol) e BGP, sono stati forniti da daemon open source (ad es. DHCP e BIRD) in esecuzione come servizi di virtualizzazione delle funzioni di rete (NFV) su un server Linux.
Riteniamo che l'implementazione di SC18 dimostri la maturità di Faucet e OpenFlow per l'esecuzione di reti di produzione reali su larga scala. Ci auguriamo anche che altri raccolgano la sfida di assumere il controllo delle loro reti implementando SDN. Per saperne di più su faucet e su come implementarlo, visita il nostro sito Web, che contiene collegamenti a tutorial, documentazione e mailing list per le discussioni degli utenti. Per coloro che sono interessati a essere coinvolti nel nostro progetto open source, abbiamo una guida per sviluppatori per aiutare i contributori per la prima volta. Infine, per tenere traccia dei nostri progressi e degli annunci di future conferenze, tutorial o implementazioni simili a SC18, seguici su Twitter.
Brad Cowie presenterà l'utilizzo di un controller SDN open source per implementare una rete di produzione ad alta velocità su linux.conf.au, dal 21 al 25 gennaio a Christchurch, in Nuova Zelanda.