Istio

menu icon

Istio

Scopri di più su Istio, una tecnologia open source che fornisce agli sviluppatori un modo per connettere, gestire e proteggere senza interruzioni le reti di vari microservizi.

Cos'è Istio?

Istio è un livello di service-mesh open source configurabile che connette, monitora e protegge i contenitori in un cluster Kubernetes. Attualmente, Istio è compatibile nativamente solo con Kubernetes, ma la sua natura open source permette a chiunque di scrivere estensioni che abilitano l'esecuzione di Istio su qualsiasi software cluster. Oggi ci concentreremo sull'uso di Istio con Kubernetes, il suo caso d'uso più diffuso.

Kubernetes è uno strumento di orchestrazione dei contenitori e un'unità core di Kubernetes è un nodo. Un nodo è costituito da uno o più contenitori, insieme a file system o altri componenti. Un'architettura di microservizi potrebbe includere una dozzina di nodi diversi e ognuno rappresenta microservizi diversi. Kubernetes gestisce la disponibilità e l'uso delle risorse dei nodi, aggiungendo i pod se la domanda aumenta con pod autoscaler. Istio immette ulteriori contenitori nel pod per aggiungere sicurezza, gestione e monitoraggio.

Poiché è open source, Istio può essere eseguito su qualsiasi provider di cloud pubblico che lo supporta e su qualsiasi cloud privato.

Nel seguente video vengono descritte le nozioni base di Istio (5:13):

La service mesh di rete

Quando le organizzazioni si spostano ai microservizi, devono supportare decine o centinaia di applicazioni specifiche. Gestire separatamente gli endpoint significa supportare un gran numero di macchine virtuali o VM, inclusa la domanda. Software cluster come Kubernetes possono creare i pod e scalarli, ma Kubernetes non fornisce routing, regole del traffico o strumenti di monitoraggio o debug affidabili.

Inserire la service mesh.

Con l'aumentare del numero dei servizi crescono esponenzialmente anche le modalità potenziali di comunicazione. Due servizi hanno solo due percorsi di comunicazione. Tre servizi ne hanno sei, mentre 10 servizi ne hanno 90. Una service mesh fornisce un unico modo per configurare questi percorsi di comunicazione creando una politica per la comunicazione.

Una service mesh gestisce i servizi e indirizza il traffico delle comunicazioni secondo una configurazione predefinita. Ciò significa che invece di configurare un contenitore in esecuzione (o di scrivere il codice per farlo), un amministratore può fornire la configurazione alla service mesh, in modo che funzioni correttamente. Ciò in precedenza era necessario con i server web e la comunicazione service-to-service.

Il modo più comune per raggiungere questo obiettivo in un cluster è quello di utilizzare il modello sidecar. Un sidecar è un nuovo contenitore, all'interno del pod, che instrada e osserva il traffico delle comunicazioni tra servizi e contenitori.

Istio e Kubernetes

Come accennato in precedenza, Istio è basato su Kubernetes e aggiunge contenitori sostanzialmente invisibili al programmatore e all'amministratore. Chiamati contenitori "sidecar", questi agiscono da "tramite", gestendo il traffico e monitorando le interazioni tra i componenti. Le due soluzioni si integrano in tre modi: configurazione, monitoraggio e gestione.

Configurazione

Il metodo principale per impostare la configurazione con Kubernetes è il comando kubectl, comunemente "kubectl -f <filename>", dove il file è un file YAML. Gli utenti Istio possono eseguire nuovi e diversi tipi di file YAML con kubectl oppure utilizzare il nuovo comando ioctl opzionale.

Monitoraggio

Con Istio puoi facilmente monitorare l'integrità delle tue applicazioni in esecuzione con Kubernetes. Gli strumenti di Istio permettono di gestire e visualizzare l'integrità delle applicazioni, fornendo più insight rispetto al semplice monitoraggio generale di cluster e nodi fornito da Kubernetes.

Gestione

Poiché l'interfaccia di Istio è essenzialmente la stessa di Kubernetes, per gestirla non sono richieste ulteriori competenze. Infatti, Istio consente all'utente di creare politiche che influenzano e gestiscono l'intero cluster Kubernetes, riducendo il tempo di gestione di ogni cluster ed eliminando al contempo la necessità di un codice di gestione personalizzato.

Vantaggi

I principali vantaggi di una service mesh includono funzionalità di debug migliorate, monitoraggio, instradamento, sicurezza e utilizzo. Istio richiederà quindi meno tempo per gestire un gruppo di servizi più ampio.

Debug migliorato

Diciamo, ad esempio, che un servizio abbia più dipendenze. Il servizio pay_claim di una compagnia di assicurazioni richiama il servizio deductible_amt, che richiama il servizio is_member_covered, e così via. Una catena di dipendenze complessa potrebbe avere 10 o 12 chiamate di servizi. In caso di errore di uno di questi 12 servizi, si verificherà una serie di errori a cascata che causerà un errore di tipo 500, 400 o forse di mancata risposta.

Per effettuare il debug di questo set di chiamate è possibile utilizzare una traccia di stack. Sul frontend, gli sviluppatori lato client possono visualizzare quali elementi vengono rifiutati dai server web, in quale ordine, ed esaminarli. I programmatori di frontend possono accedere a un diagramma a cascata per semplificare il debug.

Quello che l'esempio non mostra è cosa succede all'interno del data center - come il callback =parselLotamaAudiences richiama altri quattro servizi web e quali rispondono più lentamente. In seguito vedremo come Istio fornisca strumenti per tracciare le chiamate delle funzioni in un diagramma molto simile a questo.

Monitoraggio e osservabilità

I team DevOps e l'amministrazione IT possono avere la necessità di osservare il traffico per esaminare la latenza, il time-in-service, gli errori come percentuale di traffico e così via. Spesso necessitano di un dashboard. Un dashboard fornisce una visualizzazione della somma o della media delle metriche temporali - a volte con la possibilità di eseguire il "drill down" di uno specifico nodo, servizio o pod. Kubernetes non fornisce nativamente questa funzionalità.

Politiche

Per impostazione predefinita, Kubernetes consente a ogni pod di inviare il traffico a ogni altro pod. Istio consente agli amministratori di creare una politica per limitare i servizi che possono interagire tra loro. Così, ad esempio, i servizi possono richiamare solo altri servizi con dipendenze reali. Un'altra politica per mantenere aggiornati i servizi è un limite percentuale, che impedirà al traffico in eccesso di bloccare un servizio e bloccherà gli attacchi DoS (Denail of Service).

Routing e bilanciamento del carico

Per impostazione predefinita, Kubernetes fornisce il bilanciamento del carico round-robin. Sono disponibili sei pod che forniscono un microservizio, Kubernetes fornirà una funzione di bilanciamento del carico, o "servizio", che invia richieste a ogni pod in ordine crescente e ciclico. Ma a volte un'azienda implementa diverse versioni dello stesso servizio in produzione.

L'esempio più semplice è il deployment blue green. In questo caso, il software può progettare una versione completamente nuova dell'applicazione in produzione senza inviarla agli utenti di produzione. Una volta promossa la nuova versione, l'azienda può mantenere i vecchi server in funzione per accelerare lo switchback in caso di errore.

Con Istio, questa operazione è semplice come acquisire i tag in un file di configurazione. Gli amministratori possono anche utilizzare le etichette per indicare a quale tipo di servizio connettersi e sviluppare le regole in base alle intestazioni. Così, ad esempio, gli utenti beta possono instradare un pod "canary" con la build migliore e più recente, mentre gli utenti regolari possono utilizzare la build di produzione stabile.

Interruzione del circuito

Se un servizio è sovraccarico o indisponibile, le richieste aggiuntive avranno esito negativo e continueranno a sovraccaricare il sistema. Poiché Istio tiene traccia di errori e ritardi, può forzare una pausa - consentendo il ripristino di un servizio - dopo un numero specifico di richieste impostato dalla politica. È possibile far rispettare questa politica in tutto il cluster creando un piccolo file di testo e specificando di utilizzarla come nuova politica in Istio.

Sicurezza

Istio fornisce identità, politiche e crittografia per impostazione predefinita, oltre alle funzioni AAA (Authentication, Authorization, Audit). Eventuali pod gestiti che comunicano tra loro utilizzeranno il traffico codificato, impedendo qualsiasi intrusione. Il servizio di identità, unito alla crittografia, assicura che nessun utente non autorizzato possa eseguire chiamate di servizio "fake" o "spoof". AAA fornisce ai professionisti della sicurezza e delle operazioni gli strumenti necessari per attività di monitoraggio meno sovraccariche.

Amministrazione semplificata

Le applicazioni tradizionali richiedono ancora le funzioni di identificazione, creazione delle politiche e sicurezza offerte da Istio. Ciò ha portato i programmatori e gli amministratori a utilizzare un livello di astrazione errato, reimplementando le stesse regole di sicurezza più volte per ogni servizio. Istio permette di utilizzare le corrette politiche di impostazione dei livelli per il cluster attraverso un unico pannello di controllo. Allo stesso tempo, con il controllo accessi di Istio, i dashboard e gli strumenti di debug descritti di seguito, è possibile aggiungere facilmente un plugin alla riga di comando, invece di accedere a una pagina web.

Esempi

Visualizza i servizi

Istio 1.1 include un nuovo componente aggiuntivo denominato Kiali che fornisce una visualizzazione basata sul web. Puoi utilizzarlo per tenere traccia delle richieste di servizio, analizzare i dettagli o esportare la cronologia delle richieste di servizio in un file JSON, per eseguire query e formattazioni desiderate. Il grafico del carico di lavoro riportato di seguito offre un grafico delle dipendenza generato in tempo reale in base ai servizi che effettivamente dipendono l'uno dall'altro. Viene generato da effettive osservazioni del traffico.

Immagine del nuovo componente aggiuntivo chiamato Kiali che consente una visualizzazione basata sul web

Traccia le chiamate di servizio

Il servizio Jaeger, un componente di Istio, fornisce il tracciamento di qualsiasi servizio fornito. In questo esempio abbiamo tracciato la pagina del prodotto. Il tratteggio continuo nella prima immagine rappresenta una chiamata di servizio. Facendo clic su un punto, possiamo "eseguire il drill down" nel diagramma a cascata per seguire le esatte richieste e risposte dei servizi.

Immagine del servizio Jaeger, un componente di Istio, che consente il tracciamento per qualsiasi servizio fornito.  In questo esempio abbiamo tracciato la pagina del prodotto.  Ogni puntino nella prima immagine rappresenta una richiesta di servizio.

Possiamo anche osservare più nel dettaglio la pagina del prodotto. Possiamo comprendere che gli errori sono presenti nella pagina del prodotto stesso, con i dettagli restituiti correttamente.

Immagine della pagina del prodotto.  Possiamo comprendere che gli errori sono presenti nella pagina del prodotto stesso, con i dettagli restituiti correttamente.

Dashboard

Istio include numerosi dashboard (predefiniti) per monitorare l'integrità e le prestazioni del sistema. Questi dashboard possono misurare l'utilizzo della CPU e della memoria, la domanda di traffico, il numero di errori 400 e 500, i tempi di gestione delle richieste e così via. L'aspetto migliore è che questi dashboard sono disponibili semplicemente installando ed eseguendo Istio e aggiungendo Grafana, uno degli strumenti di dashboard open source inclusi per Istio. Istio fornisce anche altri due dashboard: Kiali e Jaeger.

Immagine dei tanti dashboard di Istio (pronti all'uso) per monitorare le condizioni e le prestazioni del sistema.

Istio ed Envoy

Istio usa una versione di Envoy, anche se estremamente estesa, per eseguire il monitoraggio, la gestione e la registrazione. Ogni pod deve essere monitorato e Istio deve aggregare e fornire le informazioni su tutti i pod. Una possibile alternativa all'utilizzo di Istio potrebbe essere l'implementazione diretta di Envoy nel cluster Kubernetes e la scrittura del codice di gestione. Anche se, pensandoci, ciò significa riscrivere il codice eseguito da Istio, con tutti i costi e i bug associati a un progetto di sviluppo personalizzato.

Tutorial

Il sito web di Istio (link si trova all'esterno di IBM) include una quantità notevole di documentazione e istruzioni utili per iniziare a utilizzare Istio. 

Istio e IBM

Managed Istio è disponibile come parte di IBM Cloud Kubernetes Service. Il servizio fornisce l'installazione senza interruzioni di Istio, aggiornamenti automatici e gestione del ciclo di vita dei componenti del piano di controllo e l'integrazione con gli strumenti di registrazione e monitoraggio della piattaforma. Aggiungi l'integrazione Istio gestita ai tuoi cluster nuovi o esistenti e assumi nuovamente il controllo dei tuoi microservizi oggi stesso. Puoi scoprire di più su Knative leggendo "Knative: una guida essenziale".

Ulteriori informazioni su Managed Istio su IBM Cloud Kubernetes Service

Per una panoramica su come Managed Kubernetes può aiutarti nel tuo passaggio al cloud, guarda il video, "Vantaggi di Managed Kubernetes":

Per saperne di più sulle best practice per abilitare e accelerare l'implementazione dei contenitori negli ambienti di produzione, consultare il report "Best practice per eseguire i contenitori e Kubernetes negli ambienti di produzione".

Scopri come le mesh di servizio possono aiutarti a controllare le interazioni tra i servizi nella tua applicazione con la guida pratica "Informazioni su Istio: introduzione a Service Mesh" (PDF, 4,1 MB).

Se sei pronto per iniziare a utilizzare IBM Cloud oggi stesso, registrati qui.