Questo tutorial è rivolto agli utenti e agli amministratori di Kubernetes che interessato a utilizzare Mesh di servizi Istio per assicurare eseguire il deployment dei servizi Kubernetes e abilitare la comunicazione TLS reciproca (mTLS).
Istio e Cloud Service Mesh
Istio non è un prodotto Google supportato. Ti consigliamo di eseguire Cloud Service Mesh. Per ulteriori informazioni, vedi Esegui il provisioning di Cloud Service Mesh su un cluster GKE Autopilot.
Cloud Service Mesh offre i seguenti vantaggi:
- Puoi eseguire il provisioning di Cloud Service Mesh gestito utilizzando
API Fleet senza lato client
come
istioctl
. - Cloud Service Mesh inserisce automaticamente i proxy sidecar nei carichi di lavoro senza concedere privilegi elevati ai container.
- Puoi visualizzare dashboard avanzate per la tua rete mesh e i tuoi servizi senza alcun bisogno configurazione aggiuntiva e poi utilizzare queste metriche per configurare il livello di servizio (SLO) e avvisi per monitorare l'integrità delle applicazioni.
- L'upgrade del piano di controllo Cloud Service Mesh gestito viene eseguito automaticamente per le patch e le funzionalità di sicurezza più recenti.
- Il piano dati gestito di Cloud Service Mesh esegue automaticamente l'upgrade del file collaterale nei tuoi carichi di lavoro, in modo che non sia necessario riavviare i servizi quando sono disponibili upgrade del proxy e patch di sicurezza.
- Cloud Service Mesh è un prodotto supportato e può essere configurato utilizzando le API Istio open source standard. Per ulteriori informazioni, vedi funzionalità supportate.
Obiettivi
Questo tutorial include i seguenti passaggi:
- Creare un cluster GKE Autopilot.
- Installa Istio utilizzando lo strumento a riga di comando
istioctl
. - Esegui il deployment di un'applicazione di esempio per testare l'autenticazione TLS reciproca (mTLS).
- Configura Istio per utilizzare l'autenticazione mTLS per i servizi service-to-service
comunicazione tramite una risorsa
PeerAuthentication
personalizzata. - Verifica l'autenticazione mTLS utilizzando la dashboard di Kiali.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
Cloud Shell è preinstallato con il software necessario a questo scopo
che include un
kubectl
,
gcloud CLI e Terraform.
Se non utilizzi Cloud Shell, devi installare gcloud CLI.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API GKE.
gcloud services enable container.googleapis.com
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API GKE.
gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.clusterAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:[email protected]
. - Replace
ROLE
with each individual role.
- Replace
prepara l'ambiente
Per configurare l'ambiente:
Imposta le variabili di ambiente:
export PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID gcloud config set compute/region us-central1
Sostituisci
PROJECT_ID
con il tuo Google Cloud ID progetto.Clona il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Passa alla directory di lavoro:
cd kubernetes-engine-samples/service-mesh/istio-tutorial
Crea un cluster GKE
Abilita le funzionalità Linux richieste da Istio: NET_RAW
e NET_ADMIN
.
GKE Autopilot non consente NET_ADMIN
per impostazione predefinita, ma
puoi attivare NET_ADMIN
usando l'--workload-policies=allow-net-admin
in GKE 1.27 e versioni successive:
gcloud container clusters create-auto istio-cluster \
--location="us-central1" \
--workload-policies="allow-net-admin"
Per saperne di più sulla sicurezza di GKE Autopilot, Configurazioni di sicurezza integrate.
Installa Istio
Puoi installare Istio su un cluster GKE utilizzando Istioctl.
In questo tutorial, installerai Istio con il protocollo predefinito profilo di configurazione consigliato per i deployment di produzione.
Installa Istio:
export ISTIO_VERSION=1.20.2 curl -L https://istio.io/downloadIstio | TARGET_ARCH=$(uname -m) sh -
Aggiungi lo strumento a riga di comando
istioctl
al PATH:cd istio-${ISTIO_VERSION} export PATH=$PWD/bin:$PATH
Installa Istio sul cluster:
istioctl install --set profile="default" -y
Questo passaggio potrebbe richiedere diversi minuti.
Attendi che i pod Istio siano pronti:
watch kubectl get pods -n istio-system
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-5c47bff876-wjm96 1/1 Running 0 2m54s istiod-5fc7cb65cd-k8cp4 1/1 Running 0 2m57s
Quando i pod Istio sono
Running
, torna alla riga di comando premendoCtrl+C
.
Esegui il deployment dell'applicazione di esempio
In questa sezione, utilizzi Banca di Anthos un'applicazione di esempio per creare un mesh di servizi con autenticazione mTLS.
Aggiungi un'etichetta dello spazio dei nomi che indichi a Istio di abilitare inserimento di proxy sidecar Envoy:
kubectl label namespace default istio-injection=enabled
Esegui il deployment dell'applicazione di esempio:
cd .. git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git kubectl apply -f bank-of-anthos/extras/jwt/jwt-secret.yaml kubectl apply -f bank-of-anthos/kubernetes-manifests/
Attendi che l'applicazione sia pronta:
watch kubectl get pods
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE accounts-db-0 2/2 Running 0 2m16s balancereader-5c695f78f5-x4wlz 2/2 Running 0 3m8s contacts-557fc79c5-5d7fg 2/2 Running 0 3m7s frontend-7dd589c5d7-b4cgq 2/2 Running 0 3m7s ledger-db-0 2/2 Running 0 3m6s ledgerwriter-6497f5cf9b-25c6x 2/2 Running 0 3m5s loadgenerator-57f6896fd6-lx5df 2/2 Running 0 3m5s transactionhistory-6c498965f-tl2sk 2/2 Running 0 3m4s userservice-95f44b65b-mlk2p 2/2 Running 0 3m4s
Quando i pod sono
Running
, torna alla riga di comando premendoCtrl+C
.Esamina il seguente manifest:
Questo manifest descrive Istio Gateway e VirtualService che espongono l'applicazione e utilizzano Istio come Controller Ingress.
Applica il manifest al cluster:
kubectl apply -f bank-of-anthos/extras/istio/frontend-ingress.yaml
Configura mTLS
L'autenticazione TLS (mTLS) reciproca è abilitata per impostazione predefinita in Istio. Ciò significa che Istio monitora i carichi di lavoro del server di cui è stata eseguita la migrazione ai proxy Istio e configura automaticamente i proxy client per stabilire connessioni mTLS per questi carichi di lavoro. Istio configura anche i proxy client in modo che non utilizzino mTLS quando la connessione ai carichi di lavoro senza proxy sidecar.
Istio può configurare mTLS in modo che funzioni in tre modalità:
PERMISSIVE
: i carichi di lavoro accettano traffico sia mTLS sia in testo normale.STRICT
: i carichi di lavoro accettano solo traffico mTLS.DISABLE
: mTLS disabilitato. Usa questa modalità se vuoi usare la tua soluzione di sicurezza.
Puoi applicare la configurazione mTLS a livello globale, per spazio dei nomi o per carico di lavoro. Nel
In questo tutorial, applicherai la configurazione per spazio dei nomi utilizzando il metodo mTLS STRICT
.
Esamina il seguente manifest:
Questo manifest descrive una risorsa personalizzata Istio con autenticazione peer.
Applica il manifest al cluster:
kubectl apply -f peer-authentication.yaml
Per ulteriori informazioni su mTLS in Istio, consulta autenticazione TLS reciproca.
Verifica che mTLS sia abilitato
Kiali una dashboard di osservabilità basata sul web per il mesh di servizi Istio, che fornisce grafica dell'ambiente dei microservizi, che ti consente di monitorare risolvere i problemi delle tue applicazioni. Puoi usare Kiali per verificare che mTLS l'autenticazione sia abilitata e funzioni correttamente nel mesh di servizi Istio. Kiali richiede Prometheus come origine dati di telemetria. Questo tutorial utilizza Google Cloud Managed Service per Prometheus.
Installa un'interfaccia di query
Crea un account di servizio IAM con
roles/monitoring.viewer
per consentire all'interfaccia di query di accedere alle metriche:gcloud iam service-accounts create monitoring \ --display-name="Service account for query interface" gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:monitoring@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud iam service-accounts add-iam-policy-binding \ monitoring@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[monitoring/default]"
Crea uno spazio dei nomi Kubernetes:
kubectl create namespace monitoring
Annota l'account di servizio Kubernetes predefinito nello spazio dei nomi in configura Federazione delle identità dei carichi di lavoro per GKE:
kubectl annotate serviceaccount -n monitoring default \ iam.gke.io/gcp-service-account=monitoring@PROJECT_ID.iam.gserviceaccount.com --overwrite
Esegui il deployment del carico di lavoro dell'interfaccia di query:
kubectl -n monitoring apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Esamina il seguente manifest:
Questo manifest descrive una risorsa
PodMonitoring
che raccoglie Istio e Metriche del proxy Envoy.Applica il manifest al cluster:
kubectl apply -f pod-monitorings.yaml
Ottieni un link all'applicazione di esempio:
INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "http://$INGRESS_HOST"
Apri il link per visualizzare l'applicazione di esempio. Accedi con il valore predefinito e una password per generare traffico tra i microservizi.
Installa Kiali
Ti consigliamo di installare Kiali utilizzando l'operatore Kiali.
Installa l'operatore Kiali:
helm repo add kiali https://kiali.org/helm-charts helm repo update helm install \ --namespace kiali-operator \ --create-namespace \ kiali-operator \ kiali/kiali-operator
Esamina il seguente manifest:
Questo file manifest descrive una risorsa personalizzata di Operator che definisce server Kiali.
Applica il manifest al cluster:
kubectl apply -f kiali.yaml
Attendi che il server Kiali sia pronto:
watch kubectl get pods -n istio-system
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-6845466857-92zp8 1/1 Running 0 9m11s istiod-6b47d84cf-4cqlt 1/1 Running 0 12m
Quando i pod sono
Running
, torna alla riga di comando premendoCtrl+C
.Configura il port forwarding sul server Kiali per accedere alla dashboard:
kubectl -n istio-system port-forward svc/kiali 8080:20001
Apri anteprima web. In Kiali, vai alla sezione Graph e seleziona l'icona Sicurezza nel menu a discesa Display. Questa visualizzazione mostra lo stato di sicurezza di ciascun nodo nel grafico. Nodi con mTLS abilitato indicano che mTLS è abilitato per quel servizio e i nodi senza indica che mTLS non è abilitato.
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Elimina un progetto Google Cloud:
gcloud projects delete PROJECT_ID
Elimina le singole risorse
Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina il alle singole risorse.
Elimina Kiali:
kubectl -n istio-system delete kiali kiali helm uninstall --namespace kiali-operator kiali-operator
Elimina le risorse di monitoraggio:
kubectl -n monitoring delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.7.1/examples/frontend.yaml
Elimina l'applicazione di esempio:
kubectl delete -f bank-of-anthos/extras/istio/frontend-ingress.yaml kubectl delete -f bank-of-anthos/kubernetes-manifests
Disinstalla Istio:
istioctl uninstall --purge -y
Elimina il cluster GKE:
gcloud container clusters delete --region us-central1 istio-cluster --quiet
Passaggi successivi
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Dai un'occhiata al nostro Centro architetture cloud.