Una serie di post su Istio Service Mesh

Stiamo iniziando una serie di post che mostrano alcune delle numerose funzionalità di Istio Service Mesh in combinazione con Red Hat OpenShift e Kubernetes.

Una serie di post su Istio Service Mesh

Prima parte, oggi:

  • Spieghiamo il concetto di contenitori sidecar Kubernetes e formuliamo il leitmotiv di questa serie di post: "non è necessario modificare nulla nel codice".
  • Introduciamo l'elemento fondamentale di Istio: le regole di routing. Tutte le altre funzionalità di Istio si basano su di esse, poiché sono le regole che consentono di indirizzare il traffico verso i microservizi, utilizzando file YAML esterni al codice del servizio. Stiamo anche considerando lo schema di implementazione del Canary Deployment. Bonus di Capodanno: 10 lezioni interattive su Istio


La seconda parte, in arrivo, ti dirà:

  • Come Istio implementa Pool Ejection in combinazione con Circuit Breaker e dimostrerà come Istio consente di rimuovere un pod morto o con scarse prestazioni dal circuito di bilanciamento.
  • Esamineremo anche l'argomento Circuit Breaker del primo post per vedere come è possibile utilizzare Istio qui. Ti mostreremo come instradare il traffico e gestire gli errori di rete utilizzando file di configurazione YAML e comandi del terminale senza la minima modifica nel codice del servizio.

Parte terza:

  • Una storia sul tracciamento e sul monitoraggio, già integrati o facilmente aggiunti a Istio. Ti mostreremo come utilizzare strumenti come Prometheus, Jaeger e Grafana in combinazione con la scalabilità di OpenShift per gestire facilmente le architetture di microservizi.
  • Passiamo dal monitoraggio e gestione degli errori alla loro introduzione intenzionale nel sistema. In altre parole, impariamo come eseguire l'iniezione di errori senza modificare il codice sorgente, il che è molto importante dal punto di vista del test, poiché se si modifica il codice stesso per questo, c'è il rischio di introdurre ulteriori errori.

Infine, nel post finale su Istio Service Mesh:

  • Andiamo al Lato Oscuro. Più precisamente, impareremo a utilizzare lo schema Dark Launch, quando il codice viene distribuito e testato direttamente sui dati di produzione, ma non influisce in alcun modo sul funzionamento del sistema. È qui che torna utile la capacità di Istio di suddividere il traffico. E la capacità di testare dati di produzione dal vivo senza influenzare in alcun modo il funzionamento del sistema di combattimento è il metodo di verifica più convincente.
  • Basandosi su Dark Launch, ti mostreremo come utilizzare il modello Canary Deployment per ridurre i rischi e semplificare l'immissione di nuovo codice in produzione. Canary Deployment in sé è tutt'altro che nuovo, ma Istio ti consente di implementare questo schema utilizzando solo semplici file YAML.
  • Infine, ti mostreremo come utilizzare Istio Egress per fornire accesso ai servizi a coloro che si trovano all'esterno dei tuoi cluster al fine di utilizzare le funzionalità di Istio quando lavori con Internet.

Quindi, eccoci qua...

Strumenti di monitoraggio e gestione Istio: tutto ciò di cui hai bisogno per orchestrare i microservizi in una rete di servizi rete di servizi.

Cos'è Istio Service Mesh

Una rete di servizi implementa funzioni quali monitoraggio del traffico, controllo degli accessi, rilevamento, sicurezza, tolleranza agli errori e altre cose utili per un gruppo di servizi. Istio ti permette di fare tutto questo senza la minima modifica al codice dei servizi stessi. Qual è il segreto della magia? Istio allega il proprio proxy a ciascun servizio sotto forma di contenitore sidecar (sidecar è un sidecar motociclistico), dopodiché tutto il traffico verso questo servizio passa attraverso il proxy che, guidato da policy specifiche, decide come, quando e se questo traffico dovrebbe raggiungere il servizio. Istio consente inoltre di implementare tecniche DevOps avanzate come implementazioni canary, interruttori automatici, iniezione di guasti e molte altre.

Come funziona Istio con contenitori e Kubernetes

La service mesh Istio è un'implementazione sidecar di tutto ciò che è necessario per creare e gestire i microservizi: monitoraggio, tracciamento, interruttori automatici, routing, bilanciamento del carico, iniezione di errori, nuovi tentativi, timeout, mirroring, controllo degli accessi, limitazione della velocità e molto altro. E anche se oggi ci sono tantissime librerie per implementare queste funzioni direttamente nel codice, con Istio puoi ottenere tutte le stesse cose senza cambiare nulla nel tuo codice.

Secondo il modello sidecar, Istio funziona in un contenitore Linux, che si trova in uno kubernetes-pod con un servizio controllato e inietta ed estrae funzionalità e informazioni in base alla configurazione data. Sottolineiamo che questa è la tua configurazione e vive al di fuori del tuo codice. Pertanto, il codice diventa molto più semplice e breve.

Ciò che è anche importante è che la componente operativa dei microservizi non risulta in alcun modo collegata al codice stesso, il che significa che il loro funzionamento può essere tranquillamente trasferito agli specialisti IT. In effetti, perché lo sviluppatore dovrebbe essere responsabile degli interruttori automatici e dell’inserimento dei guasti? Reagire, sì, ma elaborarli e crearli? Se rimuovi tutto questo dal codice, i programmatori potranno concentrarsi completamente sulla funzionalità dell'applicazione. E il codice stesso diventerà più breve e più semplice.

Maglia di servizio

Istio, che implementa funzioni per la gestione dei microservizi al di fuori del loro codice, è il concetto di Service Mesh. In altre parole, è un gruppo coordinato di uno o più binari che formano una maglia di funzioni di rete.

Come funziona Istio con i microservizi

Ecco come appare il lavoro dei contenitori sidecar in combinazione kubernetes и Miniturno vista a volo d'uccello: avvia un'istanza di Minishift, crea un progetto per Istio (chiamiamolo "istio-system"), installa ed esegui tutti i componenti relativi a Istio. Quindi, mentre crei progetti e pod, aggiungi le informazioni di configurazione alle tue distribuzioni e i tuoi pod iniziano a utilizzare Istio. Un diagramma semplificato è simile al seguente:

Una serie di post su Istio Service Mesh

Ora puoi modificare le impostazioni di Istio per, ad esempio, organizzare l'inserimento dei guasti e il supporto Distribuzione Canarie o altre funzionalità di Istio - e tutto questo senza toccare il codice delle applicazioni stesse. Supponiamo che tu voglia reindirizzare tutto il traffico web dagli utenti del tuo cliente più grande (Foo Corporation) a una nuova versione del sito. Per fare ciò, crea semplicemente una regola di routing Istio che cercherà @foocorporation.com nell'ID utente e reindirizzerà di conseguenza. Per tutti gli altri utenti non cambierà nulla. Nel frattempo proverete con calma la nuova versione del sito. E tieni presente che non è necessario coinvolgere affatto gli sviluppatori per questo.

E dovrai pagarlo caro?

Affatto. Istio è abbastanza veloce ed è scritto Go e crea pochissimo sovraccarico. Inoltre, la possibile perdita di produttività online è compensata da un aumento della produttività degli sviluppatori. Almeno in teoria: non dimenticare che il tempo degli sviluppatori è prezioso. Per quanto riguarda i costi del software, Istio è un software open source, quindi puoi ottenerlo e utilizzarlo gratuitamente.

Padroneggialo tu stesso

Il team Red Hat Developer Experience ha sviluppato un approccio pratico approfondito guida di Istio (in inglese). Funziona su Linux, MacOS e Windows e il codice è disponibile in Java e Node.js.

10 lezioni interattive su Istio

Blocco 1 - Per principianti

Introduzione a Istio
minuti 30
Facciamo conoscenza con Service Mesh e impariamo come installare Istio in un cluster OpenShift Kubernetes.
Inviare

Distribuzione di microservizi in Istio
minuti 30
Utilizziamo Istio per distribuire tre microservizi con Spring Boot e Vert.x.
Inviare

Blocco 2 – livello intermedio

Monitoraggio e tracciamento a Istio
minuti 60
Esploreremo gli strumenti di monitoraggio integrati di Istio, le metriche personalizzate e OpenTracing tramite Prometheus e Grafana.
Inviare

Itinerario semplice a Istio
minuti 60
Scopri come gestire il routing in Istio utilizzando semplici regole.
Inviare

Regole di routing avanzate
minuti 60
Diamo un'occhiata al routing intelligente, al controllo degli accessi, al bilanciamento del carico e alla limitazione della velocità di Istio.
Inviare

Blocco 3 – utente avanzato

Iniezione di guasti in Istio
minuti 60
Studiamo scenari di gestione degli errori in applicazioni distribuite, creando errori HTTP e ritardi di rete e impariamo a utilizzare l'ingegneria del caos per ripristinare l'ambiente.
Inviare

Interruttore automatico a Istio
minuti 30
Installiamo Siege per siti di stress test e impariamo come garantire la tolleranza agli errori del backend utilizzando replay, interruttori automatici ed espulsione del pool.
Inviare

Uscita e Istio
minuti 10
Utilizziamo percorsi di uscita per creare regole per l'interazione dei servizi interni con API e servizi esterni.
Inviare

Istio e Kiali
minuti 15
Impara a utilizzare Kiali per ottenere una panoramica della rete di servizi ed esplorare richieste e flussi di dati.
Inviare

TLS mutuo a Istio
minuti 15
Creiamo Istio Gateway e VirtualService, poi studiamo nel dettaglio il mutuo TLS (mTLS) e le sue impostazioni.
Inviare

Blocco 3.1 - Approfondimento: Istio Service Mesh per microservizi

Una serie di post su Istio Service Mesh
Di cosa parla il libro:

  • Cos'è una rete di servizi?
  • Il sistema Istio e il suo ruolo nell'architettura dei microservizi.
  • Utilizzo di Istio per risolvere i seguenti problemi:
    • Tolleranza ai guasti;
    • Instradamento;
    • Test del caos;
    • sicurezza;
    • Raccolta di telemetria utilizzando tracce, metriche e Grafana.

Per scaricare un libro

Serie di articoli sulle mesh di servizio e Istio

Provate voi stessi

Questa serie di post non ha lo scopo di fornire un'immersione profonda nel mondo di Istio. Vogliamo solo presentarti il ​​concetto e magari ispirarti a provare Istio tu stesso. È completamente gratuito e Red Hat fornisce tutti gli strumenti necessari per iniziare con OpenShift, Kubernetes, contenitori Linux e Istio, tra cui: Piattaforma container OpenShift per sviluppatori Red Hat, la nostra guida ad Istio e altre risorse sul nostro microsito su Service Mesh. Non ritardare, inizia oggi!

Regole di routing Istio: indirizzare le richieste di servizio dove devono andare

OpenShift и kubernetes fare un ottimo lavoro di indirizzamento microservizi instradato ai pod richiesti. Questo è uno dei motivi dell'esistenza di Kubernetes: routing e bilanciamento del carico. Ma cosa succede se hai bisogno di un routing più sottile e sofisticato? Ad esempio, per utilizzare contemporaneamente due versioni di un microservizio. In che modo le regole del percorso Istio possono essere d'aiuto in questo caso?

Le regole di routing sono le regole che determinano effettivamente la scelta del percorso. Indipendentemente dal livello di complessità del sistema, il principio di funzionamento generale di queste regole rimane semplice: le richieste vengono instradate in base a determinati parametri e valori di intestazione HTTP.
Diamo un'occhiata agli esempi:

Impostazione predefinita di Kubernetes: banale "50/50"

Nel nostro esempio mostreremo come utilizzare contemporaneamente due versioni di un microservizio in OpenShift, chiamiamole v1 e v2. Ogni versione viene eseguita nel proprio pod Kubernetes e, per impostazione predefinita, esegue un routing round robin bilanciato in modo uniforme. Ogni pod riceve la sua quota di richieste in base al numero delle sue istanze di microservizio, in altre parole, repliche. Istio ti consente di modificare questo saldo manualmente.

Supponiamo di aver implementato due versioni del nostro servizio di consigli su OpenShift, Recommendation-v1 e Recommendation-v2.
Nella fig. La Figura 1 mostra che quando ciascun servizio è rappresentato in un'istanza, le richieste si alternano uniformemente tra loro: 1-2-1-2-... Ecco come funziona il routing Kubernetes per impostazione predefinita:

Una serie di post su Istio Service Mesh

Distribuzione ponderata tra le versioni

Nella fig. La Figura 2 mostra cosa succede se si aumenta il numero di repliche del servizio v2 da uno a due (questo viene fatto con il comando oc scale —replicas=2 deploy/recommendation-v2). Come puoi vedere, le richieste tra v1 e v2 sono ora divise in un rapporto uno a tre: 1-2-2-1-2-2-…:

Una serie di post su Istio Service Mesh

Ignora la versione che utilizza Istio

Istio semplifica la modifica della distribuzione delle richieste nel modo di cui abbiamo bisogno. Ad esempio, invia tutto il traffico solo a Recommendation-v1 utilizzando il seguente file Istio yaml:

Una serie di post su Istio Service Mesh

Qui devi prestare attenzione a questo: i baccelli sono selezionati in base alle etichette. Il nostro esempio utilizza l'etichetta v1. Il parametro "peso: 100" indica che il 100% del traffico verrà instradato a tutti i pod di servizio con l'etichetta v1.

Distribuzione della direttiva tra le versioni (Canary Deployment)

Successivamente, utilizzando il parametro peso, puoi indirizzare il traffico verso entrambi i pod, ignorando il numero di istanze di microservizio in esecuzione in ciascuno di essi. Ad esempio, qui indirizziamo il 90% del traffico alla v1 e il 10% alla v2:

Una serie di post su Istio Service Mesh

Routing separato per gli utenti mobili

In conclusione, mostreremo come forzare l'instradamento del traffico degli utenti mobili al servizio v2 e di tutti gli altri al servizio v1. Per fare ciò, utilizziamo le espressioni regolari per analizzare il valore dello user-agent nell'intestazione della richiesta:

Una serie di post su Istio Service Mesh

Ora tu

L'esempio con le espressioni regolari per l'analisi delle intestazioni dovrebbe motivarti a trovare i tuoi usi personali delle regole di routing Istio. Inoltre, le possibilità qui sono piuttosto ampie, poiché i valori dell'intestazione possono essere formati nel codice sorgente dell'applicazione.

E ricorda che Ops, non Dev

Tutto ciò che abbiamo mostrato negli esempi sopra viene eseguito senza la minima modifica nel codice sorgente, ad eccezione dei casi in cui è necessario generare intestazioni di richiesta speciali. Istio sarà utile sia agli sviluppatori, che, ad esempio, potranno utilizzarlo in fase di test, sia agli specialisti nel funzionamento dei sistemi IT, per i quali aiuterà molto nella produzione.

Ripetiamo quindi il filo conduttore di questa serie di post: non è necessario modificare nulla nel codice. Non è necessario creare nuove immagini o lanciare nuovi contenitori. Tutto questo è implementato al di fuori del codice.

Usa la tua immaginazione

Immagina solo le possibilità dell'analisi dell'intestazione utilizzando le espressioni regolari. Vuoi reindirizzare il tuo cliente più importante a una versione speciale del tuo microservizi? Facilmente! Hai bisogno di una versione separata per il browser Chrome? Nessun problema! Puoi instradare il traffico in base a quasi tutte le caratteristiche.

Provate voi stessi

Leggere di Istio, Kubernetes e OpenShift è una cosa, ma perché non toccare tutto da solo? Squadra Programma per sviluppatori Red Hat ha preparato una guida dettagliata (in inglese) che ti aiuterà a padroneggiare queste tecnologie il più rapidamente possibile. Il manuale è inoltre open source al 100%, quindi è di pubblico dominio. Il file funziona su macOS, Linux e Windows e il codice sorgente è disponibile nelle versioni Java e node.js (presto in arrivo le versioni in altri linguaggi). Basta aprire il repository git corrispondente nel tuo browser Demo per sviluppatori Red Hat.

Nel prossimo post: risolviamo i problemi magnificamente

Oggi hai visto cosa possono fare le regole di routing Istio. Ora immagina la stessa cosa, ma solo in relazione alla gestione degli errori. È proprio di questo che parleremo nel prossimo post.

Fonte: habr.com

Aggiungi un commento