L’architettura
Elastic Cloud Enterprise condivide gli stessi principi base dell’offerta SaaS di Elastic Cloud:
Architettura Service-oriented
questo tipo di architettura è pensata per garantire la scalabilità dell’intera infrastruttura. I servizi presentano comportamenti ben definiti e accessibili via API, con lo scopo di semplificare la gestione generale e dare la possibilità di applicare modifiche su singoli servizi senza modificare il resto. Ciascun servizio è installato su uno specifico container Docker in modo indipendente. Grazie a questa caratteristica, un’eventuale compromissione di un singolo servizio non si estende agli altri container, garantendo la stabilità dell’intero sistema. In Elastic Cloud è prevista infatti la possibilità che uno qualunque dei nodi Cluster Elasticsearch possa essere compromesso da una vulnerabilità di qualche tipo. L’architettura così concepita vanifica però il potenziale attacco, essendo il nodo circoscritto all’interno del container.
Proxy: il proxy mappa gli id dei cluster presenti nelle request URL nel passaggio tra i container e il cluster node. L’associazione tra cluster id e container è memorizzata in ZooKeeper, ma viene memorizzata dal proxy. Ciò significa che, anche nella rara eventualità di un crash di ZooKeeper, la piattaforma riesce comunque a inoltrare la richiesta ai cluster attivi.
Allocator: la funzione degli allocator assolve funzioni di creazione di nuovi container e l’attivazione su richiesta dei nodi ES, riattivazione di nodi “unresponsive”, eliminazione di nodi non necessari.
Constructor: si occupa del monitoraggio delle nuove richieste della console admin, calcola cosa è necessario modificare comunicando con i nodi ZooKeeper monitorati dagli allocator. Ha anche il compito di assegnare i nodi cluster ai rispettivi allocator.
Cloud UI: fornisce l’interfaccia e le API per il monitoraggio e la gestione dei cluster. Si compone di due parti: Parte amministrativa, usata per monitorare lo status della piattaforma e gestire i cluster, e la parte end user, con cui gli utenti possono configurare i propri cluster.
Utilizzo di Docker per il packaging
Tutti i servizi sopra menzionati sono installati su container Docker. Questo semplifica il numero di operazioni e facilita la creazione di un ambiente condiviso fra sviluppo e implementazione.
L’utilizzo dei container di Docker è utile in termini di sicurezza, dal momento che da questi non è possibile avere un accesso diretto alla piattaforma. Questo vale sia per i nodi cluster che per i servizi associati: anche nel caso di un attacco su un singolo nodo, non è possibile avere accesso agli altri, evitando così la compromissione dell’intero sistema.
Stunnels: per garantire la sicurezza nelle comunicazioni fra i diversi container è solitamente utilizzato TLS (transport layer security), ma non tutti i servizi di Elastic offrono nativamente il supporto di questo tipo di protocollo. In questo caso viene in aiuto Stunnels, un proxy progettato per aggiungere funzionalità TLS ad applicativi client o server senza dover apportare modifiche strutturali: https://www.stunnel.org/index.html. Grazie a questo strumento è possibile incanalare l’intero traffico tra container, “blindando” di fatto la comunicazione.
Uso di Apache ZooKeeper per il monitoraggio dei cluster:
ZooKeeper (http://zookeeper.apache.org/) è un robusto servizio di data storage di casa Apache. Ha una struttura simile a un file system dove ogni nodo è sia una directory che un file. (Questi nodi sono detti znodes per differenziarli dai nodi ordinari).
L’utilizzo di questo strumento è fondamentale per monitorare lo stato dei cluster attivi su ciascuna installazione di Elastic Cloud Enterprise.