Automatizzare la riconfigurazione dell'infrastruttura con Azure

Istanze di Azure Container
Gateway applicazione di Azure
Funzioni di Azure
Monitoraggio di Azure

Si fa spesso ricorso alla containerizzazione ai fini della modernizzazione delle app. Un approccio valido può essere l'uso del servizio Azure Kubernetes per carichi di lavoro avanzati e l'uso di Istanze di Azure Container per carichi di lavoro di contenitori semplici, ad esempio una semplice applicazione Web. Questo articolo descrive l'implementazione dell'automazione serverless a livello di infrastruttura per Istanze di Container quando il gateway applicazione viene usato come firewall.

Si inizierà con uno scenario comune. Per proteggere le istanze di Azure Container, è possibile usare gruppi di contenitori in Istanze di Azure Container. Usando gruppi di contenitori, è possibile distribuire istanze di Azure Container in una rete virtuale in modo che i contenitori possano accedere ad altre risorse private o ad altri servizi di Azure tramite un endpoint privato di Azure. I clienti che ospitano applicazioni Web usano generalmente un web application firewall, come il gateway applicazione di Azure, per gestire il traffico in ingresso e Istanze di Azure Container come pool back-end. Un ottimo punto di partenza in proposito è l'articolo Esporre un indirizzo IP statico per un gruppo di contenitori.

Una potenziale sfida legata a questo approccio è l'uso di un indirizzo IP privato non statico come pool back-end. L'IP privato potrebbe essere ruotato durante la manutenzione, cosa che richiederebbe all'amministratore del cloud di riconfigurare manualmente il pool back-end. Se vengono aggiunti nuovi contenitori per il ridimensionamento, l'amministratore dovrà anche eseguire la riconfigurazione per assicurarsi che il traffico sia instradato al pool back-end corretto. I probe di attività e i probe di idoneità non sono supportati nei gruppi di contenitori, che rendono più difficile identificare i tempi di inattività del carico di lavoro.

Questo articolo illustra i miglioramenti implementati per risolvere questi problemi comuni tramite l'adozione di Application Insights e Monitoraggio di Azure per il monitoraggio e l'uso di Funzioni di Azure per eseguire la rotazione automatica degli indirizzi IP privati. Questo approccio migliora la ridondanza del carico di lavoro.

Potenziali casi d'uso

Questa architettura è ideale per:

  • Distribuzione serverless.
  • Operazioni minime per un carico di lavoro nativo del cloud con automazione.
  • Carico di lavoro di contenitori semplice che non richiede l'orchestrazione avanzata dei contenitori.
  • Carico di lavoro con ridondanza elevata e rivolto all'esterno con riconfigurazione automatica.
  • Carico di lavoro di contenitori che richiede l'accesso a risorse private, come quelle esposte da endpoint privati di Azure.

Architettura

Diagramma di flusso che mostra l'accesso ad Azure Cosmos DB da un endpoint privato per Istanze di Azure Container. Viene anteriore dal gateway di app Azure lication.

Scaricare un file di Visio di questa architettura.

Flusso di dati

Parte 1: flusso di traffico tipico delle applicazioni Web

1a. Il gateway applicazione include la funzionalità web application firewall, ideale per controllare il traffico pubblico prima che raggiunga il carico di lavoro back-end. Il gateway applicazione espone l'indirizzo IP pubblico, quindi Protezione DDoS di Azure fornisce un altro livello di protezione.

1b. Il pool back-end del gateway applicazione è configurato con l'indirizzo IP privato dell'istanza di Azure Container in un gruppo di contenitori. Le istanze di Azure Container nei gruppi di contenitori non hanno nomi di dominio completi (FQDN), quindi è necessario usare l'indirizzo IP.

1c. I contenitori in Istanze di Azure Container possono utilizzare risorse private, ad esempio Azure Cosmos DB, tramite collegamenti privati.

Parte 2: miglioramenti tramite l'automazione

2a. Il gateway applicazione include una metrica del numero di host integri che è possibile usare come probe di attività per le istanze di Azure Container, dato che i gruppi di contenitori in Istanze di Container non supportano i probe di attività o idoneità.

2b. Application Insights viene usato nei contenitori per raccogliere altre metriche, tra cui i battiti cardiaci, che possono essere inviati ad Application Insights per il monitoraggio tramite un thread personalizzato.

2c. È possibile configurare gli avvisi in base ai livelli di soglia definiti nei passaggi 2a e 2b. Supponendo ad esempio che nel sistema siano in esecuzione tre istanze di contenitore come pool back-end, si potrebbe configurare un avviso che venga attivato quando il numero di host integri è inferiore a 3. In un gruppo di azioni di regole di avviso è possibile usare una funzione di Azure come tipo di azione per attivare l'azione personalizzata.

2d. Nella funzione di Azure viene usato un SDK di Azure per ottenere la configurazione delle istanze di contenitore esistenti e creare di nuovo le stesse istanze. Questa funzione viene attivata dall'avviso definito nel passaggio 2c. L'esecuzione di questa funzione potrebbe richiedere molto tempo, a seconda della complessità della configurazione. Le funzioni di Azure possono raggiungere il timeout, quindi è possibile usare Azure Durable Functions per gestire i processi a esecuzione prolungata e ottenere gli aggiornamenti dello stato.

Componenti

Automazione

  • Azure Durable Functions: a differenza di Funzioni di Azure, Durable Functions è con stato e supporta diversi modelli di flusso di lavoro con stato. In questo esempio viene usato il modello di monitoraggio.
  • SDK di Azure: gli SDK di Azure sono raccolte di librerie che possono essere usate per interagire con i servizi di Azure nel linguaggio di programmazione preferito. Gli SDK offrono maggiore flessibilità per l'integrazione della logica che esegue l'automazione.

Monitoraggio

  • Metriche di Monitoraggio di Azure: questa funzionalità di Monitoraggio di Azure raccoglie dati numerici predefiniti dai servizi di Azure.
  • Gruppi di azioni: un gruppo di azioni è una raccolta delle preferenze di notifica definite dal proprietario della risorsa. È possibile definire canali di notifica e azioni in base agli avvisi attivati.

Rete

  • Protezione DDoS di Azure: Protezione DDoS di Azure (Basic) è gratuita e abilitata in tutti gli INDIRIZZI IP pubblici. Protezione di rete DDoS di Azure offre altre funzionalità, ad esempio l'inserimento di log in altre posizioni e la possibilità di coinvolgere il team di risposta rapida di Protezione DDoS.
  • Gateway applicazione di Azure: Web application firewall di Azure protegge le applicazioni pubbliche da exploit come attacchi SQL injection e XSS.
  • Collegamento privato di Azure: il servizio di collegamento privato di Azure fornisce l'accesso ai servizi PaaS di Azure tramite un endpoint privato sulla backbone Microsoft per rafforzare ulteriormente la sicurezza degli accessi alla rete.

Applicazione

  • Istanze di Azure Container: Istanze di Azure Container esegue le immagini del contenitore senza richiedere la configurazione di un'altra infrastruttura. Per l'orchestrazione avanzata dei contenitori, è consigliabile prendere in considerazione il servizio Azure Kubernetes.
  • Azure Cosmos DB: Azure Cosmos DB è un database NoSQL completamente gestito che supporta più piattaforme, ad esempio SQL, Cassandra e MongoDB.
  • Azure Key Vault: come procedura consigliata per la sicurezza, gli sviluppatori non archiviano le stringhe di connessione come testo non crittografato nel codice sorgente dell'applicazione. Azure Key Vault funge da posizione centrale in cui archiviare i segreti con un maggiore livello di sicurezza. Le applicazioni possono recuperare le chiavi necessarie con una migliore sicurezza.

Alternative

Lo scenario descritto in precedenza aggiorna un pool back-end per il gateway applicazione. In alternativa si potrebbe usare una zona DNS privato di Azure come back-end di destinazione per il gateway applicazione e usare Funzioni di Azure per aggiornare un record invece di apportare modifiche nel gateway applicazione. Questa alternativa ridurrebbe i tempi di distribuzione. D'altra parte, le metriche del gateway applicazione non sarebbero in grado di identificare il numero di host perché verrebbe astratto dal DNS. Questa automazione dovrebbe pertanto essere attivata direttamente tramite una soluzione di monitoraggio delle applicazioni come Application Insights o Monitoraggio di Azure.

Azure offre più opzioni per l'hosting di carichi di lavoro basati su contenitori, come il servizio Azure Kubernetes e il Servizio app di Azure.

Il servizio Azure Kubernetes offre funzionalità avanzate di orchestrazione dei contenitori e di rete, ad esempio la risorsa Service, che non è disponibile in Istanze di Container. Questa architettura di riferimento soddisfa questo requisito.

Il servizio app può ospitare anche carichi di lavoro di contenitori, mentre l'ambiente del servizio app consente agli sviluppatori di distribuire il servizio app nella rete virtuale di Azure. La struttura dei prezzi di Istanze di Container, rispetto al servizio app, lo rende interessante per carichi di lavoro di piccole dimensioni.

Considerazioni

Disponibilità

Poiché i probe di attività e idoneità non sono supportati nei gruppi di contenitori, è consigliabile usare le metriche di Monitoraggio di Azure e Azure Application Insights per il monitoraggio. L'integrità e il tempo di attività dei contenitori non sono approcci deterministici per verificare il funzionamento end-to-end di un sistema.

Operazioni

Azure Durable Functions viene usato per riconfigurare l'infrastruttura in caso di errore in Istanze di Container o se l'IP privato di un gruppo di contenitori cambia. Come illustrato nella documentazione, il processo di provisioning impiega leggermente più tempo. Gli utenti potrebbero osservare tempi di inattività minimi se i contenitori non sono pronti in tempo.

Questa architettura aggiunge un livello di resilienza, ma è comunque consigliabile configurare il monitoraggio nell'applicazione e monitorare lo stato di Azure per individuare errori della piattaforma.

Scalabilità

I requisiti di CPU e memoria vengono definiti al momento della creazione dei contenitori, quindi non sarà possibile eseguire direttamente il ridimensionamento verticale. È possibile aggiungere contenitori al gruppo di contenitori ai fini della scalabilità orizzontale. Si noti però che ogni contenitore nel gruppo di contenitori utilizzerà un indirizzo IP privato, quindi il limite sarà la dimensione della subnet di cui è stato effettuato il provisioning.

Un'altra considerazione importante per il ridimensionamento è lo stato dell'applicazione. L'applicazione deve gestire lo stato, in locale o tramite servizi esterni come la cache di Azure per Redis, per garantire che il ridimensionamento su richiesta non provochi la perdita di dati nell'applicazione.

Sicurezza

La possibilità di distribuire PaaS in una rete virtuale (inserimento della rete virtuale) non migliora la sicurezza se la configurazione non è corretta. L'inserimento della rete virtuale offre agli amministratori un maggiore controllo della rete, con vantaggi quali gruppi di sicurezza di rete più rigidi e l'uso di risorse non esposte pubblicamente.

Il servizio Collegamento privato proietta nella rete virtuale un endpoint privato che consente all'applicazione di accedere ad Azure PaaS direttamente tramite un indirizzo IP privato. Allo stesso tempo, gli amministratori possono controllare ulteriormente chi può accedere alla piattaforma distribuita come servizio di Azure pertinente.

Se si archiviano immagini dei contenitori in Registro Azure Container, è possibile abilitare Microsoft Defender per i registri contenitori per eseguire analisi delle vulnerabilità di tali immagini.

Distribuire lo scenario

Il codice sorgente di esempio, con Funzioni di Azure che esegue l'automazione, è disponibile su GitHub.

Sarà necessaria un'entità servizio (ID client e segreto), che verrà usata da Funzioni di Azure per eseguire le operazioni di Azure Resource Manager. Questa entità servizio richiede almeno i diritti di proprietario nel gruppo di risorse per poter aggiornare il gateway applicazione e creare istanze di Azure Container. L'esempio crea una semplice applicazione Python, aggiunta a un contenitore e archiviata in Registro Container. Aggiornare il registro con l'applicazione in uso.

Prezzi

Per stimare i costi per le risorse di Azure, usare il Calcolatore prezzi di Azure.

Vedere questo esempio dell'implementazione precedente.

Collaboratori

Questo articolo viene gestito da Microsoft. Originariamente è stato scritto dai seguenti contributori.

Autore principale:

Passaggi successivi

Esplorare le architetture di Azure:

Informazioni correlate: