Configura Cloud Service Mesh per Cloud Run
Questa pagina mostra come configurare Cloud Service Mesh per l'esecuzione su una gamma di infrastrutture di computing per i servizi Cloud Run.
Cloud Service Mesh consente di abilitare le funzionalità avanzate di gestione del traffico del mesh, come la suddivisione del traffico ponderata e il bilanciamento del carico globale, nonché le policy di osservabilità e sicurezza per il traffico da un servizio Cloud Run a un altro. Offre anche una soluzione per il piano dati completamente gestita che elimina l'onere operativo di gestire i sidecar del mesh di servizi.
Prima di iniziare
Prendi dimestichezza con Cloud Service Mesh.
Configura il progetto:
gcloud config set core/project
PROJECT_IDNella console Google Cloud , abilita le seguenti API per il tuo progetto:
Se utilizzi un connettore di accesso VPC serverless e non VPC diretto per il traffico di rete in uscita:
Aggiorna i componenti
gcloudall'ultima versione (488.0.0 o successive):gcloud components update
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare ed eseguire il deployment di servizi Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Cloud Run Developer
(
roles/run.developer) sul servizio Cloud Run - Service Account User
(
roles/iam.serviceAccountUser) sull'identità di servizio
Il service account del client Cloud Run deve disporre anche dei seguenti ruoli:
- Client Traffic Director
(
roles/trafficdirector.client) per accedere alle API di routing dei servizi - Cloud Trace Agent (
roles/cloudtrace.agent) per abilitare la tracciabilità
Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.
Effettua una chiamata tra i 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 esegue automaticamente l'autenticazione nel servizio Cloud Run di destinazione, così non devi configurare l'autenticazione per allegare le credenziali della richiesta ad altri servizi Cloud Run.
Per chiamare un servizio Cloud Run da un altro utilizzando Cloud Service Mesh, segui questi passaggi:
- Configura un mesh di servizi Cloud
- Configura Cloud DNS
- Crea il servizio Cloud Run di destinazione
- Crea il NEG serverless
- Crea il servizio Cloud Run client
- Chiama il servizio dal client mesh
Configura un mesh di servizi Cloud
Per creare una route di servizio utilizzando l'URL predefinito, salva la specifica
Meshin un file denominatomesh.yaml:name:
MESH_NAMESostituisci
MESH_NAMEcon il nome della risorsa mesh.Importa la risorsa
Meshdalla specifica eseguendo il comando seguente:gcloud network-services meshes import
MESH_NAME\ --source=mesh.yaml \ --location=globalSostituisci
MESH_NAMEcon il nome della risorsa mesh.
Configura Cloud DNS
Puoi saltare la configurazione di Cloud DNS e passare 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. Qualsiasi indirizzo IP RFC 1918 valido è accettabile, perché il sidecar acquisisce tutto il traffico IP verso questi intervalli di indirizzi IP e lo reindirizza in modo appropriato.
L'esempio seguente mostra come creare una voce * con caratteri jolly nella zona Cloud DNS che si 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 siano indirizzabili dal mesh.
Per creare un record Cloud DNS in una zona esclusiva, esegui i comandi seguenti:
Crea una zona DNS gestita privata in Cloud DNS per un mesh di servizi.
gcloud dns managed-zones create
MESH_NAME\ --description="Domain forDOMAIN_NAMEservice mesh routes" \ --dns-name=DOMAIN_NAME. \ --networks=VPC_NETWORK_NAME\ --visibility=privateCrea un record DNS all'interno della zona privata gestita appena creata. Assicurati che l'indirizzo IP
10.0.0.1non sia utilizzato.gcloud dns record-sets create "*.
DOMAIN_NAME." \ --type=A \ --zone="MESH_NAME" \ --rrdatas=10.0.0.1 \ --ttl=3600Sostituisci quanto segue:
DOMAIN_NAME: il nome del dominio DNS.MESH_NAME: il nome della risorsa mesh.VPC_NETWORK_NAME: il nome della tua rete VPC; ad esempio, "default".
Accedi ai servizi interni con Cloud Service Mesh
Cloud Run consente di limitare il traffico di rete in entrata al traffico "interno". Se questa limitazione del traffico in entrata è abilitata per il tuo servizio, il traffico che viaggia dal mesh attraverso la rete virtual private cloud può essere impostato come "interno" quando abiliti un percorso di accesso a Cloud Run.
Per accedere ai servizi interni con Cloud Service Mesh, utilizza uno dei metodi seguenti:
- Configura l'accesso privato Google per la tua rete VPC. Non è necessario configurare un record DNS personalizzato.
- Collega un endpoint Private Service Connect a Cloud Service Mesh.
Questa operazione richiede la configurazione di record DNS personalizzati, affinché l'URL
*.run.apppredefinito utilizzi l'indirizzo dell'endpoint Private Service Connect.
Crea il servizio Cloud Run di destinazione
Tieni presente che la destinazione Cloud Run non può avere l'URL predefinito disabilitato.
Esegui il deployment di un servizio Cloud Run nuovo o esistente:
gcloud run deploy
DESTINATION_SERVICE_NAME\ --no-allow-unauthenticated \ --region=REGION\ --image=IMAGE_URLSostituisci quanto segue:
DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.REGION: il nome della regione.IMAGE_URL: un riferimento all'immagine container, ad esempious-docker.pkg.dev/cloudrun/container/hello:latest.
Crea il gruppo di endpoint di rete (NEG) serverless
Crea il NEG di destinazione eseguendo questo comando:
gcloud compute network-endpoint-groups create
DESTINATION_SERVICE_NAME-neg \ --region=REGION\ --network-endpoint-type=serverless \ --cloud-run-service=DESTINATION_SERVICE_NAMESostituisci quanto segue:
REGION: il nome della regione.DESTINATION_SERVICE_NAME: il nome del servizio Cloud Run di destinazione.
Crea un servizio di backend interno autogestito che faccia riferimento al NEG serverless.
Crea il servizio di backend:
gcloud compute backend-services create
DESTINATION_SERVICE_NAME-REGION\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDSostituisci
DESTINATION_SERVICE_NAMEcon il nome del servizio di destinazione eREGIONcon il nome della regione.Aggiungi il backend serverless al servizio di backend:
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME-REGION\ --global \ --network-endpoint-group=DESTINATION_SERVICE_NAME-neg \ --network-endpoint-group-region=REGIONSostituisci
DESTINATION_SERVICE_NAMEcon il nome del servizio di destinazione eREGIONcon il nome della regione.
Crea una route HTTP che faccia riferimento al servizio di backend.
La risorsa
Meshe i servizi sono configurati. Collegali con una risorsaHTTPRouteche associa un nome host con un servizio di backend.Crea la specifica
HTTPRoutee salvala in un file denominatohttp_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 sui nomi che vuoi utilizzare per indirizzare il servizio. Tutti i client all'interno dello stesso mesh di servizi possono chiamare questo servizio utilizzando l'URL
http://<HOSTNAME>, indipendentemente dalla regione e dal progetto del chiamante. Se hai configurato Cloud DNS per utilizzare un indirizzo IP privato, il nome host della route può essere anche l'indirizzo URLrun.appcompleto. 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 del mesh.REGION: il nome della regione.
Crea la risorsa
HTTPRouteutilizzando la specifica nel filehttp_route.yaml:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME-route \ --source=http_route.yaml \ --location=globalConcedi il ruolo Cloud Run Invoker (
roles/iam.invoker) sul servizio Cloud Run di destinazione eseguendo questo comando:gcloud run services add-iam-policy-binding
DESTINATION_SERVICE_NAME\ --regionREGION\ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.invokerSostituisci 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 le cui risorse sono correlate alle 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 forwarding 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 client.REGION: il nome della regione.VPC_NETWORK_NAME: il nome della tua rete VPC; ad esempio, "default".SUBNET_NAME: il nome della tua subnet; ad esempio, "default".PROJECT_ID: l'ID progetto.MESH_NAME: il nome della risorsa mesh.
Chiama il servizio da un client mesh
Per inoltrare una richiesta alla route di destinazione utilizzando l'app di test fortio dalla sezione precedente Crea un servizio client:
Recupera l'URL del servizio client Cloud Run che hai creato eseguendo questo 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 client.REGION: il nome della regione.PROJECT_ID: l'ID progetto.
Utilizza il comando
curlper 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 di 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 questa route del servizio di backend per inviare richieste direttamente alle istanze Compute Engine.
Passaggi successivi
- Esplora le configurazioni di networking comuni di Cloud Run per il networking pubblico e privato
- Configura il networking privato per Cloud Run
- Configura i proxy Envoy con i servizi HTTP
- Instrada il traffico dai servizi Cloud Run ai workload Cloud Service Mesh su GKE
- Instrada il traffico dai workload Cloud Service Mesh ai servizi Cloud Run