Introduzione a Istio
Inizia a utilizzare il componente aggiuntivo Istio gestito in IBM Cloud® Kubernetes Service. In questa serie di passi, distribuisci l'applicazione di esempio BookInfo per esercitarti a utilizzare le diverse funzioni della rete di servizi Istio.
Prima di iniziare, consultare il registro delle modifiche del componente aggiuntivo Istio per informazioni sulla versione.
Passo 1: abilita il componente aggiuntivo Istio
Configura il componente aggiuntivo Istio gestito nel tuo cluster.
-
Abilita il componente aggiuntivo
istio.ibmcloud ks cluster addon enable istio --cluster CLUSTER_NAME_OR_ID -
Verifica che il componente aggiuntivo Istio gestito abbia lo stato
Addon Ready. Nota che potrebbero essere necessari alcuni minuti prima che il componente aggiuntivo sia pronto.ibmcloud ks cluster addon ls --cluster CLUSTER_NAME_OR_IDOutput di esempio
Name Version Health State Health Status istio 1.29 normal Addon Ready -
Puoi anche controllare i singoli componenti del componente aggiuntivo per assicurarti che i pod Istio siano stati distribuiti.
kubectl get pods -n istio-systemkubectl get svc -n istio-system
Per ulteriori informazioni su Istio in IBM Cloud Kubernetes Service, vedi Informazioni sul componente aggiuntivo Istio gestito.
Passo 2: configura l'applicazione di esempio BookInfo
L'applicazione di esempio BookInfo include una configurazione Istio di base che ti permette di provare immediatamente le funzionalità di Istio.
I quattro microservizi BookInfo includono:
productpagerichiama i microservizidetailsereviewsper popolare la pagina.detailscontiene informazioni sul libro.ratingscontiene informazioni sulla classificazione del libro che accompagnano una recensione.reviewscontiene le recensioni del libro e richiama il microservizioratings. Il microservizioreviewsha più versioni:v1non richiama il microservizioratings.v2richiama il microservizioratingse visualizza le valutazioni come da 1 a 5 stelle nere.v3richiama il microservizioratingse visualizza le valutazioni come da 1 a 5 stelle rosse.
L'applicazione BookInfo è inoltre già esposta su un indirizzo IP pubblico mediante un gateway Istio. Per scoprire l'architettura di BookInfo, consulta la documentazione su Istio.
-
Installa BookInfo nel tuo cluster.
- Scarica il pacchetto Istio più recente, che include i file di configurazione per l'applicazione BookInfo.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh - ``` 2. Passa alla directory del pacchetto Istio. ```sh {: pre} cd istio-1.29.5 ``` 3. Linux e per gli utenti di macOS: aggiungete il client `istioctl` alla variabile di sistema `PATH`. ```sh {: pre} export PATH=$PWD/bin:$PATH ``` 4. Etichetta lo spazio dei nomi `default` per l'inserimento automatico di collaterali. Tutti i nuovi pod distribuiti nello spazio dei nomi `default` vengono ora creati automaticamente con i contenitori di collaterali proxy Envoy. ```sh {: pre} kubectl label namespace default istio-injection=enabled ``` 5. Distribuisci l'applicazione, il gateway e le regole di destinazione BookInfo. ```sh {: pre} kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml ``` 6. Assicurati che lo stato dei pod dei microservizi BookInfo sia `Running`. ```sh {: pre} kubectl get pods ``` ```sh {: screen} NAME READY STATUS RESTARTS AGE details-v1-6865b9b99d-7v9h8 2/2 Running 0 2m productpage-v1-f8c8fb8-tbsz9 2/2 Running 0 2m ratings-v1-77f657f55d-png6j 2/2 Running 0 2m reviews-v1-6b7f6db5c5-fdmbq 2/2 Running 0 2m reviews-v2-7ff5966b99-zflkv 2/2 Running 0 2m reviews-v3-5df889bcff-nlmjp 2/2 Running 0 2m ``` -
Ottieni l'indirizzo pubblico del programma di bilanciamento del carico
istio-ingressgatewayche espone BookInfo.- Cluster classici
- Imposta l'indirizzo IP Ingress Istio come variabile di ambiente.
export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') - Imposta la porta Ingress Istio come variabile di ambiente.
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') - Crea una variabile di ambiente
GATEWAY_URLche utilizza l'host e la porta ingress Istio.export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
- Imposta l'indirizzo IP Ingress Istio come variabile di ambiente.
- Cluster VPC: crea una variabile di ambiente
GATEWAY_URLche utilizza il nome host ingress Istio.
export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') ``` - Cluster classici
-
Esegui il curl della variabile
GATEWAY_URLper controllare che l'applicazione BookInfo sia in esecuzione. Una risposta200significa che l'applicazione BookInfo è in esecuzione correttamente con Istio.curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage -
Visualizza la pagina web di BookInfo in un browser.
Mac OS oppure Linux
open http://$GATEWAY_URL/productpageWindows
start http://$GATEWAY_URL/productpage -
Prova ad aggiornare la pagina diverse volte. Le diverse versioni della sezione delle recensioni si alternano tra nessuna stella (
v1direviews), stelle nere (v2) e stelle rosse (v3).
Per ulteriori informazioni su come funziona l'instradamento in Istio, vedi Informazioni su cosa è accaduto.
Fase 3: Simulare un'implementazione graduale di BookInfo
Per simulare un rilascio di un'applicazione, puoi eseguire una distribuzione graduale della v3 del microservizio reviews di BookInfo.
Quando hai finito di testare la tua applicazione e sei pronto per iniziare a indirizzare il traffico in tempo reale su di essa, puoi eseguire le distribuzioni gradualmente tramite Istio. Ad esempio, puoi prima rilasciare la v3 al
10% degli utenti, poi al 20% di utenti e così via.
-
Configura un servizio virtuale per distribuire lo 0% di traffico alla
v1, il 90% di traffico allav2e il 10% di traffico allav3direviews.apiVersion: networking.istio.io/v1beta1 kind: VirtualService metadata: name: reviews spec: hosts: - reviews http: - route: - destination: host: reviews subset: v1 weight: 0 - destination: host: reviews subset: v2 weight: 90 - destination: host: reviews subset: v3 weight: 10kubectl apply -f <filename>.yaml -
Visualizza la pagina web BookInfo in un browser eseguendo
open http://$GATEWAY_URL/productpagesu Mac OS o Linux oppure eseguendostart http://$GATEWAY_URL/productpagesu Windows. -
Prova ad aggiornare la pagina diverse volte. Si noti che la pagina senza stelle (
v1) non viene più visualizzata e che la maggior parte delle pagine aggiornate mostra le stelle nere (v2). Solo raramente viene visualizzata la pagina con le stelle rosse (v3). -
Modifica la distribuzione del traffico in modo che tutto il traffico sia inviato solo alla
v3. Tieni presente che, in uno scenario reale, potresti distribuire lentamente le modifiche di versione cambiando prima la distribuzione del traffico in un rapporto 80:20, quindi in 70:30 e così via, finché tutto il traffico non viene instradato solo all'ultima versione.- Modificare il file di configurazione per il servizio virtuale
reviews.
kubectl edit VirtualService reviews ``` 2. Modifica il valore `weight` della `v2` in `0` e il valore `weight` della `v3` in `100`. 3. Salva e chiudi il file. - Modificare il file di configurazione per il servizio virtuale
-
Prova ad aggiornare più volte la pagina BookInfo. Nota che la pagina con le stelle nere (
v2) non viene più visualizzata e viene visualizzata invece solo pagina con le stelle rosse (v3). -
Se hai abilitato i log di accesso di Envoy: verifica che, dal momento in cui hai modificato il file YAML relativo alle revisioni
VirtualService, non siano presenti log relativi alle richieste av2.kubectl logs -l app=reviews,version=v2 -c istio-proxy
Passo 4: monitora BookInfo con IBM Cloud Monitoring
Utilizza una delle dashboard predefinite di Monitoring Istio per monitorare i tuoi microservizi BookInfo.
Per distribuire gli agent di monitoraggio al cluster, completare la seguente procedura.
-
Esegui il provisioning di un'istanza di IBM Cloud Monitoring.
-
Nella console di monitoraggio, fai clic su Apri dashboard per l'istanza di cui hai eseguito il provisioning.
-
Nell'interfaccia utente di Monitoring, fare clic su " Aggiungi nuovo dashboard ".
-
Cerca "
Istio" e seleziona una delle dashboard predefinite di Monitoring Istio.
Per ulteriori informazioni su come consultare metriche e dashboard, monitorare i componenti interni di Istio e monitorare le distribuzioni A/B e le distribuzioni canary di Istio, consulta il post del blog “ Come monitorare Istio, il service mesh di Kubernetes ”.
Passaggio 5: Proteggere il traffico all'interno del cluster abilitando mTLS
Abilita la crittografia per i carichi di lavoro in uno spazio dei nomi per ottenere il TLS reciproco (mTLS) all'interno del cluster. Il traffico instradato da Envoy tra i pod nel cluster viene crittografato con TLS. La gestione del certificato per mTLS viene gestita da Istio. Per ulteriori informazioni, consultare il sito Istio TLS documentazione reciproca.
- Crea un file della politica di autenticazione denominato
default.yaml. Questa politica ha un ambito delimitato agli spazi dei nomi e configura i carichi di lavoro nella rete di servizi per accettare solo le richieste crittografate con TLS. Tieni presente che non è inclusa alcuna specificatargetsperché la politica si applica a tutti i servizi nella rete all'interno di questo spazio dei nomi.apiVersion: "security.istio.io/v1beta1" kind: "PeerAuthentication" metadata: name: "default" spec: mtls: mode: STRICT - Applica la politica di autenticazione a uno spazio dei nomi.
kubectl apply -f default.yaml -n NAMESPACE - Crea un file della regola di destinazione denominato
destination-mtls.yaml. Questa politica configura i carichi di lavoro della rete di servizi in uno spazio dei nomi per inviare il traffico utilizzando TLS. Nota che il carattere jollyhost: *.localsi applica a questa regola di destinazione per tutti i servizi nella rete.apiVersion: "networking.istio.io/v1beta1" kind: "DestinationRule" metadata: name: "destination-mtls" spec: host: "*.local" trafficPolicy: tls: mode: ISTIO_MUTUAL - Applica la regola di destinazione.
kubectl apply -f destination-mtls.yaml -n NAMESPACE - Se si desidera configurare " mTLS " per i carichi di lavoro del service mesh presenti in altri spazi dei nomi, ripetere questi passaggi in ciascuno di essi.
Le regole di destinazione sono utilizzate anche per motivi diversi dall'autenticazione, come ad esempio l'instradamento del traffico a versioni differenti di un servizio. Qualsiasi regola di destinazione che crei per un servizio deve contenere
anche lo stesso blocco TLS impostato su mode: ISTIO_MUTUAL. Questo blocco impedisce alla regola di sovrascrivere le impostazioni mTLS a livello di rete che hai configurato in questa sezione.