Archivi categoria: Container Management

Come accelerare il processo di application modernization grazie ad Azure

Diverse sono le realtà aziendali che intraprendono un processo di trasformazione digitale incentrato sul cloud pubblico con l’obiettivo di aumentare l’innovazione, l’agilità e l’efficienza operativa. Nell’ambito di questo percorso, la modernizzazione delle applicazioni sta diventando rapidamente una pietra miliare che consente di ottenere importanti benefici. In questo articolo viene approfondito come è possibile intraprendere ed accelerare il processo di modernizzazione delle applicazioni con le soluzioni disponibili in Microsoft Azure e quali opportunità è possibile cogliere.

Microsoft Azure offre la flessibilità di scegliere tra un’ampia gamma di opzioni per ospitare le proprie applicazioni, coprendo lo spettro di Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS), Container-as-a-Service (CaaS) e serverless.

La tendenza a sviluppare applicazioni moderne, che necessitano di architetture basate su microservizi, rendono i container la soluzione ideale per eseguire il deployment del software in modo efficiente ed operare su larga scala. Oltra alla possibilità di effettuare deployment consistenti, affidabili e ripetibili in tutti gli ambienti si può ottenere un migliore utilizzo dell’infrastruttura ed una standardizzazione delle pratiche di gestione.

Inoltre, i clienti possono utilizzare sempre più i container anche per le applicazioni non appositamente progettate per utilizzare architetture basate su microservizi. In questi casi è possibile attuare una strategia di migrazione delle applicazioni esistenti che prevede solo modifiche minimali del codice dell’applicazione oppure modifiche alle configurazioni. Si tratta di modifiche strettamente necessarie per ottimizzare l’applicazione al fine di essere ospitata su soluzioni PaaS e CaaS.

Questa tecnica di migrazione viene solitamente utilizzata quando:

  • Si vuole sfruttare una base di codice esistente
  • La portabilità del codice è importante
  • L’applicazione può essere facilmente pacchettizzata per essere eseguita in ambiente Azure
  • L’applicazione deve essere più scalabile e deve esserci la possibilità di essere distribuita più velocemente
  • Si vuole promuovere l’agilità aziendale mediante un’innovazione continua adottando tecniche DevOps

Application repackage con Azure Migrate: App Containerization

Per facilitare questo processo di migrazione è possibile utilizzare la soluzione Azure Migrate che include molti strumenti e funzionalità, tra i quali il tool App Containerization. Tale strumento offre un approccio definito “point-and-containerize” per effettuare il “repackage” delle applicazioni utilizzando i container e apportando, solo se necessario, delle modifiche minimali al codice. Lo strumento attualmente supporta la containerizzazione di applicazioni ASP.NET e applicazioni Web Java in esecuzione su Apache Tomcat.

Figura 1 – Funzionalità di modernizzazione delle applicazioni adottando Azure Migrate: App Containerization

Lo strumento App Containerization consente di effettuare le seguenti attività:

  • Connettersi remotamente agli application server per rilevare le applicazioni e le relative configurazioni.
  • Parametrizzare le configurazioni e le dipendenze applicative, come ad esempio le stringhe di connessione ai database, per consentire di effettuare deployment consistenti e ripetibili.
  • Esternalizzare eventuali contenuti statici e gli stati archiviati sul file system, spostandoli su storage persistente.
  • Creare e pubblicare le immagini dei container usando Azure Container Registry.
  • Personalizzare e riutilizzare gli artefatti generati dagli strumenti come Dockerfile, le immagini dei container e i file di definizione delle risorse Kubernetes. Questo permette di integrali direttamente nella pipeline di continuous integration e continuous delivery (CI/CD).

Inoltre, in Azure Migrate: App Containerization è previsto l’utilizzo di Azure Key Vault per gestire i secret e l’integrazione automatica per effettuare il monitor delle applicazioni Java con Azure Application Insights.

Azure App Service vs Azure Kubernetes Service (AKS): quale scegliere?

App Containerization consente di migrare le applicazioni in container utilizzando Azure App Service oppure Azure Kubernetes Service (AKS). Nei paragrafi seguenti vengono riportate alcune considerazioni per valutare quale servizio è più idoneo per ospitare le proprie applicazioni.

Azure App Service: Azure Web App for Containers

Per carichi di lavoro web-based esiste la possibilità di far eseguire i container dagli Azure App Service, la piattaforma Azure di web hosting, utilizzando il servizio Azure Web App for Containers, con il vantaggio di poter sfruttare le metodologie di distribuzione, scalabilità e monitor intrinseche nella soluzione.

I task di automazione e gestione di un numero elevato di container e le modalità con le quali questi interagiscono applicativamente tra di loro è noto come orchestrazione. Nel caso quindi ci sia la necessità di orchestrare più containers è necessario adottare soluzioni più sofisticate come Azure Kubernetes Service (AKS).

Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) è il servizio Azure completamente gestito che permette l’attivazione di un cluster Kubernetes.

Kubernetes, conosciuto anche come “k8s”, provvede all’orchestrazione automatizzata dei container, migliorandone l’affidabilità e riducendo il tempo e le risorse necessarie in ambito DevOps. Kubernetes tende a semplificare i deployment, permettendo di eseguire automaticamente le implementazioni ed i rollback. Inoltre, permette di migliorare la gestione delle applicazioni e di monitorare lo stato dei servizi per evitare errori in fase di implementazione. Tra le varie funzionalità sono previsti controlli di integrità dei servizi, con la possibilità di riavviare i container che non sono in esecuzione oppure che risultano bloccati, permettendo di annunciare ai client solo i servizi correttamente avviati. Kubernetes permette inoltre di scalare automaticamente in base all’utilizzo ed esattamente come i container, permette di gestire in maniera dichiarativa l’ambiente cluster, consentendo una configurazione controllata a livello di versione e facilmente replicabile.

Figura 2 – Esempio di architettura a microservizi basata su Azure Kubernetes Service (AKS)

Passaggio successivo: innovare utilizzando soluzioni moderne per le applicazioni

La tecnica di migrazione descritta nei paragrafi precedenti spesso risulta anche il primo passo per intraprendere un’ulteriore modernizzazione dell’applicazione che comporta una riprogettazione. Infatti, lo step successivo consiste nel modificare oppure estendere l’architettura e la base di codice dell’applicazione esistente, andandola ad ottimizzare per la piattaforma cloud. Quando si integrano le moderne piattaforme applicative nella strategia di adozione del cloud, l’innovazione non si limita ai container. Questa integrazione offre una importante innovazione che comporta anche l’adozione di strategie ibride e multicloud.

Figura 3 – Innovazione data dalle piatteforme applicative moderne

Conclusioni

Esiste una tendenza chiara e in continua crescita che vede una modernizzazione degli applicativi rivolta a garantire una maggiore flessibilità, una riduzione del footprint dell’infrastruttura e la possibilità di beneficiare dell’innovazione data dal cloud. Questa modernizzazione non necessariamente deve passare fin da subito da una strategia di rebuild dell’applicazione da zero prevedendo l’utilizzo di tecnologie cloud-native, ma può avvenire in modo graduale. Grazie allo strumento App Containerization di Azure Migrate è possibile intraprendere il percorso di modernizzazione con un approccio semplice che consente di beneficare rapidamente delle potenzialità offerte dalle soluzioni cloud. Inoltre, la consapevolezza che Azure mette a disposizione diverse soluzioni di infrastruttura per ospitare le applicazioni moderne facilita il viaggio di modernizzazione degli applicativi.

Come aumentare la sicurezza delle architetture applicative basate su container

Le applicazioni moderne basate su microservizi sono sempre più diffuse ed i container sono un interessante elemento costitutivo per la creazione di architetture applicative agili, scalabili ed efficienti. I microservizi offrono grandi vantaggi, grazie alla presenza di modelli di progettazione software ben noti e collaudati che si possono applicare, ma generano anche nuove sfide. Una di queste è sicuramente legata alla sicurezza di queste architetture, che impongono l’adozione di soluzioni all’avanguardia per raggiungere un elevato livello di protezione. In questo articolo viene riportato come la soluzione nativa del cloud per la protezione dei container, chiamata Microsoft Defender for Containers, è in grado di garantire la protezione delle architetture applicative basate su container, offrendo capacità avanzate per la rilevazione e per rispondere alle minacce di sicurezza.

Funzionalità offerte dalla soluzione

Grazie a Microsoft Defender for Containers è possibile migliorare, monitorare e mantenere la sicurezza dei cluster, dei container e delle relative applicazioni. Infatti, tale piano consente di ottenere i seguenti benefici:

  • Hardening dell’ambiente
  • Scansione delle vulnerabilità
  • Run-time threat protection per l’ambiente cluster e per i nodi

Nei paragrafi seguenti vengono dettagliati i benefici sopra elencati.

Hardening dell’ambiente

Mediante una assessment continuo degli ambienti cluster, Defender for Containers fornisce una visibilità completa su eventuali configurazioni errate e sul rispetto delle linee guida. Tramite la generazione delle raccomandazioni aiuta a mitigare potenziali minacce di sicurezza.

Inoltre, grazie all’utilizzo del controllo di ammissione di Kubernetes è possibile garantire che tutte le configurazioni vengano fatte rispettando le best practice di sicurezza. Infatti, adottando le Azure Policy for Kubernetes si dispone di un bundle di raccomandazioni utili per proteggere i workload dei container Kubernetes. Di default, abilitando Defender for Containers, avviene automaticamente il provisioning di queste policy. In questo modo, ogni richiesta al server API di Kubernetes verrà monitorata rispetto al set predefinito di best practice, prima di essere resa effettiva sull’ambiente cluster. Si può pertanto adottare questo metodo per applicare le best practice ed imporle per i nuovi workload che saranno attivati.

Scansione delle vulnerabilità

Defender for Containers include un vulnerability scanner integrato per l’analisi delle immagini presenti in Azure Container Registry (ACR). Grazie a questo strumento di scansione è possibile effettuare una scansione approfondita delle immagini che avviene in tre momenti:

  • In caso di push: ogni volta che un’immagine viene inviata all’ACR, viene eseguita automaticamente la scansione.
  • In caso di estrazione recente: poiché ogni giorno vengono scoperte nuove vulnerabilità, viene analizza, con cadenza settimanale, anche qualsiasi immagine per la quale è stata fatta un’estrazione negli ultimi 30 giorni.
  • Durante l’importazione: Azure Container Registry dispone di strumenti di importazione per far confluire le immagini al suo interno provenienti da Docker Hub, Microsoft Container Registry oppure da altri ACR. Tutte le immagini importate vengono prontamente analizzate dalla soluzione.

Nel caso vengano rilevate delle vulnerabilità sarà generata una notifica nella dashboard di Microsoft Defender for Cloud. Questo alert sarà accompagnato da una classificazione di gravità e da indicazioni pratiche su come è possibile correggere le specifiche vulnerabilità rilevate in ciascuna immagine.

Inoltre, Defender for Containers espande queste funzionalità di scansione introducendo la possibilità di ottenere una visibilità sulle immagini in esecuzione. Mediante la nuova raccomandazione, denominata “Vulnerabilities in running images should be remediated (powered by Qualys)”, raggruppa le immagini in esecuzione che presentano vulnerabilità, fornendo i dettagli sui problemi rilevati e su come risolverli.

Run-time threat protection per l’ambiente cluster e per i nodi

Microsoft Defender for Containers è in grado di fornire una protezione dalle minacce in tempo reale per gli ambienti containerizzati e genera avvisi nel caso vengano rilevate minacce oppure attività dannose, sia a livello di host che a livello di cluster AKS.

La protezione da minacce di sicurezza avviene a diversi livelli:

  • Cluster level: a livello cluster, la protezione dalle minacce si basa sull’analisi degli audit logs di Kubernetes. Si tratta di un monitor che permette di generare alert, monitorando i servizi gestiti di AKS, come ad esempio la presenza di dashboard Kubernetes esposte e la creazione di ruoli con privilegi elevati. Per consultare la lista completa degli alert generati da questa protezione è possibile accedere a questo link.
  • Host level: con oltre sessanta tipologie di analisi, mediante algoritmi di intelligenza artificiale e con la rilevazione delle anomalie sui workload in esecuzione la soluzione è in grado di rilevare attività sospette. Un team di ricercatori Microsoft sulla sicurezza monitora costantemente il panorama delle minacce e vengono aggiunti alert e vulnerabilità specifici sui container man mano che vengono scoperti. Inoltre, questa soluzione monitora la crescente superficie di attacco delle implementazioni Kubernetes multi-cloud e tiene traccia della matrice MITRE ATT&CK per i container, un framework sviluppato dal Center for Threat-Informed Defense in stretta collaborazione con Microsoft e altri esponenti.

La lista completa degli alert che si possono attenere abilitando questa protezione è consultabile in questo documento.

Architetture per i differenti ambienti Kubernetes

Defender for Containers è in grado di proteggere i cluster Kubernetes indipendentemente dal fatto che siano in esecuzione su Azure Kubernetes Service, Kubernetes on-premise/IaaS oppure Amazon EKS.

Azure Kubernetes Service (AKS) Cluster

Quando si abilita la protezione di Defender for Cloud per i cluster attivati mediante il servizio Azure Kubernetes (AKS), la raccolta degli audit log avviene senza dover installare degli agenti. Il profilo Defender, distribuito su ciascun nodo, fornisce la protezione runtime e raccoglie i segnali dai nodi utilizzando la tecnologia eBPF. Il componente Azure Policy add-on for Kubernetes raccoglie le configurazioni dei cluster e dei workload, come spiegato nei paragrafi precedenti.

Figura 1 – Architettura di Defender for Cloud per i cluster AKS

Azure Arc-enabled Kubernetes

Per tutti i cluster ospitati al di fuori di Azure è necessario adottare la soluzione Azure Arc-enabled Kubernetes per connettere i cluster ad Azure e fornire i relativi servizi, come Defender for Containers. Connettendo i cluster Kubernetes ad Azure, un’estensione Arc raccoglie gli audit log di Kubernetes da tutti i nodi del control plane del cluster e li invia nel cloud al back-end di Microsoft Defender for Cloud per ulteriori analisi. L’estensione viene registrata con un workspace di Log Analytics usato come pipeline di dati, ma i dati di audit non vengono archiviati in Log Analytics. Le informazioni sulle configurazioni dei workload vengono gestite dal componente aggiuntivo delle Azure Policy.

Figura 2 – Architettura di Defender for Cloud per i cluster Kubernetes Arc-enabled

Amazon Elastic Kubernetes Service (Amazon EKS)

Anche per questa tipologia di cluster, attivati in ambiente AWS, è necessario adottare Azure Arc-enabled Kubernetes per poterli proiettare in ambiente Azure. Inoltre, è necessario connettere l’account AWS a Microsoft Defender for Cloud. Risultano pertanto necessari i piani Defender for Containers e CSPM (per il monitor delle configurazioni e per le raccomandazioni).

Un cluster basato su EKS, Arc e l’estensione di Defender sono i componenti necessari per:

  • raccogliere i dati di policy e delle configurazioni dai nodi del cluster;
  • ottenere una protezione runtime.

L’Azure Policy add-on for Kubernetes colleziona le configurazioni dell’ambiente cluster e dei workload per garantire che tutte le configurazioni vengano rispettate. Inoltre, la soluzione AWS CloudWatch viene utilizzata per collezionare i dati di log dal Control plane.

Figura 3 – Architettura di Defender for Cloud per i cluster AWS EKS

Aggiornamento e costi della soluzione

Questo piano di Microsoft Defender unisce e sostituisce due piani esistenti, “Defender for Kubernetes” e “Defender for Container Registries“, fornendo funzionalità nuove e migliorate, senza deprecare nessuna delle funzionalità di tali piani. Le sottoscrizioni sulle quali sono stati attivati i piani precedenti non devono necessariamente essere aggiornate al nuovo piano Microsoft Defender for Containers. Tuttavia, per trarre vantaggio dalle nuove e migliorate funzionalità, devono essere aggiornate e per farlo è possibile utilizzare nel portale Azure l’icona di aggiornamento visualizzata accanto a loro.

L’attivazione di questi piani di protezione sono soggetti a costi specifici che possono essere calcolati utilizzando lo strumento Azure Pricing calculator. In particolare, il costo di Microsoft Defender for Containers viene calcolato sul numero di core delle VMs che compongono il cluster AKS. Questo prezzo include anche 20 scansioni gratuite per vCore, ed il conteggio sarà basato sul consumo del mese precedente. Ogni scansione aggiuntiva ha un costo di addebito, ma la maggior parte dei clienti non dovrebbe sostenere alcun costo aggiuntivo per la scansione delle immagini.

Conclusioni

Le architetture basate su microservizi consentono di scalare facilmente e di sviluppare le applicazioni in modo più rapido e semplice, permettendo di promuovere l’innovazione e accelerare il time-to-market di nuove funzionalità. La presenza di una soluzione come Microsoft Defender for Containers è fondamentale per consentire un adeguato livello di protezione per quanto riguarda le minacce di sicurezza, sempre più evolute per attaccare queste tipologie di architetture applicative.

Azure Kubernetes Service in ambiente Azure Stack HCI

La soluzione hyper-converged Azure Stack HCI permette di attivare in ambiente on-premises l’orchestratore Azure Kubernetes Service (AKS) per l’esecuzione di applicazioni containerizzate su larga scala. In questo articolo viene approfondito come Azure Kubernetes in ambiente Azure Stack HCI offre la possibilità di ospitare nel proprio datacenter container Linux e Windows, andando ad esplorare i principali benefici di questa soluzione.

Prima di entrare nello specifico di AKS in ambiente Azure Stack si riporta un riepilogo delle soluzioni coinvolte.

Che cos’è Kubernetes?

Kubernetes, conosciuto anche come “k8s”, provvede all’orchestrazione automatizzata dei container, migliorandone l’affidabilità e riducendo il tempo e le risorse necessarie in ambito DevOps, mediante:

  • Deployment tendenzialmente più semplici che permettono di eseguire implementazioni e rollback in modo automatico.
  • Migliore gestione delle applicazioni con la possibilità di monitorare lo stato dei servizi per evitare errori in fase di implementazione. Infatti, tra le varie funzionalità sono previsti controlli di integrità dei servizi, con la possibilità di riavviare i container che non sono in esecuzione oppure che risultano bloccati, permettendo di annunciare ai client solo i servizi correttamente avviati.
  • Possibilità di scalare automaticamente in base all’utilizzo e, esattamente come per i container, gestire in maniera dichiarativa l’ambiente cluster, consentendo una configurazione controllata a livello di versione e facilmente replicabile.

Figura 1 – Cluster Kubernetes con i relativi componenti dell’architettura

Che cos’è Azure Kubernetes Service (AKS)?

Azure Kubernetes Service (AKS) è il servizio Azure completamente gestito che permette l’attivazione di un cluster Kubernetes, ideale per semplificare il deployment e la gestione di architetture basate su microservizi. Grazie alle funzionalità offerte da AKS è possibile scalare automaticamente in base all’utilizzo, utilizzare controlli per garantire l’integrità dei servizi, implementare politiche di bilanciamento del carico e gestire i secret. L’utilizzo di questo servizio gestito viene integrato con le pipeline di sviluppo e di deployment dei container.

Figura 2 – Esempio di architettura di Azure Kubernetes Service (AKS)

Che cos’è Azure Stack HCI?

Azure Stack HCI è la soluzione che permette di realizzare una infrastruttura hyper-converged (HCI) per l’esecuzione di workloads in ambiente on-premises e che prevede una connessione strategica ai servizi di Azure. Si tratta di una infrastruttura hyper-converged (HCI), dove vengono rimossi diversi componenti hardware, sostituti dal software, in grado di unire i layer di elaborazione, storage e rete in un’unica soluzione. In questo modo si ha un passaggio da una tradizionale infrastruttura “three tier”, composta da switch di rete, appliance, sistemi fisici con a bordo hypervisor, storage fabric e SAN, verso infrastrutture hyper-converged (HCI).

Figura 3 – “Three Tier” Infrastructure vs Hyper-Converged Infrastructure (HCI)

Che cos’è AKS in Azure Stack HCI?

AKS in ambiente Azure Stack HCI è un’implementazione Microsoft di AKS, che consente di automatizzare la distribuzione e la gestione delle applicazioni containerizzate.

Microsoft, dopo aver introdotto AKS come servizio in Azure, ha esteso la sua disponibilità anche agli ambienti on-premises. Tuttavia, ci sono alcune importanti differenze:

  • In Azure, Microsoft gestisce il control plane di ogni cluster AKS. Inoltre, i nodi del cluster (management node e worker node) vengono eseguiti su macchine virtuali Azure oppure su virtual machine scale set di Azure.
  • In ambiente on-premises, il cliente gestisce l’intero ambiente, dove i nodi del cluster AKS sono in esecuzione su macchine virtuali ospitate sull’infrastruttura hyper-converged.

Architettura di AKS su Azure Stack HCI

L’implementazione di AKS in Azure Stack HCI è costituita da due tipologie di cluster:

  • Un cluster di management di AKS. Questo cluster funge da control plane dedicato per la gestione dei cluster Kubernetes in esecuzione sulla piattaforma hyper-converged. Tale cluster è costituito da macchine virtuali Linux, che ospitano componenti di sistema Kubernetes come API server e load balancer.
  • Uno o più cluster Kubernetes. Questi cluster sono costituiti dai control node e dai worker node. I control node sono implementati come macchine virtuali Linux, con API server e load balancer che soddisfano le richieste degli utenti di Azure Stack HCI. I workload sono distribuiti sui worker node basati su sistema operativo Linux oppure Windows.

Figura 4 – Architettura di AKS su Azure Stack HCI

Ogni cluster Kubernetes viene eseguito sul proprio set dedicato di macchine virtuali, protette dall’isolamento basato su Hypervisor, consentendo di condividere in modo sicuro la stessa infrastruttura fisica anche in scenari che richiedono l’isolamento dei workload.

AKS in Azure Stack HCI supporta sia i container basati su Linux sia i container basati su Windows. Quando si crea un cluster Kubernetes si deve semplicemente specificare la tipologia di container che si intende eseguire e sulla piattaforma hyper-converged viene avviata automaticamente la procedura di installazione del sistema operativo richiesto sui nodi del cluster Kubernetes.

Vantaggi di AKS su Azure Stack HCI

AKS semplifica la distribuzione dei cluster Kubernetes fornendo un livello di astrazione in grado di mascherare alcuni dei dettagli di implementazione più impegnativi.

Tra i principali benefici di AKS in ambiente Azure Stack HCI troviamo:

  • Deployment semplificati di app containerizzate in ambiente cluster. Mediante l’utilizzo di Windows Admin Center si ha un processo guidato di installazione del cluster di management di AKS. Windows Admin Center facilita inoltre l’installazione di singoli cluster Kubernetes che contengono i worker node, mediante un processo di installazione automatico di tutti i componenti software rilevanti, inclusi gli strumenti di gestione come kubectl.
  • Possibilità di scalare orizzontalmente per gestire le risorse computazionali, aggiungendo o rimuovendo nodi del cluster Kubernetes.
  • Gestione semplificata dello storage e delle configurazioni di rete delle risorse cluster.
  • Aggiornamenti automatici dei nodi del cluster all’ultima versione di Kubernetes disponibile. Microsoft gestisce le immagini Windows Server e Linux per i nodi del cluster e le aggiorna mensilmente.
  • Connessione strategica, mediante Azure Arc, ai servizi Azure come: Microsoft Azure Monitor, Azure Policy, e Azure Role-Based Access Control (RBAC).
  • Gestione centralizzata dei cluster Kubernetes e dei relativi carichi di lavoro tramite il portale Azure, grazie all’adozione di Azure Arc for Kubernetes. La gestione basata sul portale di Azure integra anche gli strumenti e le interfacce di amministrazione Kubernetes tradizionali, come l’utility da riga di comando kubectl e le dashboard Kubernetes.
  • Gestione del failover automatico delle macchine virtuali che fungono da nodi del cluster Kubernetes se si verifica un errore localizzato dei componenti fisici sottostanti. Ciò integra l’elevata disponibilità intrinseca in Kubernetes, in grado di riavviare automaticamente i conteiner in stato failed.

Conclusioni

Grazie ad Azure Stack HCI l’adozione di architetture applicative basate su container possono essere ospitate direttamente presso il proprio datacenter, adottando la stessa esperienza di gestione di Kubernetes che si ha con il servizio gestito presente nel cloud pubblico di Azure. Anche il processo di deployment risulta molta semplificato ed intuitivo. Inoltre, Azure Stack HCI permette di migliorare ulteriormente l’agilità e la resilienza delle distribuzioni Kubernetes in ambiente on-premises.