Serie di post su Istio Service Mesh

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.

Serie di post su Istio Service Mesh

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 service mesh.

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 Kubernetes-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 Kubernetes e Minishift 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ì:

Serie di post su Istio Service Mesh

Ora potete modificare le impostazioni di Istio per, ad esempio, organizzare fault injection, supporto Distribuzione Canary 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 Go 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 guida 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.
Inizia

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

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.
Inizia

Routing di base in Istio
60 minuti
Impariamo a gestire il routing in Istio utilizzando semplici regole.
Inizia

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.
Inizia

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.
Inizia

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.
Inizia

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.
Inizia

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.
Inizia

Mutual TLS in Istio
15 minuti
Creiamo un Istio Gateway e un VirtualService, quindi esaminiamo in dettaglio mutual TLS (mTLS) e le sue configurazioni.
Inizia

Blocco 3.1 — Approfondimenti: Istio Service Mesh per microservizi

Serie di post su Istio Service Mesh
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.

Scarica il libro

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: Red Hat Developer OpenShift Container Platform, la nostra guida su Istio e altre risorse sul nostro mini-sito di Service Mesh. Non rimandare, inizia oggi stesso!

Regole di instradamento di Istio: indirizziamo le richieste dei servizi dove necessario

OpenShift e Kubernetes gestisce perfettamente le richieste verso microservizi 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:

Serie di post su Istio Service Mesh

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-…:

Serie di post su Istio Service Mesh

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:

Serie di post su Istio Service Mesh

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:

Serie di post su Istio Service Mesh

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:

Serie di post su Istio Service Mesh

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 microservizi? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Prova tu stesso

Leggere di Istio, Kubernetes e OpenShift è una cosa, ma perché non provare tutto con le proprie mani? Il team Red Hat Developer Program 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 Red Hat Developer Demo.

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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster