Migrazione di Istio ServiceEntry a GCPBackend per Cloud Run

Questa pagina mostra come eseguire la migrazione da ServiceEntry a GCPBackend, dimostrando come le funzionalità di gestione del traffico di Istio possano garantire una transizione fluida e sicura.

La migrazione a GCPBackend offre i seguenti vantaggi:

  1. Codice dell'applicazione semplificato: puoi eliminare la necessità di inserire manualmente JWT IAM nell'applicazione, riducendo la complessità e i potenziali errori.
  2. Maggiore sicurezza: sfrutta l'inserimento automatico di JWT IAM per una comunicazione più sicura tra GKE e Cloud Run.
  3. Migrazione senza interruzioni: utilizza la suddivisione e il mirroring del traffico per eseguire la migrazione in sicurezza del traffico senza interrompere l'applicazione.
  4. Gestibilità avanzata: usufruisci della configurazione e della gestione semplificate.

Prima di iniziare

Le seguenti sezioni presuppongono che tu disponga di quanto segue:

  1. Un cluster GKE con Cloud Service Mesh abilitato.
  2. Un servizio Cloud Run come voce di servizio Istio.
  3. Risorsa GCPBackend configurata.

Crea o modifica il VirtualService esistente in modo che includa sia ServiceEntry che GCPBackend come destinazioni

Puoi utilizzare la suddivisione del traffico per spostare gradualmente il traffico da ServiceEntry a GCPBackend. Devi iniziare con una piccola percentuale di traffico indirizzato a GCPBackend e aumentarla gradualmente monitorando eventuali problemi.

L'esempio seguente descrive la migrazione del 10% delle richieste a GCPBackend.

cat <<EOF > virtual-service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: cr-gcpbackend-migration
  namespace: NAMESPACE
spec:
  hosts:
  - cr-service-entry.com
  http:
  - route:
    - destination:
        host: cr-gcpbackend.com
      weight: 10 # 10% traffic to gcp backend.
    - destination:
        host: cr-service-entry.com
      weight: 90 # 90% traffic to service entry
EOF
kubectl apply -f virtual-service.yaml

Dove:

  • NAMESPACE è il nome dello spazio dei nomi.

In questo esempio:

  • VIRTUAL_SERVICEE è pari a cr-gcpbackend-migration.
  • SERVICE_ENTRY_HOSTNAME è pari a cr-service-entry.com.
  • GCP_BACKEND_HOSTNAME è pari a =cr-gcpbackend.com.

(Facoltativo) Configura VirtualService per il mirroring del traffico

Per garantire ulteriormente una transizione senza problemi, puoi configurare il mirroring del traffico per inviare una copia del traffico a GCPBackend, indirizzando comunque principalmente il traffico a ServiceEntry. Ciò consente di testare e convalidare la configurazione di GCPBackend senza influire sul flusso di traffico principale. Per ulteriori informazioni, consulta l'API Istio Virtual Service.

Convalidare la funzionalità

Fai riferimento ai log dell'applicazione o alle metriche di Cloud Service Mesh per verificare il tasso di errori delle richieste a $SERVICE_ENTRY_HOSTNAME. Non dovrebbero essere presenti errori.

Per eseguire test al di fuori dell'applicazione, puoi eseguire il deployment di un client curl. Se la richiesta viene instradata a Cloud Run utilizzando l'API GCPBackend, non è necessario allegare esplicitamente un token IAM alla richiesta perché Cloud Service Mesh lo allega automaticamente.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: testcurl
  namespace: default
spec:
  containers:
  - name: curl
    image: curlimages/curl
    command: ["sleep", "3000"]
EOF

kubectl exec testcurl -c curl -- curl "$SERVICE_ENTRY_HOSTNAME"

L'output deve essere una risposta HTTP 200 valida.