Kubernetes Service Mesh

Kubernetes Service Mesh
Kubernetes ha molti tipi di risorse che ti aiutano a estrarre l'idea di servizi o microservizi. Ad esempio, se il frontend della tua app vuole interagire con il backend, non deve interessarsi a quale baccello sta cercando, o nemmeno quale indirizzo IP spera che un backend possa occupare. I pod sono esposti tramite un servizio. (Se sei nuovo a Kubernetes, consiglio questo post di capire meglio quali pod sono insieme ad altri concetti importanti.)

Essenzialmente, Kubernetes espone a Servizio di backend internamente all'interno del cluster e la parte frontale interagisce con questo servizio. I baccelli che offrono il servizio possono benissimo essere sostituiti e nessuno noterebbe nulla. Ma man mano che le funzionalità delle applicazioni crescono, anche il numero di servizi che devi mantenere. Ogni servizio può potenzialmente parlare con ogni altro servizio nel cluster e la rete risultante è definita come Mesh di servizio.

Ci sono molti componenti aggiuntivi per Kubernetes per aiutarci a semplificare la gestione di questa mesh di servizio. Molte caratteristiche delle chiavi come TLS, bilanciamento automatico del carico, protezione delle API anche sulla rete interna, ecc. Molte opzioni come iStio, Linkerd e il condotto possono essere integrate con Kubernetes per raggiungere questo obiettivo. Esamineremo ISTIO in questo post poiché è la versione 1.0 è stato recentemente annunciato.

Prerequisiti

Per iniziare con Istio, avresti bisogno di un cluster Kubernetes funzionante. Ci sono tre modi per ottenerlo.

  1. È possibile installare Minikube per creare un cluster a nodo singolo sulla macchina locale.
  2. Oppure, se si utilizza Docker su Windows o Mac, è possibile abilitare un cluster Kubernetes a nodo singolo nelle impostazioni Docker.
  3. Oppure puoi utilizzare servizi online come Katacoda Playground. Lo useremo.

Perché utilizzare una mesh di servizio?

L'installazione di una maglia di servizio, come ISO, semplifica il lavoro con i microservizi. Durante lo sviluppo non devi preoccuparti del fatto che il tuo microservizio dovrebbe offrire supporto per TL reciproci, bilanciamento del carico o qualsiasi altro aspetto come la scoperta del servizio. Una mesh di servizio ideale consente di collegare i microservizi, proteggerli l'uno dall'altro e dal mondo esterno e gestirli in modo organizzato. Aiuta immensamente sia gli sviluppatori che gli operatori.

Installazione di istio

L'installazione di ISTIO richiede un cluster Kubernetes. Se hai un cluster a nodo singolo come ottieni con minikube o docker su desktop, tutti i comandi possono essere eseguiti sul nodo locale. Tuttavia, se si utilizza un cluster multi-nodo come quello che offre Katacoda Playground, tieni presente che la maggior parte dei comandi e le procedure di configurazione sono eseguite sul nodo principale. Sì, influisce sull'intero cluster, ma dobbiamo interagire esclusivamente con il nodo principale.

Iniziamo con la clonazione (o il download) l'ultima versione di ISTIO da GitHub. Gli utenti di Windows potrebbero voler visitare questa pagina e ottenere l'appropriato .cerniera lampo file.

$ curl -l https: // git.IO/GetLateStistio | sh -
$ cd istio-1.0.0

Il nome del repository può cambiare nel tempo man mano che la nuova uscita è arrivata, al momento di questa scrittura 1.0.0 è l'ultima versione stabile. Questo repository contiene non solo l'estensione della mesh di servizio, ma anche un'app di esempio chiamata bookinfo per scopi di sperimentazione. Lo script aggiunge anche la nuova directory $ pwd/iso-1.0.0/cestino sul tuo percorso variabile.

Questa directory contiene istioctl binario che può essere utilizzato per interagire con il cluster. Gli utenti di Windows possono semplicemente chiamare il binario andando alla cartella istio-1.0.0 \ bin e chiamare .\ istioctl Utilizzo di PowerShell o Prompt dei comandi. Ma è un componente aggiuntivo opzionale.

Se stai usando Mac puoi farlo usando il seguente comando:

$ Export Path = $ PWD/Bin: $ Path

Successivamente dobbiamo estendere la nostra API Kubernetes con definizioni di risorse personalizzate (CRD) che ISTIO ci fornisce.

$ kuBectl Applica -f Installa/Kubernetes/Helm/istio/Models/CRDS.Yaml

Ciò potrebbe avere effetto in pochi secondi e una volta fatto il tuo kube-apiserver avrà estensioni di isti. Da qui in poi, le opzioni di installazione variano a seconda che tu lo stia utilizzando per scopi di produzione o se lo stai sperimentando nel tuo ambiente isolato.

Supponiamo che quest'ultimo sia il caso e installeremo ISTIO senza autenticazione TLS.

$ kubectl appliche -f install/kubernetes/iso -demo.Yaml

Ciò creerà un nuovo spazio di spazio dei nomi in cui saranno installati tutti i vari componenti come Istio-Pilot e Ingress Gateway.

Distribuzione dell'applicazione e iniettore ISTIO

Ecco che arriva l'utilità di iso. Istio aggiunge proxy sidecar ai tuoi servizi e questo viene fatto senza modificare il codice effettivo dell'applicazione. Se è abilitato automatico ISTIO-SIDECAR. È possibile etichettare uno spazio dei nomi con istio-iniection = abilitato e quando l'applicazione viene distribuita su questo spazio dei nomi, i pod stessi avranno contenitori di inviati specializzati insieme ai contenitori per l'applicazione principale. Ad esempio, etichettiamo lo spazio dei nomi predefinito

$ kubectl etichetta spazio nomi predefinito istio-iniection = anabled

Ora distribuiamo l'app Esempio di bookinfo in questo spazio dei nomi. Dalla directory di radice del rappresentante Isio che abbiamo clonato, eseguiti:

$ kubectl applicare -f campioni/bookinfo/piattaforma/kube/bookinfo.Yaml

Puoi elencare tutti i baccelli in esecuzione qui:

$ kubectl ottieni baccelli

Scegli qualsiasi baccello da quelli e vedi i suoi dettagli. Ad esempio, uno dei pod dell'app BookInfo nella mia distribuzione è nominato dettagli-V1-6865B9B99D-6MXX9

$ kubectl Descrivere i pods/Dettagli-V1-6865B9B99D-6MXX9

Nella descrizione, noterai che il pod contiene due contenitori, prima è un componente dell'epoca esempi di app di immagine-bookinfo-details-v1: 1.8.0 e il secondo è l'istio-proxy che esegue l'immagine GCR.io/istio-release/proxyv2: 1.0.0 .

ISTIO offre un controllo a grana fine sulla mesh di servizio perché inietta questi contenitori fino agli stessi pod in cui risiedono le applicazioni. Questo combinato con TLS facile da usare per la comunicazione e il controllo del traffico a grana fine è uno dei tanti motivi per cui le grandi applicazioni possono beneficiare di una mesh di servizio come ISTIO.

Riferimenti

L'architettura reale ha molti componenti come pilota, cittadella e mixer ciascuno con il suo ruolo importante da svolgere. Puoi imparare molto di più su questi componenti qui e provare a distribuire il tuo microservizio qui.