I container Linux sono molto popolari grazie alla facilità d’uso che offrono e sono ormai diventati una parte im­por­tan­te della sicurezza IT. La piat­ta­for­ma di container LXC (Linux container), da cui deriva anche il nome, viene uti­liz­za­ta per isolare diversi processi l’uno dall’altro e dal resto del sistema. At­tra­ver­so la vir­tua­liz­za­zio­ne viene generata un’Image che rende ciascun con­te­ni­to­re portabile e coerente in ogni fase, dallo sviluppo, alla fase di test e al fun­zio­na­men­to. In questo modo, sebbene le singole ap­pli­ca­zio­ni vengano eseguite in un ambiente virtuale, con­di­vi­do­no comunque il kernel del sistema host.

Cosa fanno i container Linux o LXC? La sem­pli­ci­tà è sempre un vantaggio? Infine, che ruolo giocano le macchine virtuali?

Che cos’è LXC (Linux container)?

Il termine Linux container (LXC) indica sia ap­pli­ca­zio­ni vir­tua­liz­za­te basate su Linux che la piat­ta­for­ma o la tec­no­lo­gia container sot­to­stan­te. Questo è da tenere a mente so­prat­tut­to quando si fa ri­fe­ri­men­to ad altre piat­ta­for­me container anch’esse basate sulla tec­no­lo­gia dei container Linux.

LXC è una piat­ta­for­ma container open source che promette un utilizzo facile e un’espe­rien­za utente intuitiva e moderna, ca­rat­te­ri­sti­ca piuttosto atipica dei sistemi container. La piat­ta­for­ma offre vari tool, lingue, template e librerie. L’ambiente di vir­tua­liz­za­zio­ne può, inoltre, essere in­stal­la­to e uti­liz­za­to su tutte le prin­ci­pa­li di­stri­bu­zio­ni Linux.

Consiglio

I container sono uno strumento unico che aiutano a gestire e svi­lup­pa­re le ap­pli­ca­zio­ni in un modo che finora era inim­ma­gi­na­bi­le: con­sen­to­no di isolare le ap­pli­ca­zio­ni soltanto dal sistema, per­met­ten­do loro di con­ti­nua­re comunque a scambiare in­for­ma­zio­ni e a co­mu­ni­ca­re con il mondo esterno. La nascita di questa tec­no­lo­gia è equi­pa­ra­bi­le a una ri­vo­lu­zio­ne, che ormai è in piena espan­sio­ne con in­nu­me­re­vo­li fornitori che si con­ten­do­no il mercato. I prin­ci­pa­li fornitori di Container-as-a-Service includono Amazon, Microsoft e Google. La piat­ta­for­ma più co­no­sciu­ta è Docker, un’evo­lu­zio­ne del progetto Linux Container (LXC), sup­por­ta­ta da tutti i provider CaaS.

L’idea per la tec­no­lo­gia dei container Linux nasce già nel 2001. Nel contesto del progetto VServer è stato im­ple­men­ta­to ini­zial­men­te un ambiente isolato. Questa è stata la base per la creazione di diversi namespace con­trol­la­ti in Linux e per quelli che oggi vengono chiamati container Linux. Suc­ces­si­va­men­te sono emerse altre tec­no­lo­gie, come cgroups (Control Groups), che possono con­trol­la­re e limitare l’uso delle risorse per un processo o interi gruppi di processi, e systemd, un sistema di ini­zia­liz­za­zio­ne per la gestione dei namespace e dei relativi processi.

In pratica, LXC ga­ran­ti­sce uno sviluppo più rapido delle ap­pli­ca­zio­ni. La tec­no­lo­gia dei container agevola, tra le altre cose, il porting, la con­fi­gu­ra­zio­ne e l’iso­la­men­to. I container vengono sfruttati anche nello streaming di dati in tempo reale fornendo la sca­la­bi­li­tà ne­ces­sa­ria per le ap­pli­ca­zio­ni. I container Linux si adattano all’in­fra­strut­tu­ra, cosa che li rende for­te­men­te in­di­pen­den­ti, e possono essere uti­liz­za­ti lo­cal­men­te, nel cloud o in un ambiente ibrido.

N.B.

Perché le tec­no­lo­gie container sono così richieste? Ogni ap­pli­ca­zio­ne sul sistema operativo ha i suoi compiti e li svolge esat­ta­men­te in questo ambiente. L’ap­pli­ca­zio­ne si basa sulle con­fi­gu­ra­zio­ni attuali del pro­gram­ma­to­re e dipende quindi da de­ter­mi­na­te librerie, relazioni e file. Per testare invece una nuova ap­pli­ca­zio­ne in modo semplice, rapido e sicuro si usano i container, che con­sen­to­no a un’ap­pli­ca­zio­ne di recente sviluppo di essere di­stri­bui­ta in un ambiente virtuale senza doverla ri­scri­ve­re, risolvere errori o problemi. Il contenuto di un container è modellato sull’in­stal­la­zio­ne di una di­stri­bu­zio­ne Linux, contiene tutti i file di con­fi­gu­ra­zio­ne, ma è molto più facile da impostare rispetto al sistema operativo reale.

Obiettivi e ca­rat­te­ri­sti­che di LXC

A prima vista, il principio di LXC non sembra differire da quello della vir­tua­liz­za­zio­ne classica, ma se guardiamo il contesto generale le dif­fe­ren­ze diventano più evidenti. In sostanza, i container fun­zio­na­no a livello di sistema operativo, mentre le macchine virtuali a livello hardware. I container con­di­vi­do­no quindi un sistema operativo e isolano i processi ap­pli­ca­ti­vi dal resto del sistema, mentre la vir­tua­liz­za­zio­ne classica consente l’ese­cu­zio­ne si­mul­ta­nea di più sistemi operativi su un unico sistema.

N.B.

Per eseguire più sistemi operativi si­mul­ta­nea­men­te in un ambiente vir­tua­liz­za­to, è ne­ces­sa­rio un hy­per­vi­sor per emulare il sistema hardware, che tuttavia richiede un utilizzo massiccio delle risorse. In questo senso, l’uso di ap­pli­ca­tion container, che vengono eseguiti in modo nativo sul sistema operativo, cioè senza emu­la­zio­ne, è molto più ef­fi­cien­te.

Per im­po­sta­zio­ne pre­de­fi­ni­ta, i con­te­ni­to­ri Linux consumano meno risorse di una macchina virtuale e di­spon­go­no di un’in­ter­fac­cia standard, che consente di gestire più container con­tem­po­ra­nea­men­te e in modo semplice. Una piat­ta­for­ma con LXC può anche essere or­ga­niz­za­ta su più cloud, fornendo por­ta­bi­li­tà e ga­ran­ten­do che le ap­pli­ca­zio­ni eseguite cor­ret­ta­men­te sul sistema dello svi­lup­pa­to­re fun­zio­ni­no anche su qualsiasi altro sistema. Tramite l’in­ter­fac­cia dei container Linux è inoltre possibile avviare, arrestare o mo­di­fi­ca­re le variabili di ambiente di ap­pli­ca­zio­ni di di­men­sio­ni più grandi.

In sintesi, l’obiettivo di LXC è quello di creare un ambiente che sia il più vicino possibile a un’in­stal­la­zio­ne Linux standard senza la necessità di un kernel separato.

L’attuale piat­ta­for­ma di Linux container utilizza le seguenti funzioni kernel per “includere” ap­pli­ca­zio­ni e processi nei con­te­ni­to­ri:

  • namespace kernel (ipc, uts, mount, pid, rete e utente)
  • profili Apparmor e SELinux
  • linee guida Seccomp
  • chroots (uti­liz­zan­do pivot_root)
  • capacità del kernel
  • cgroups (gruppi di controllo)

I container Linux do­vreb­be­ro rimanere compatti. Per questo sono co­sti­tui­ti da pochi com­po­nen­ti separati:

  • libreria liblxc
  • col­le­ga­men­ti in più linguaggi per l’API:
    • python3 (supporto a lungo termine in 2.0.x)
    • lua (supporto a lungo termine in 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • una serie di strumenti standard per il controllo dei con­te­ni­to­ri
  • template per di­stri­bu­zio­ni

Come funziona LXC?

Iso­la­men­to e vir­tua­liz­za­zio­ne sono par­ti­co­lar­men­te im­por­tan­ti perché aiutano a gestire le risorse e gli aspetti di sicurezza nel modo più ef­fi­cien­te possibile. Essi fa­ci­li­ta­no il mo­ni­to­rag­gio, ad esempio, per in­di­vi­dua­re errori nel sistema che spesso non hanno nulla a che fare con le ap­pli­ca­zio­ni appena svi­lup­pa­te. Ma come funziona in LXC? O in altre parole: come fun­zio­na­va­no i container Linux?

Il modo più semplice e sensato per uti­liz­za­re i container Linux è quello di collegare ogni container ad un processo per mantenere il pieno controllo. Per ogni processo sono par­ti­co­lar­men­te im­por­tan­ti i namespace che for­ni­sco­no le risorse per uno o più processi che uti­liz­za­no lo stesso namespace. I processi fungono, inoltre, da controllo degli accessi al fine di pro­teg­ge­re i con­te­ni­to­ri.

Per uti­liz­za­re un ambiente LXC, le ca­rat­te­ri­sti­che e le relative funzioni devono essere chiare. I cgroups (gruppi di controllo kernel) limitano e isolano le risorse da processi come CPU, I/O, memoria di lavoro e risorse di rete. Il contenuto di un gruppo di controllo può, inoltre, essere gestito, mo­ni­to­ra­to, reso prio­ri­ta­rio e mo­di­fi­ca­to.

N.B.

Su Linux, tutto è un file. Per questo motivo, ogni cgroup è in de­fi­ni­ti­va una raccolta di file (/sys/fs/cgroup). Per gestire questo tipo di file, esistono diversi strumenti come cgmnager.

Le funzioni sono facili da gestire, il che rende una piat­ta­for­ma LXC adatta anche all’uso da parte di prin­ci­pian­ti. Nella prossima sezione ana­liz­zia­mo anche gli svantaggi di questa tec­no­lo­gia.

Vantaggi e svantaggi dei container Linux

La facilità d’uso dei container Linux è il loro più grande vantaggio rispetto alle tec­no­lo­gie di vir­tua­liz­za­zio­ne tra­di­zio­na­li. Tuttavia, la massiccia dif­fu­sio­ne di LXC, un eco­si­ste­ma quasi on­ni­com­pren­si­vo e strumenti in­no­va­ti­vi sono prin­ci­pal­men­te ri­con­du­ci­bi­li alla piat­ta­for­ma Docker che è alla base dei con­te­ni­to­ri Linux. Se con­fron­ta­to di­ret­ta­men­te con altri sistemi di container, come rkt, OpenVZ, Cloud Foundry Garden, che sono molto più limitati nell’uso, LXC beneficia della stretta con­nes­sio­ne con il pioniere delle piat­ta­for­me container.

Un am­mi­ni­stra­to­re di sistema che ha espe­rien­za con una vir­tua­liz­za­zio­ne basata su hy­per­vi­sor come Hyper-V non avrà problemi a uti­liz­za­re LXC. L’intera con­fi­gu­ra­zio­ne, dalla creazione dei template di container e la loro di­stri­bu­zio­ne, la con­fi­gu­ra­zio­ne del sistema operativo e di rete alla di­stri­bu­zio­ne delle ap­pli­ca­zio­ni, rimane sempre la stessa. Tutti gli script e i flussi di lavoro scritti per le macchine virtuali possono essere uti­liz­za­ti anche per i container Linux. Gli svi­lup­pa­to­ri non ottengono quindi nuove soluzioni e strumenti su misura, ma possono con­ti­nua­re a lavorare in un ambiente familiare e con i propri script e workflows di au­to­ma­zio­ne.

Uno svan­tag­gio cruciale di LXC è legato alla gestione della memoria: sebbene siano sup­por­ta­ti diversi backend di memoria (Ivm, overlayfs, zfs e btrfs), l’ar­chi­via­zio­ne avviene, per im­po­sta­zio­ne pre­de­fi­ni­ta, di­ret­ta­men­te sui Rootfs. Le Images non possono essere re­gi­stra­te. Altre piat­ta­for­me container offrono soluzioni migliori e più fles­si­bi­li sia per l’ar­chi­via­zio­ne dei container che per la gestione delle immagini.

Contesti d’uso di LXC

LXC è un progetto open source fi­nan­zia­to da canonical, la società dietro la di­stri­bu­zio­ne Linux Ubuntu. Tuttavia, il maggiore supporto proviene dalla sua comunità, che sviluppa con­giun­ta­men­te versioni stabili e ag­gior­na­men­ti di sicurezza, oltre a portare avanti il progetto. Le diverse edizioni di LXC godono anche di un supporto continuo e di ag­gior­na­men­ti regolari di sicurezza. Le altre versioni vengono mantenute, di solito, fino a quando non viene pub­bli­ca­ta una versione più recente e più stabile.

I container Linux sono per lo più uti­liz­za­ti come tec­no­lo­gia container ag­giun­ti­va, un fatto non insolito con­si­de­ran­do che, a dif­fe­ren­za delle macchine virtuali, quella dei container è una tec­no­lo­gia ancora ab­ba­stan­za giovane. Va notato, tuttavia, che i fornitori di soluzioni per container sono in costante crescita così come l’eco­si­ste­ma intorno a questa tec­no­lo­gia.

LXC è at­tual­men­te un’al­ter­na­ti­va as­so­lu­ta­men­te valida alle ap­pli­ca­zio­ni tra­di­zio­na­li esistenti, che sono rivolte in par­ti­co­la­re agli am­mi­ni­stra­to­ri VM. La tran­si­zio­ne da una macchina virtuale a una tec­no­lo­gia container è più facile con i con­te­ni­to­ri Linux che con qualsiasi altra tec­no­lo­gia di questo tipo.

Al­ter­na­ti­ve ai container Linux

L’al­ter­na­ti­va più popolare a LXC è Docker. La piat­ta­for­ma, che si basa su container Linux, è stata con­ti­nua­men­te svi­lup­pa­ta negli ultimi anni, tanto da renderla ora anche com­pa­ti­bi­le con sistemi Windows. Ciò consente anche ai provider di cloud più grandi come Google, IBM, AWS e Azure di offrire il supporto nativo di Docker.

Una nota al­ter­na­ti­va ai container (Linux) per vir­tua­liz­za­re server completi è OpenVZ. Come LXC, OpenVZ utilizza il kernel del sistema operativo host e fornisce agli utenti server virtuali in un ambiente isolato.

KVM è una tec­no­lo­gia di vir­tua­liz­za­zio­ne open source già integrata in Linux, dove KVM sta per “Kernel-based Virtual Machine”. Essa consente di con­ver­ti­re Linux in un hy­per­vi­sor, per­met­ten­do all’host di eseguire più ambienti isolati.

Ku­ber­ne­tes è stato svi­lup­pa­to ori­gi­na­ria­men­te da Google, che è stato uno dei primi so­ste­ni­to­ri delle tec­no­lo­gie Linux container. Questa piat­ta­for­ma open source au­to­ma­tiz­za il fun­zio­na­men­to dei container Linux. Interi gruppi di host su cui vengono eseguiti i container vengono rag­grup­pa­ti in cluster, sem­pli­fi­can­do­ne la gestione.

N.B.

Se uti­liz­za­te LXC, l’uso di LXD diventa ine­vi­ta­bi­le. I due termini o tec­no­lo­gie sono difficili da di­stin­gue­re. LXD è un ulteriore sviluppo di LXC, che include, tra l’altro, un demone di sistema.

Vai al menu prin­ci­pa­le