Configura Cloud Service Mesh per Cloud Run

Questa pagina mostra come configurare Cloud Service Mesh per l'esecuzione su una serie di infrastrutture di calcolo per i servizi Cloud Run.

Cloud Service Mesh ti consente di attivare le funzionalità avanzate di gestione del traffico del mesh, come la suddivisione del traffico ponderata e il bilanciamento del carico globale, nonché i criteri di osservabilità e sicurezza per il traffico da un servizio Cloud Run a un altro. Ti offre inoltre una soluzione di piano dati completamente gestita che consente di rimuovere il carico operativo della gestione dei sidecar della mesh di servizi.

Prima di iniziare

  1. Avere familiarità con Cloud Service Mesh.

  2. Configura il progetto:

    gcloud config set core/project PROJECT_ID
  3. Nella console Google Cloud, abilita le seguenti API per il tuo progetto:

  4. Aggiorna i componenti gcloud all'ultima versione (488.0.0 o successive):

    gcloud components update

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare ed eseguire il deployment dei servizi Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM:

L'account di servizio del client Cloud Run deve disporre anche dei seguenti ruoli:

Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il servizio Cloud Run interagisce con le API Google Cloud, come le librerie client di Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.

Chiamate tra servizi Cloud Run utilizzando Cloud Service Mesh

Cloud Run utilizza le API di routing dei servizi di Cloud Service Mesh. Queste API consentono a un servizio Cloud Run di chiamare altri servizi Cloud Run utilizzando un URL personalizzato anziché l'URL run.app fornito. Inoltre, Cloud Run si autentica automaticamente nel servizio Cloud Run di destinazione in modo che non debba configurare la tua autenticazione per allegare le credenziali di richiesta ad altri servizi Cloud Run.

Per effettuare una chiamata da un servizio Cloud Run a un altro utilizzando Cloud Service Mesh:

  1. Configurare Cloud Service Mesh
  2. Configurare Cloud DNS
  3. Crea il servizio Cloud Run di destinazione
  4. Crea il NEG serverless
  5. Crea il servizio Cloud Run client
  6. Chiamare il servizio dal client mesh

Configurare un Cloud Service Mesh

  1. Per creare un percorso del servizio utilizzando l'URL predefinito, salva la specifica Mesh in un file denominato mesh.yaml:

    name: MESH_NAME

    Sostituisci MESH_NAME con il nome della risorsa mesh.

  2. Importa la risorsa Mesh dalla specifica eseguendo il seguente comando:

    gcloud network-services meshes import MESH_NAME \
      --source=mesh.yaml \
      --location=global

    Sostituisci MESH_NAME con il nome della risorsa mesh.

Configurare Cloud DNS

Puoi saltare la configurazione di Cloud DNS e andare alla sezione successiva se utilizzi un endpoint Private Service Connect con l'indirizzo URL run.app completo come nome host perché vengono acquisiti solo gli indirizzi IP privati.

Quando un client mesh chiama il servizio di destinazione, il nome host utilizzato nella richiesta deve essere risolvibile tramite DNS. È accettabile qualsiasi indirizzo IP RFC 1918 valido perché il sidecar acquisisce tutto il traffico IP per questi intervalli di indirizzi IP e lo reindirizza di conseguenza.

L'esempio seguente mostra come creare una voce * jolly nella zona Cloud DNS che risolve in un singolo indirizzo IP. Se non vuoi utilizzare una zona Cloud DNS esclusiva, crea una voce Cloud DNS per ogni nome host corrispondente ai servizi Cloud Run che vuoi che siano indirizzabili dal mesh.

  • Per creare un record Cloud DNS in una zona esclusiva, esegui i seguenti comandi:

    1. Crea una zona DNS gestita privata in Cloud DNS per un mesh di servizi.

      gcloud dns managed-zones create MESH_NAME \
      --description="Domain for DOMAIN_NAME service mesh routes" \
      --dns-name=DOMAIN_NAME. \
      --network=VPC_NETWORK_NAME \
      --visibility=private
    2. Crea un record DNS all'interno della zona gestita privata appena creata. Assicurati che l'indirizzo IP 10.0.0.1 non sia utilizzato.

      gcloud dns record-sets create "*.DOMAIN_NAME." \
      --type=A \
      --zone="MESH_NAME" \
      --rrdatas=10.0.0.1 \
      --ttl=3600

      Sostituisci quanto segue:

      • DOMAIN_NAME: il nome del dominio DNS.
      • MESH_NAME: il nome della risorsa mesh.
      • VPC_NETWORK_NAME: il nome della rete VPC; ad esempio, "predefinita".

Accedere ai servizi interni con Cloud Service Mesh

Cloud Run ti consente di limitare il traffico di rete in entrata a "interno". Se per il servizio è attivata questa limitazione in entrata, il traffico che viaggia dal tuo mesh attraverso la rete Virtual Private Cloud può essere impostato come "interno" quando attivi un percorso di accesso a Cloud Run.

Per accedere ai servizi interni con Cloud Service Mesh, utilizza uno dei seguenti metodi:

Crea il servizio Cloud Run di destinazione

Tieni presente che la destinazione Cloud Run non può avere l'URL predefinito disattivato.

  1. Esegui il deployment di un servizio Cloud Run nuovo o esistente:

    gcloud run deploy DESTINATION_SERVICE_NAME \
    --no-allow-unauthenticated \
    --region=REGION \
    --image=IMAGE_URL 

    Sostituisci quanto segue:

    • DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
    • REGION: il nome della regione.
    • IMAGE_URL: un riferimento all'immagine del contenitore, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest.

Crea il gruppo di endpoint di rete serverless (NEG)

  1. Crea il NEG di destinazione eseguendo il seguente comando:

    gcloud compute network-endpoint-groups create destination-neg \
    --region=REGION \
    --network-endpoint-type=serverless \
    --cloud-run-service=DESTINATION_SERVICE_NAME

    Sostituisci quanto segue:

    • REGION: il nome della regione.
    • DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
  2. Crea un servizio di backend autogestito interno che fa riferimento al NEG serverless.

    1. Crea il servizio di backend:

      gcloud compute backend-services create DESTINATION_SERVICE_NAME-REGION \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED

      Sostituisci DESTINATION_SERVICE_NAME con il nome del servizio di destinazione e REGION con il nome della regione.

    2. Aggiungi il backend serverless al servizio di backend:

      gcloud compute backend-services add-backend DESTINATION_SERVICE_NAME-REGION \
      --global \
      --network-endpoint-group=destination-neg \
      --network-endpoint-group-region=REGION

      Sostituisci DESTINATION_SERVICE_NAME con il nome del servizio di destinazione e REGION con il nome della regione.

  3. Crea una route HTTP che fa riferimento al servizio di backend.

    La risorsa e i servizi Mesh sono configurati. Collegali con una risorsa HTTPRoute che associa un nome host a un servizio di backend.

    1. Crea la specifica HTTPRoute e salvala in un file denominato http_route.yaml:

      name: "DESTINATION_SERVICE_NAME-route"
      hostnames:
      - "DESTINATION_SERVICE_NAME.DOMAIN_NAME"
      meshes:
      - "projects/PROJECT_ID/locations/global/meshes/MESH_NAME"
      rules:
      - action:
         destinations:
         - serviceName: "projects/PROJECT_ID/locations/global/backendServices/DESTINATION_SERVICE_NAME-REGION"
      

      Imposta i nomi host con i nomi che vuoi utilizzare per indirizzare il servizio. Tutti i client all'interno della stessa mesh di servizi possono chiamare questo servizio utilizzando l'URL http://<HOSTNAME>, indipendentemente dalla regione e dal progetto dell'utente chiamante. Se hai configurato Cloud DNS per utilizzare un indirizzo IP privato, il nome host della route può essere anche l'indirizzo URL run.app completo. In questo caso, puoi saltare il passaggio di configurazione di Cloud DNS.

      Sostituisci quanto segue:

      • DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
      • DOMAIN_NAME: il nome del dominio DNS.
      • PROJECT_ID: l'ID del progetto.
      • MESH_NAME: il nome della maglia.
      • REGION: il nome della regione.
    2. Crea la risorsa HTTPRoute utilizzando la specifica nel http_route.yaml file:

      gcloud network-services http-routes import DESTINATION_SERVICE_NAME-route \
      --source=http_route.yaml \
      --location=global
      
    3. Concedi il ruolo Invoker di Cloud Run (roles/iam.invoker) al servizio di destinazione Cloud Run eseguendo il seguente comando:

      gcloud run services add-iam-policy-binding DESTINATION_SERVICE_NAME \
      --region REGION \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.invoker

      Sostituisci quanto segue:

      • DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
      • REGION: il nome della regione.
      • PROJECT_NUMBER: il numero del progetto.

Crea il servizio Cloud Run client

La creazione di un servizio Cloud Run client crea un sidecar Envoy whose resources relate to your QPS and total configuration size. le cui risorse sono correlate al QPS e alle dimensioni totali della configurazione. La maggior parte delle volte, l'utilizzo della CPU è inferiore all'1% di una vCPU e l'utilizzo della memoria è inferiore a 50 MB.

Devi disporre dell'accesso in uscita dalla rete a una rete Virtual Private Cloud.

  • Per creare il servizio client per i test, esegui il deployment dell'app fortio in Cloud Run per consentire il reindirizzamento del traffico alle route HTTP:

    gcloud beta run deploy CLIENT_SERVICE_NAME \
    --region=REGION \
    --image=fortio/fortio \
    --network=VPC_NETWORK_NAME \
    --subnet=SUBNET_NAME \
    --mesh="projects/PROJECT_ID/locations/global/meshes/MESH_NAME"

    Sostituisci quanto segue:

    • CLIENT_SERVICE_NAME: il nome del servizio Cloud Run del cliente.
    • REGION: il nome della regione.
    • VPC_NETWORK_NAME: il nome della rete VPC, ad esempio "predefinita".
    • SUBNET_NAME: il nome della subnet; ad esempio, "predefinita".
    • PROJECT_ID: l'ID del progetto.
    • MESH_NAME: il nome della risorsa mesh.

Chiamare il servizio da un client mesh

Per inoltrare una richiesta al percorso di destinazione utilizzando l'app di test fortio della sezione precedente Creare il servizio client:

  1. Recupera l'URL del servizio client Cloud Run che hai creato eseguendo il seguente comando:

    TEST_SERVICE_URL=$(gcloud run services describe CLIENT_SERVICE_NAME \
    --region=REGION --format="value(status.url)" \
    --project=PROJECT_ID)

    Sostituisci quanto segue:

    • CLIENT_SERVICE_NAME: il nome del servizio Cloud Run del cliente.
    • REGION: il nome della regione.
    • PROJECT_ID: l'ID del progetto.
  2. Utilizza il comando curl per inviare una richiesta alla route di destinazione dell'endpoint fortio del passaggio precedente:

    curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/DESTINATION_SERVICE_NAME.DOMAIN_NAME"

    Sostituisci quanto segue:

    • DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
    • DOMAIN_NAME: il nome del dominio DNS.

Chiama il backend di Compute Engine da Cloud Run

Per eseguire il deployment di una route del servizio Compute Engine e Cloud Service Mesh utilizzando gruppi di istanze gestite come backend, configura il server HTTP basato su Compute Engine in Cloud Service Mesh. In questo modo, i client Cloud Run possono utilizzare questo percorso del servizio di backend per inviare richieste direttamente alle istanze Compute Engine.

Passaggi successivi