Iniziamo una serie di post in cui dimostreremo alcune delle molte possibilità della rete di servizio Istio Service Mesh in combinazione con Red Hat OpenShift e Kubernetes.

Parte prima, di oggi:
- Spiegheremo il concetto di contenitori sidecar di Kubernetes e formuliamo il tema di questa serie di post: «non devi cambiare nulla nel tuo codice».
- Introduciamo il concetto fondamentale di Istio: le regole di routing. Tutte le altre funzionalità di Istio si basano su di esse, poiché le regole consentono di indirizzare il traffico verso i microservizi utilizzando file YAML esterni al codice dei servizi. Consideriamo anche lo schema di distribuzione Canary Deployment. Come bonus per il nuovo anno — 10 lezioni interattive su Istio.
Parte seconda, che uscirà presto, ti parlerà di:
- Come Istio implementa il Pool Ejection in combinazione con il Circuit Breaker e dimostrerà come Istio consente di rimuovere dai meccanismi di bilanciamento un pod non funzionante o che funziona male.
- Inoltre, esploreremo il tema del Circuit Breaker dal primo post per vedere come Istio può essere integrato qui. Mostreremo come indirizzare il traffico e gestire gli errori di rete senza alcuna modifica nel codice dei servizi usando file di configurazione YAML e comandi da terminale.
Parte terza:
- Racconteremo di tracciamento e monitoraggio, che sono già integrati o facilmente aggiungibili in Istio. Mostreremo come utilizzare strumenti come Prometheus, Jaeger e Grafana in combinazione con l'auto-scalabilità di OpenShift per gestire senza sforzo un'architettura a microservizi.
- Passiamo dal monitoraggio e dalla gestione degli errori a introdurli nel sistema in modo intenzionale. In altre parole, impariamo a fare fault injection senza modificare il codice sorgente, il che è molto importante per il testing — poiché modificare il codice stesso comporta il rischio di introdurre ulteriori errori.
Infine, nell'ultimo post su Istio Service Mesh:
- Passeremo al Lato Oscuro. In modo più preciso, impareremo a usare lo schema di Dark Launch, quando il codice viene distribuito e testato direttamente sui dati di produzione, ma non influisce sul funzionamento del sistema. La capacità di Istio di separare il traffico è molto utile in questo caso. E la possibilità di eseguire test su dati di produzione in tempo reale, senza influenzare il funzionamento del sistema in produzione, è il modo più convincente per verificare.
- Partendo dal Dark Launch, mostreremo come usare il modello Canary Deployment per ridurre i rischi e semplificare l'implementazione di nuovo codice. Il Canary Deployment non è una novità, ma Istio consente di implementare questo schema semplicemente con file YAML non complicati.
- In conclusione, vedremo come utilizzare Istio Egress per dare accesso ai servizi a coloro che si trovano al di fuori dei vostri cluster, per sfruttare le capacità di Istio nel lavorare con Internet.
Ecco, cominciamo...
Strumenti di monitoraggio e gestione di Istio - tutto il necessario per coordinare i microservizi in una rete di servizi .
Cos'è la rete di servizi Istio
La rete di servizi fornisce a un gruppo di servizi funzionalità come il monitoraggio del traffico, il controllo degli accessi, la scoperta, la sicurezza, la resilienza e altre cose utili. Istio consente di farlo tutto senza apportare alcuna modifica al codice stesso dei servizi. Qual è il segreto della magia? Istio attacca a ciascun servizio il proprio proxy sotto forma di container sidecar, dopodiché tutto il traffico verso quel servizio passa attraverso il proxy, che, seguendo le politiche stabilite, decide come, quando e se questo traffico deve effettivamente raggiungere il servizio. Istio consente anche di implementare tecniche avanzate di DevOps, come i canary deployments, i circuit breakers, l'injection di errori e molte altre.
Come Istio lavora con i container e Kubernetes
La rete di servizi Istio è una implementazione sidecar di tutto ciò che è necessario per creare e gestire microservizi: monitoraggio, tracciamento, circuit breakers, routing, bilanciamento del carico, injection di errori, retry, timeouts, mirroring, controllo degli accessi, limitazione della velocità e molto altro. Anche se oggi ci sono molte librerie per implementare queste funzionalità direttamente nel codice, con Istio puoi ottenere tutto questo senza dover cambiare il tuo codice.
Secondo il modello sidecar, Istio viene eseguito in un container Linux, che si trova nello stesso -pod con il servizio controllato e inietta (inject) ed estrae (extract) funzionalità e informazioni secondo la configurazione stabilita. Sottolineiamo, questa è la vostra configurazione, e vive al di fuori del vostro codice. Pertanto, il codice diventa molto più semplice e breve.
È importante notare che l'aspetto operativo dei microservizi non è affatto legato al codice stesso, il che significa che la loro gestione può essere tranquillamente affidata agli specialisti IT. Infatti, perché uno sviluppatore dovrebbe occuparsi di circuit breaker e fault injection? Reagire, sì, ma gestirli e crearli? Se si elimina tutto questo dal codice, i programmatori possono concentrarsi interamente sulle funzionalità applicative. Inoltre, il codice stesso diventa più corto e semplice.
Mesh di servizi
Istio, che implementa funzioni di gestione dei microservizi al di fuori del loro codice, è proprio il concetto di service mesh. In altre parole, è un gruppo coordinato di uno o più binari che formano una rete di funzioni di rete.
Come funziona Istio con i microservizi
Ecco come appare il funzionamento dei contenitori sidecar in relazione a e dall'alto: avviate un'istanza di Minishift, create un progetto per Istio (chiamiamolo "istio-system"), installate e avviate tutti i componenti collegati a Istio. Poi, man mano che create progetti e pod, aggiungete le informazioni di configurazione nei vostri deployment, e i vostri pod iniziano a utilizzare Istio. In modo semplificato, il diagramma appare così:

Ora potete modificare le impostazioni di Istio per, ad esempio, organizzare fault injection, supporto o altre funzionalità di Istio – e tutto questo senza toccare il codice delle applicazioni stesse. Supponiamo che vogliate reindirizzare tutto il traffico web dai clienti del vostro maggiore cliente (Foo Corporation) a una nuova versione del sito. Per questo basta creare una regola di routing in Istio che cercherà @foocorporation.com nell'identificatore dell'utente e effettuerà il pertinente reindirizzamento. Per tutti gli altri utenti, nulla cambierà. E nel frattempo, potrete testare tranquillamente la nuova versione del sito. E notate che per questo non c'è bisogno di coinvolgere gli sviluppatori.
E costerà molto?
Affatto. Istio funziona piuttosto rapidamente, è scritto in e crea un sovraccarico molto ridotto. Inoltre, la possibile perdita di prestazioni online è compensata dall'aumento della produttività degli sviluppatori. Almeno in teoria: non dimenticate che il tempo degli sviluppatori è costoso. Per quanto riguarda i costi del software, Istio è un software open source, quindi può essere ottenuto e utilizzato gratuitamente.
Apprendi da solo
Il team Red Hat Developer Experience ha sviluppato una guida pratica approfondita su Istio (in inglese). Funziona su Linux, MacOS e Windows, e il codice è disponibile in versioni Java e Node.js.
10 lezioni interattive su Istio
Blocco 1 — Per principianti
Introduzione a Istio
30 minuti
Ci familiarizziamo con il Service Mesh e impariamo a installare Istio nel cluster Kubernetes di OpenShift.
Distribuzione di microservizi in Istio
30 minuti
Utilizziamo Istio per distribuire tre microservizi con Spring Boot e Vert.x.
Blocco 2 – livello intermedio
Monitoraggio e tracciamento in Istio
60 minuti
Studiamo gli strumenti di monitoraggio integrati di Istio, le metriche configurabili e OpenTracing tramite Prometheus e Grafana.
Routing di base in Istio
60 minuti
Impariamo a gestire il routing in Istio utilizzando semplici regole.
Regole di routing avanzate
60 minuti
Acquisiamo familiarità con il routing intelligente in Istio, la gestione degli accessi, il bilanciamento del carico e il throttling.
Blocco 3 – utente esperto
Injection di fault in Istio
60 minuti
Esploriamo gli scenari di gestione dei guasti in applicazioni distribuite, creando errori HTTP e ritardi di rete, impariamo ad applicare il chaos engineering per ripristinare l'ambiente.
Circuit Breaker in Istio
30 minuti
Installiamo Siege per i test di stress sui siti e impariamo a garantire la resilienza del backend tramite tentativi, circuit breaker e pool ejection.
Egress e Istio
10 minuti
Utilizziamo le rotte Egress per creare regole di interazione tra i servizi interni e le API esterne e i servizi.
Istio e Kiali
15 minuti
Impariamo a utilizzare Kiali per ottenere una visione generale del service mesh e studiare i flussi di richieste e dati.
Mutual TLS in Istio
15 minuti
Creiamo un Istio Gateway e un VirtualService, quindi esaminiamo in dettaglio mutual TLS (mTLS) e le sue configurazioni.
Blocco 3.1 — Approfondimenti: Istio Service Mesh per microservizi

Di cosa parla il libro:
- Che cos'è un service mesh.
- Il sistema Istio e il suo ruolo nell'architettura a microservizi.
- Utilizzo di Istio per risolvere le seguenti sfide:
- Resilienza;
- Routing;
- Chaos testing;
- Sicurezza;
- Raccolta della telemetria tramite tracciamento, metriche e Grafana.
Serie di articoli sulle service mesh e Istio
Prova tu stesso
Questa serie di post non ha l'obiettivo di fornire un'immersione profonda nel mondo di Istio. Vogliamo solo introdurti al concetto e, forse, ispirarti a provare Istio da solo. Puoi farlo completamente gratis, e Red Hat fornisce tutti gli strumenti necessari per iniziare a padroneggiare OpenShift, Kubernetes, i container Linux e Istio, ossia: , e altre risorse sul nostro . Non rimandare, inizia oggi stesso!
Regole di instradamento di Istio: indirizziamo le richieste dei servizi dove necessario
e gestisce perfettamente le richieste verso istradati verso i pod giusti. Questa è una delle ragioni per cui Kubernetes esiste: instradamento e bilanciamento del carico. Ma cosa fare se hai bisogno di un instradamento più fine e sofisticato? Ad esempio, per utilizzare simultaneamente due versioni di un microservizio. Come possono aiutarti le regole di instradamento Istio Route Rules?
Le regole di instradamento sono le regole che definiscono la scelta del percorso. Indipendentemente dal livello di complessità del sistema, il principio generale di funzionamento di queste regole rimane semplice: le richieste vengono instradate sulla base di parametri specifici e dei valori degli header HTTP.
Vediamo alcuni esempi:
Kubernetes per impostazione predefinita: banale "50 a 50"
Nel nostro esempio mostreremo come utilizzare contemporaneamente su OpenShift due versioni di un microservizio, che chiameremo v1 e v2. Ogni versione viene eseguita nel proprio pod Kubernetes, e per impostazione predefinita qui funziona un'instradamento bilanciato e ciclico (evenly balanced round robin routing). Ogni pod riceve una quota di richieste in base al numero dei suoi istanze di microservizio, in altre parole, repliche. Istio consente di modificare questo bilanciamento manualmente.
Mettiamo caso di aver distribuito su OpenShift due versioni del nostro servizio di raccomandazione, recommendation-v1 e recommendation-v2.
Nella fig. 1 si vede che, quando ogni servizio è rappresentato in un solo esemplare, le richieste si alternano uniformemente tra di loro: 1-2-1-2-… Questo è esattamente come la routing di Kubernetes funziona per impostazione predefinita:

Distribuzione ponderata tra le versioni
Nella fig. 2 è mostrato cosa accade se si aumenta il numero di repliche del servizio v2 da una a due (questo viene fatto con il comando oc scale —replicas=2 deployment/recommendation-v2). Come vediamo, le richieste tra v1 e v2 ora si dividono in un rapporto di "uno a tre": 1-2-2-1-2-2-…:

Ignorare la versione con Istio
Istio consente di modificare facilmente la distribuzione delle richieste come desiderato. Ad esempio, per inviare tutto il traffico solo a recommendation-v1 con il seguente file yaml di Istio:

Qui bisogna prestare attenzione a questo: i pod vengono selezionati in base alle etichette. Nel nostro esempio viene utilizzata l'etichetta v1. Il parametro "weight: 100" significa che il 100% del traffico sarà instradato verso tutti i pod del servizio con etichetta v1.
Distribuzione diretta tra le versioni (Canary Deployment)
In seguito, utilizzando il parametro weight, è possibile instradare il traffico verso entrambi i pod, ignorando il numero di esemplari di microservizi in esecuzione in ciascuno di essi. Ad esempio, qui stiamo instradando direttamente il 90% del traffico su v1 e il 10% su v2:

Routing separato per gli utenti mobili
In conclusione, mostreremo come forzare il routing del traffico degli utenti mobili verso il servizio v2, mentre tutti gli altri verranno instradati verso v1. Per fare ciò, analizziamo il valore dell'user-agent nell'intestazione della richiesta tramite espressioni regolari:

Adesso è il tuo turno
Un esempio con espressioni regolari per analizzare le intestazioni dovrebbe motivarti a cercare le tue varianti di applicazione delle regole di routing di Istio. Anche perché qui si aprono possibilità abbastanza ampie, poiché i valori delle intestazioni possono essere costruiti nel codice sorgente delle applicazioni.
E ricorda, Ops, non Dev
Tutto ciò che abbiamo mostrato negli esempi precedenti viene fatto senza alcuna modifica nel codice sorgente, a meno che non sia necessario generare intestazioni di richiesta speciali. Istio sarà utile sia per gli sviluppatori, che ad esempio potranno applicarlo nella fase di testing, sia per gli specialisti nella gestione dei sistemi IT, ai quali sarà di grande aiuto in produzione.
Quindi ripetiamo il leitmotiv di questa serie di post: non devi cambiare nulla nel tuo codice. Non è necessario raccogliere nuove immagini o avviare nuovi contenitori. Tutto questo viene realizzato al di fuori del codice.
Attiva l'immaginazione
Immagina solo quali prospettive apre l'analisi dei titoli con le espressioni regolari. Vuoi reindirizzare il tuo cliente più grande a una versione speciale dei tuoi ? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.
Prova tu stesso
Leggere di Istio, Kubernetes e OpenShift è una cosa, ma perché non provare tutto con le proprie mani? Il team ha preparato una guida dettagliata (in inglese) che ti aiuterà a padroneggiare queste tecnologie nel minor tempo possibile. La guida è anche 100% open source, quindi è disponibile pubblicamente. Il file funziona su macOS, Linux e Windows, e il codice sorgente è disponibile in versioni Java e node.js (presto saranno disponibili versioni in altre lingue). Basta aprire nel proprio browser il corrispondente repository git .
Nel prossimo post: affrontiamo i problemi con eleganza
Oggi hai visto di cosa sono capaci le regole di instradamento di Istio. E ora immagina tutto lo stesso, ma applicato alla gestione degli errori. Questo è ciò di cui parleremo nel prossimo post.
Fonte: habr.com
