Come detto in precedenza, tra le tante soluzioni utilizzabili come VIM in OSM `e presente OpenStack. OpenStack, lanciato nel 2010 da NASA e Rack- space, oggi `e una delle piattaforme Cloud IaaS open-source pi`u utilizzata nel mondo. `E una raccolta di progetti software open-source che le aziende
o i fornitori di servizi Cloud possono utilizzare per configurare ed eseguire la propria infrastruttura di computing e storage. Le risorse fisiche sotto- stanti, tramite tecnologie di virtualizzazione, vengono astratte e distribuite on-demand. La figura [3.7] mostra una vista semplificata dell’architettura di OpenStack. Le API supportano l’accesso ai servizi e il controllo delle risorse offerte agli utenti e alle applicazioni. In particolare, per la gestione delle risorse, OpenStack mette a disposizione di utenti e amministratori una GUI e una CLI; quest’ultima permette di esercitare un controllo pi`u preciso sulle specifiche per l’allocazione delle risorse e la gestione delle istanze.
Figura 3.7: Architettura ad alto livello di OpenStack [42]
Per garantire modularit`a e flessibilit`a in modo da adattarsi ai bisogni dei singoli utenti, OpenStack implementa un’architettura a servizi [3.8]; ogni servizio `e svolto da un insieme preciso di componenti. Di seguito verranno presentati i componenti principali.
Keystone E il componente che fornisce il servizio d’identit`` a e integra fun- zioni per l’autenticazione, la catalogazione e la conseguente scoperta dei ser- vizi e le politiche per registrare e gestire diversi progetti e utenti. Offre nu- merose modalit`a di autenticazione come nome utente/password e un sistema basato token [36]. Inoltre, `e possibile integrarlo con un directory back-end esistente come Lightweight Directory Access Protocol, LDAP, per implemen- tare meccanismi di Role Based Access Control, RBAC. `E il primo servizio con cui l’utente interagisce al fine di autenticarsi e poter accedere agli altri servizi. In aggiunta, viene utilizzato dagli altri componenti per le verifiche in merito all’identit`a degli utenti e per la localizzazione degli altri servizi all’interno della piattaforma.
Figura 3.8: Architettura a servizi di OpenStack [42]
Swift Swift `e un sistema di archiviazione ad oggetti; sistemi di questo tipo gestiscono e memorizzano i dati come oggetti, a differenza di altre architet- ture di archiviazione come i file system che gestiscono i dati come gerarchia di file e l’archiviazione a blocchi che gestisce i dati come blocchi all’interno di settori e tracce. Ogni oggetto, in genere, include i dati stessi, una quan- tit`a variabile di metadati e un identificatore univoco globale. Il sistema di memorizzazione offerto da Swift `e distribuito e sacrifica la consistenza imme- diata, adottando un modello di eventual consistency, per garantire scalabilit`a e tolleranza ai guasti.
Glance Glance `e il componente che funge da registro di immagini memo- rizzando i metadati relativi a queste. In altre parole, gestisce la scoperta, la registrazione e la consegna delle immagini virtuali e si coordina con i sistemi di archiviazione di OpenStack, come Swift, per memorizzarle.
Cinder Cinder si occupa di fornire un servizio di archiviazione a blocchi. Si occupa della creazione, allocazione e deallocazione dei volumi alle/dalle istanze. Tramite apposite API, gli utenti possono creare e gestire i volumi e grazie alla virtualizzazione e al livello di astrazione introdotto da Cinder non devono preoccuparsi di dove questi verranno memorizzati.
Nova E uno dei primi componenti del core di OpenStack e anche uno dei` pi`u complicati a livello architetturale. `E composto da pi`u processi, ognuno dei quali svolge funzioni diverse. L’interfaccia rivolta all’utente espone delle API REST per l’interazione con questo, mentre internamente i processi co- municano tramite un meccanismo a scambio di messaggi RPC fornito dalla libreria oslo.messaging, un’astrazione sopra alle code di messaggi. I diversi processi che compongono Nova e le interazioni tra loro e con altri componenti di OpenStack sono raffigurati in [3.9].
Figura 3.9: Processi di Nova e interazioni tra loro e con gli altri componenti di OpenStack
• nova-API: `e il componente di interazione con l’utente descritto in precedenza;
• nova-compute: ospita e gestisce le istanze VM comunicando con l’hypervisor sottostante;
• nova-scheduler: coordina tutti i servizi e determina il posizionamento delle risorse richieste;
• nova-network: accetta i messaggi di richiesta ed esegue attivit`a per configurare le reti. Attualmente, `e possibile di scegliere di installare e configurare nova-network o utilizzare il servizio OpenStack networking, Neutron.
• DB: memorizza gli stati a tempo di build e di esecuzione dell’infra- struttura Cloud;
• nova-conductor: `e un ulteriore livello di astrazione che permette ai processi di compute di non accedere al DB. Le possibili operazioni su quest’ultimo vengono implementate ed offerte dal conductor. Il vantag- gio pi`u grande derivante da questo accentramento `e la miglior gestione della sicurezza.
Neutron Neutron offre un servizio Network as a Service (NaaS), consen- tendo agli utenti di creare reti su cui collegare le Virtual Network Interfaces delle proprie istanze virtuali. In maniera simile a quanto visto per gli altri processi, Neutron disaccoppia la vista logica della rete dalla vista fisica, for- nendo delle API per definire, gestire e connettere le reti virtuali. I concetti principali della visione logica della rete sono:
• virtual network: rappresenta un livello 2 di rete virtualizzato e iso- lato, pu`o essere considerato come uno switch logico;
• virtual subnet: rappresenta l’insieme di indirizzi IPv4 o IPv6 che possono essere assegnati alle VM su una determinata virtual network; • virtual ports: rappresentano le porte dello switch logico su una de-
terminata rete che possono essere collegate alle interfacce delle VM. Inoltre, Neutron offre un supporto alla multi-tenancy isolando completamen- te le risorse assegnate a diversi utenti anche se condividono gli stessi nodi fisici. Ci`o, `e ottenuto mediante l’uso di tecniche come VLAN tagging e/o il tunneling per isolare il traffico tra le istanze virtuali indipendentemente dal fatto che siano co-locate o in esecuzione in nodi separati del cluster.
Horizon Horizon `e la dashboard web che consente agli utenti e agli am- ministratori di controllare tutti i componenti della piattaforma OpenStack. Non fa altro che avviare azioni tramite chiamate alle API offerte dai vari componenti e visualizzare le informazioni ricevute come risposta.