Scopri la magia dell'architettura del service mesh e scopri come potenzia i tuoi sistemi distribuiti.
Approfondisci Istio, la star del service mesh, e scopri come orchestra il tuo cluster Kubernetes alla perfezione.
Le applicazioni monolitiche si sono evolute in servizi indipendenti più piccoli. Questo cambiamento ha guadagnato popolarità con il cloud-native computing e l'architettura dei microservizi. Strumenti come Docker e Kubernetes hanno accelerato questa tendenza.
I microservizi su piattaforme come Kubernetes offrono numerosi vantaggi, ma introducono anche complessità. La gestione della comunicazione tra questi servizi distribuiti richiede attenzione in termini di discovery, routing, retry e failover.
Altre sfide includono la sicurezza e l'osservabilità.
Costruire capacità di comunicazione in ogni servizio è dispendioso in termini di tempo, soprattutto man mano che il panorama dei servizi si espande. Qui entra in gioco il service mesh. Gestisce tutta la comunicazione tra servizi in un sistema distribuito.
Il service mesh raggiunge questo obiettivo utilizzando proxy di rete. Le richieste tra i servizi vengono instradate attraverso questi proxy, che risiedono al di fuori dei servizi nel layer di infrastruttura:
Questi proxy formano una rete a maglia per i servizi, da cui il nome. Il service mesh controlla ogni aspetto della comunicazione tra i servizi, consentendogli di affrontare le otto fallacie del calcolo distribuito.
Libera il pieno potenziale dei tuoi servizi con un service mesh! Scopri come questo strumento magico può trasformare il tuo panorama applicativo.
Scomponiamo la magia in tre abilità fondamentali: la maestria del traffico, la sicurezza a prova di ferro e la visibilità cristallina.
Un service mesh è il tuo vigile urbano definitivo, dirigendo le interazioni dei servizi con precisione. Goditi il routing dinamico, lo smart discovery e funzionalità sbalorditive come il traffic shadowing e lo splitting per rilasci canary e test A/B senza interruzioni.
Dì addio alle connessioni inaffidabili! Un service mesh avvolge i tuoi servizi in una coperta di affidabilità, offrendo retry, timeout, rate limiting e circuit breakers per proteggere le tue app dal caos.
Proteggi i tuoi servizi con una fortezza impenetrabile! Un service mesh cripta tutte le comunicazioni con MTLS robusto, verifica le identità con un'autenticazione rigorosa e applica regole di accesso per una protezione totale.
Scopri superpoteri nascosti di sicurezza! Isola i servizi, traccia ogni mossa per auditing e crea un perimetro sicuro intorno alla tua applicazione con un service mesh.
Naviga le complessità del tuo sistema distribuito con facilità! Un service mesh offre una visibilità senza pari sul funzionamento interno della tua applicazione attraverso il tracing distribuito.
Scopri intuizioni preziose con una ricchezza di metriche, log e dati sulle prestazioni. Ottimizza i tuoi servizi e risolvi i problemi come un professionista con un service mesh.
Istio, un service mesh open-source nato dalla collaborazione di IBM, Google e Lyft, potenzia invisibilmente le applicazioni distribuite con gestione del traffico, sicurezza e insights sulle prestazioni.
Distribuibile con flessibilità on-premise, nel cloud, su Kubernetes o su macchine virtuali, Istio brilla con i microservizi su Kubernetes. Sebbene sia agnostico alla piattaforma, si adatta naturalmente agli ambienti containerizzati.
Al suo interno, Istio distribuisce i proxy Envoy come sidecar accanto a ciascun microservizio:
Questa rete di proxy forma il piano dati di Istio, orchestrato dal piano di controllo:
Il piano di controllo, la mente di Istio, potenzia i proxy Envoy con discovery, configurazione e gestione dei certificati.
Sfrutta il potenziale di Istio con una moltitudine di microservizi interconnessi, dove i proxy sidecar tessono una robusta infrastruttura di service mesh:
L'adattabilità di Istio brilla grazie all'integrazione senza soluzione di continuità con sistemi esterni di logging, telemetry e policy.
L'architettura di Istio è un duo dinamico: il piano dati e il piano di controllo. Insieme, orchestrano la magia dietro le capacità di Istio. Scopriamo i componenti principali che alimentano questa piattaforma eccezionale.
Preparati ad esplorare i dettagli intricati dei componenti core di Istio.
Il piano dati di Istio è essenzialmente una versione amplificata del proxy Envoy. Questo miracolo open-source gestisce le complessità della rete, liberando le applicazioni per concentrarsi sul loro core business. Le applicazioni interagiscono senza problemi, ignare delle intricate infrastrutture di rete.
Al suo cuore, Envoy è un mago della rete che opera ai livelli 3 e 4 del modello OSI. Gestisce abilmente le connessioni utilizzando una catena di filtri di rete adattabili. Oltre a questo, il filtro del livello L7 di Envoy gli consente di gestire il traffico HTTP con grazia. E non è tutto: è un maestro naturale con i protocolli HTTP/2 e gRPC.
Molte delle caratteristiche distintive di Istio sono in realtà superpoteri ereditati dalle abilità integrate di Envoy:
Il vero potenziale di Envoy brilla quando viene abbinato a Istio. La sua estendibilità, potenziata da WebAssembly, è un punto di svolta per l'applicazione di politiche personalizzate e la telemetria. Inoltre, l'API Proxy-Wasm di Istio apre porte a ulteriori personalizzazioni di Envoy.
Incontra istiod, il direttore dell'orchestra del piano di controllo di Istio. Questo maestro trasforma le regole di routing di alto livello e le direttive di gestione del traffico in configurazioni adatte a Envoy, distribuendole senza problemi ai sidecar.
Ricordi l'architettura precedente di Istio con i suoi componenti individuali? Bene, per semplificare le cose, questi componenti sono stati unificati in istiod. Ma non preoccuparti, le funzionalità core rimangono intatte.
Al suo cuore, istiod utilizza lo stesso codice e le stesse API dei suoi predecessori. Pilot, ad esempio, continua a essere il maestro della scoperta dei servizi, traducendo i dettagli specifici della piattaforma in un linguaggio universale compreso dai sidecar. Questa flessibilità consente a Istio di armonizzarsi con ambienti diversi come Kubernetes e Macchine Virtuali.
Istiod gestisce anche la sicurezza, stabilendo robuste autenticazioni tra servizi e utenti finali con il suo sistema di gestione delle identità e delle credenziali integrato. Applica con facilità politiche di sicurezza granulari basate sull'identità dei servizi. Inoltre, istiod funziona come un'Autorità di Certificazione (CA) affidabile, rilasciando certificati per garantire la comunicazione tra i servizi tramite MTLS.
Abbiamo esplorato le funzionalità tipiche di un service mesh e abbiamo sezionato l'architettura e i componenti core di Istio. Ora, scopriamo come Istio offre queste funzionalità utilizzando i suoi componenti core.
Rivisiteremo le stesse categorie di funzionalità esplorate in precedenza.
L'API di gestione del traffico di Istio offre un controllo granulare sul traffico del service mesh. Personalizza le configurazioni di traffico utilizzando queste API e definisci le risorse API con definizioni personalizzate delle risorse (CRD) di Kubernetes. Le risorse API chiave per il routing del traffico sono i virtual services e le destination rules:
Un virtual service detta come le richieste vengono instradate a un servizio all'interno del mesh di Istio. Comprende una o più regole di routing valutate in sequenza. Dopo il routing del virtual service, vengono applicate le destination rules per controllare il traffico verso una destinazione, ad esempio raggruppando le istanze di servizio per versione.
La sicurezza di Istio si basa su identità forti per ogni servizio. Gli agenti di Istio accanto a ciascun proxy Envoy collaborano con istiod per automatizzare la rotazione delle chiavi e dei certificati:
Istio supporta due tipi di autenticazione: autenticazione peer e autenticazione della richiesta. L'autenticazione peer protegge la comunicazione tra i servizi con la soluzione MTLS di Istio. L'autenticazione della richiesta gestisce l'autenticazione dell'utente finale tramite la validazione JSON Web Token (JWT) utilizzando un provider di autenticazione personalizzato o OpenID Connect (OIDC).
Istio applica il controllo degli accessi ai servizi tramite politiche di autorizzazione. Queste politiche regolano il traffico in entrata nel proxy Envoy, consentendo il controllo degli accessi a livello di mesh, namespace e servizio.
Istio genera una telemetria completa, comprese metriche, tracce distribuite e log di accesso, per tutta la comunicazione dei servizi all'interno del mesh. Questa telemetria include metriche a livello di proxy, orientate ai servizi e relative al piano di controllo.
In passato, Mixer era il componente centrale nell'architettura di telemetria di Istio. Tuttavia, Telemetry v2 sostituisce le funzionalità di Mixer con plugin proxy di Envoy:
Istio crea tracce distribuite tramite proxy Envoy e supporta diversi backend di tracing come Zipkin, Jaeger, Lightstep e Datadog. Il tasso di campionamento della generazione delle tracce è configurabile. Inoltre, Istio genera log di accesso per il traffico dei servizi in formati personalizzabili.
Abbiamo abbastanza background, ora vediamo Istio in azione! Installeremo Istio su un cluster Kubernetes e utilizzeremo una semplice app di microservizi per dimostrarne la potenza.
Istio può essere installato in vari modi, ma scaricare ed estrarre l'ultima versione per il tuo sistema operativo (come Windows) è il metodo più semplice. Il pacchetto estratto include il client istioctl nella cartella bin. Utilizza istioctl per installare Istio sul tuo cluster Kubernetes:
istioctl install --set profile=demo -y
Questo installa i componenti di Istio sul cluster Kubernetes predefinito utilizzando il profilo demo. Sostituisci 'demo' con un altro profilo specifico del vendor, se necessario.
Successivamente, istruisci Istio a iniettare automaticamente i proxy sidecar Envoy quando distribuisci app su questo cluster Kubernetes:
kubectl label namespace default istio-injection=enabled
Qui stiamo utilizzando kubectl, assumendo che tu abbia un cluster Kubernetes (come Minikube) e il CLI Kubernetes kubectl configurato.
Immagina una semplice app di ordinazione online per questa demo. È composta da tre microservizi che lavorano insieme per evadere gli ordini:
Non approfondiremo i dettagli dei microservizi, ma sono facili da creare con Spring Boot e REST APIs. È fondamentale creare immagini Docker per questi microservizi da distribuire su Kubernetes.
Distribuire carichi di lavoro containerizzati su cluster Kubernetes come Minikube è semplice. Usa risorse Deployment e Service per dichiarare e accedere al carico di lavoro. Di solito, si definiscono in un file YAML:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: order-service
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: order-service
version: v1
spec:
containers:
- name: order-service
image: kchandrakant/order-service:v1
resources:
requests:
cpu: 0.1
memory: 200
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: order-service
Questa è una definizione di base di Deployment e Service per l'order-service. Crea file YAML simili per inventory-service e shipping-service.
Distribuisci queste risorse utilizzando kubectl facilmente:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Poiché abbiamo abilitato l'iniezione automatica dei proxy sidecar Envoy per lo namespace predefinito, tutto è gestito. Oppure, inietta manualmente i proxy sidecar Envoy utilizzando il comando kube-inject di istioctl.
Istio gestisce principalmente il traffico del mesh. Per impostazione predefinita, il traffico da o verso l'esterno del mesh è bloccato. Istio utilizza gateway per gestire il traffico in entrata e in uscita dal mesh, fornendo un controllo preciso su ciò che entra o esce. Istio offre distribuzioni proxy gateway preconfigurate: istio-ingressgateway e istio-egressgateway.
Crea un Gateway e un Virtual Service per la tua app:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: booking-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: booking
spec:
hosts:
- "*"
gateways:
- booking-gateway
http:
- match:
- uri:
prefix: /api/v1/booking
route:
- destination:
host: booking-service
port:
number: 8080
Qui stiamo utilizzando il controller di ingress predefinito di Istio. Inoltre, abbiamo definito un virtual service per instradare le richieste al booking-service.
Puoi anche definire un gateway egress per il traffico in uscita dal mesh.
Abbiamo distribuito una semplice app su Kubernetes con Istio. Esploriamo le potenti funzionalità di Istio e vediamo come possono migliorare la nostra applicazione.
Immagina di distribuire più versioni di un microservizio come shipping-service. Vuoi introdurre gradualmente nuove funzionalità senza impattare tutti gli utenti. L'instradamento delle richieste ti consente di farlo, indirizzando una parte del traffico alla versione più recente.
Usa le regole di instradamento dei virtual service per raggiungere questo obiettivo.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shipping-service
spec:
hosts:
- shipping-service
http:
- route:
- destination:
host: shipping-service
subset: v1
weight: 90
- destination:
host: shipping-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: shipping-service
spec:
host: shipping-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
Le regole di instradamento possono anche filtrare il traffico in base agli header o altri attributi. Il campo destination specifica il servizio di destinazione per le richieste corrispondenti.
Previeni fallimenti a cascata con i circuit breakers. Questo pattern rileva gli errori e interrompe temporaneamente il traffico verso i servizi in errore, proteggendo la salute complessiva della tua applicazione.
La DestinationRule di Istio ti consente di configurare il comportamento del circuit breaking per servizi come inventory-service.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: inventory-service
spec:
host: inventory-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutive5xxErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
Limitando il numero massimo di connessioni, richieste in sospeso e richieste per connessione, puoi gestire efficacemente il traffico e prevenire il sovraccarico.
Il Mutual TLS garantisce una comunicazione sicura tra i servizi richiedendo a entrambe le parti di autenticarsi. Istio abilita automaticamente il mutual TLS per i servizi che utilizzano i suoi proxy.
Sebbene Istio imponga il mutual TLS tra i servizi proxy, il traffico in chiaro può ancora raggiungere i servizi senza proxy. Utilizza le politiche PeerAuthentication per applicare il mutual TLS all'intero mesh.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Puoi applicare il mutual TLS a livello di mesh, namespace o servizio. Le politiche specifiche per il servizio sovrascrivono le impostazioni a livello di namespace.
I JSON Web Tokens (JWT) sono uno standard per la trasmissione sicura delle informazioni sugli utenti. Sono ampiamente utilizzati per l'autenticazione e l'autorizzazione.
La AuthorizationPolicy di Istio ti consente di controllare l'accesso ai servizi come booking-service in base ai claims dei JWT.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: booking-service
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["[email protected]/[email protected]"]
Richiedi JWT validi con claims specifici per un accesso autorizzato. Istio crea un attributo requestPrincipal dai claims issuer e subject del JWT.
Istio semplifica la gestione delle sfide comuni nelle architetture di microservizi distribuiti. Tuttavia, la sua complessità può aggiungere un overhead alle distribuzioni. Come qualsiasi strumento, Istio non è una soluzione magica e richiede una valutazione attenta.
Sebbene i service mesh offrano vantaggi, considera questi svantaggi:
I service mesh offrono vantaggi, ma una valutazione attenta della complessità della tua applicazione è cruciale. Valuta i vantaggi rispetto alla complessità aggiuntiva.
Istio è un service mesh popolare supportato dai leader del settore, ma non è l'unica opzione. Ecco una breve panoramica di Linkerd e Consul.
Linkerd è un service mesh nativo Kubernetes, open-source e in rapida ascesa. È un progetto CNCF in incubazione e funziona in modo simile a Istio, utilizzando proxy TCP. Il micro-proxy basato su Rust di Linkerd si chiama Linkerd-proxy.
Linkerd è generalmente più semplice di Istio grazie al suo focus su Kubernetes. Tuttavia, il suo set di funzionalità è molto simile a quello di Istio e la sua architettura core è simile. Linkerd è costituito da un'interfaccia utente, un piano dati e un piano di controllo.
Consul è un service mesh open-source di HashiCorp che si integra con altri strumenti infrastrutturali HashiCorp. Il piano dati di Consul supporta modelli di integrazione sia proxy che nativi. Offre un proxy integrato, ma può anche funzionare con Envoy.
Consul opera oltre Kubernetes, supportando piattaforme come Nomad. Utilizza agenti su ciascun nodo per i controlli di salute e comunica con i server Consul per l'archiviazione e la replica dei dati. Sebbene offra funzionalità standard di service mesh, Consul è più complesso da distribuire e gestire.
Questo tutorial ha esplorato i fondamenti dell'architettura del service mesh e le potenti capacità di Istio. Abbiamo approfondito la struttura core di Istio, i suoi componenti e le applicazioni pratiche. Alla fine, dovresti avere una solida comprensione di come installare e utilizzare Istio per scenari comuni.
Feedback dei Clienti
Le seguenti recensioni sono state raccolte sul nostro sito web.
Hai Domande? Trova le Risposte Qui!
Le Nostre Domande Più Frequenti