Introduzione
Un modo pratico per gestire i microservizi di un'applicazione cloud-native consiste nell'automatizzare le funzioni di rete dell'applicazione.
Istio è una piattaforma di service mesh configurabile che funge da piano di controllo, distribuendo la configurazione a proxy e gateway sidecar. È un'opzione popolare per connettere, monitorare e proteggere i container in un cluster Kubernetes.
In questo tutorial imparerai come installare Istio, distribuire un'applicazione di test e configurare il tuo cluster Kubernetes per funzionare con la piattaforma.
Prerequisiti
- Un cluster (o minikube) Kubernetes
- strumento da riga di comando kubectl
Scarica l'ultima versione di Istio
Per scaricare l'ultima versione di Istio, vai alla pagina della versione di Istio su GitHub.
In alternativa, gli utenti Linux possono utilizzare curl
per scaricare ed estrarre automaticamente l'ultima versione:
curl -L https://istio.io/downloadIstio | sh -
Il comando estrae i file di installazione nella cartella denominata istio-[version]
:
Per scaricare una versione precedente di Istio, usa curl
, ma specifica la versione e l'architettura del processore utilizzando la seguente sintassi:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Guida all'installazione di Istio
1. Avvia il tuo cluster Kubernetes. Questo articolo usa minikube:
minikube start
2. Successivamente, avvia l'installazione di Istio spostandoti nella cartella con i file estratti:
cd istio-1.9.2
3. Il bin/
la directory contiene istioctl
binario client. In Linux, aggiungi il client al tuo percorso digitando:
export PATH=$PWD/bin:$PATH
La variabile impostata in questo modo dura solo fino a quando non termini la sessione di shell corrente. Per impostare la variabile in modo permanente, leggi come impostare le variabili di ambiente in Linux.
4. Usa il istioctl
strumento per avviare il processo di installazione:
istioctl install --set profile=demo -y
L'output conferma l'avvenuta installazione:
5. Istio può iniettare automaticamente proxy sidecar Envoy al momento della distribuzione dell'applicazione. Per abilitarlo, usa kubectl
per aggiungere un'etichetta dello spazio dei nomi contenente questa istruzione:
kubectl label namespace default istio-injection=enabled
Questo conclude il processo di installazione di Istio.
Verifica la distribuzione tramite l'applicazione Bookinfo
L'archivio di installazione di Istio contiene tutti i file necessari per distribuire l'applicazione di esempio denominata Bookinfo .
1. Inizia applicando il bookinfo.yaml
file utilizzando kubectl
:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
Il sistema crea diverse distribuzioni, servizi e pod:
2. Controlla i servizi in esecuzione:
kubectl get services
3. Controlla se i pod sono pronti:
kubectl get pods
Mentre i pod salgono, Istio schiera i sidecar insieme a loro:
4. Attendi fino al READY
l'etichetta per ogni pod è 2/2
. Quindi esegui il comando seguente per vedere se l'app fornisce correttamente le pagine HTML:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
L'output dovrebbe essere il tag del titolo della pagina, insieme al titolo stesso:
5. Il passaggio successivo consiste nell'aprire l'app al traffico esterno. Applica il bookinfo-gateway.yaml
file dai samples
cartella:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
L'output conferma che l'applicazione è stata associata correttamente al gateway Istio:
6. Usa istioctl
per analizzare la configurazione e verificare potenziali problemi:
istioctl analyze
Se il sistema non rileva problemi, viene visualizzato il seguente messaggio:
7. Per accedere al gateway configurato nel passaggio precedente, impostare le variabili di ingresso. Innanzitutto, esporta INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. Ora, ripeti la procedura per SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. Utilizzare il comando echo per verificare se le porte sono state assegnate correttamente:
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
L'output mostra i numeri di porta:
10. Esporta il INGRESS_HOST
variabile:
export INGRESS_HOST=$(minikube ip)
11. Verifica la variabile con echo
:
echo "$INGRESS_HOST"
12. Per indirizzare il traffico verso l'Istio Ingress Gateway, apri una nuova finestra del terminale e digita il seguente comando:
minikube tunnel
Minikube ora funge da bilanciamento del carico per Istio. L'output mostra minikube che dirige il traffico:
13. Torna alla finestra del terminale precedente ed esporta il GATEWAY_URL
variabile, che consiste nel INGRESS_HOST
e INGRESS_PORT
variabili:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. Usa echo
per vedere l'intero indirizzo IP e il numero di porta:
echo "$GATEWAY_URL"
15. Digitare il seguente comando per visualizzare l'indirizzo esterno dell'applicazione:
echo http://$GATEWAY_URL/productpage
16. Copiare l'indirizzo ottenuto nel passaggio precedente e incollarlo in un browser web. Il sito Web di Bookinfo viene caricato correttamente:
Configura un cluster Kubernetes per Istio
Istio viene fornito con una serie di componenti aggiuntivi per i servizi Istio più diffusi, come dashboard Grafana, software di tracciamento delle transazioni Jaeger, scraper di metriche Prometheus e console di gestione Kiali.
1. Installa questi componenti aggiuntivi applicando i samples/addons
cartella:
kubectl apply -f samples/addons
2. Ora crea una risorsa Kubernetes Ingress per ciascuno degli addon. Fallo incollando quanto segue in un yaml
file.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. Salva il file e applica la configurazione con kubectl:
kubectl apply -f [file-name]
I componenti aggiuntivi sono ora configurati e pronti per essere utilizzati.