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. Offre inoltre una soluzione del piano dati completamente gestita elimina l'onere operativo della manutenzione dei tuoi asset collaterali del mesh di servizi.
Prima di iniziare
Avere familiarità con Cloud Service Mesh.
Configura il progetto:
gcloud config set core/project
PROJECT_ID
Nella console Google Cloud, abilita le API seguenti per il tuo progetto:
API Serverless VPC Access se utilizzi un connettore di accesso VPC serverless e non VPC diretto per l'uscita di rete.
Aggiorna i componenti di
gcloud
alla versione più recente (488.0.0 o successiva):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:
- Sviluppatore Cloud Run
(
roles/run.developer
) sul servizio Cloud Run - Utente account di servizio
(
roles/iam.serviceAccountUser
) nell'identità di servizio
L'account di servizio del client Cloud Run deve includere anche ruoli:
- Cliente Traffic Director
(
roles/trafficdirector.client
) per accedere API di routing dei servizi - Agente Cloud Trace (
roles/cloudtrace.agent
) per abilitare il tracciamento
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 autorizzazioni di deployment e gestire l'accesso.
Chiamata tra servizi Cloud Run utilizzando Cloud Service Mesh
Cloud Run utilizza Cloud Service Mesh
API di routing dei servizi.
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 chiamare da un servizio Cloud Run a un altro utilizzando Cloud Service Mesh, segui questi passaggi:
- Configura Cloud Service Mesh
- Configurare Cloud DNS
- Crea il servizio Cloud Run di destinazione
- Crea il NEG serverless
- Crea il servizio Cloud Run client
- Chiamare il servizio dal client mesh
Configurare un Cloud Service Mesh
Per creare un percorso del servizio utilizzando l'URL predefinito, salva la specifica
Mesh
in un file denominatomesh.yaml
:name:
MESH_NAME
Sostituisci
MESH_NAME
con il nome della risorsa mesh.Importa la risorsa
Mesh
dalla specifica eseguendo il seguente comando:gcloud network-services meshes import
MESH_NAME
\ --source=mesh.yaml \ --location=globalSostituisci
MESH_NAME
con risorsa mesh nome.
Configurare Cloud DNS
Puoi saltare la configurazione di Cloud DNS e andare
sezione successiva
se utilizzi un endpoint Private Service Connect
con l'indirizzo URL run.app
completo come nome host perché solo l'IP privato
di indirizzi IP esterni.
Quando un client mesh chiama il servizio di destinazione, il nome host utilizzato nella richiesta deve essere risolvibile tramite DNS. Qualsiasi documento RFC 1918 valido L'indirizzo IP è accettabile perché il file collaterale acquisisce tutto il traffico IP verso questi indirizzi IP di indirizzi IP esterni e la reindirizza in modo appropriato.
L'esempio seguente mostra come creare una voce *
con caratteri jolly in 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 che siano indirizzabili dal mesh.
Per creare un record Cloud DNS in una zona esclusiva, esegui i seguenti comandi:
Crea una zona DNS gestita privata in Cloud DNS per un mesh di servizi.
gcloud dns managed-zones create
MESH_NAME
\ --description="Domain forDOMAIN_NAME
service mesh routes" \ --dns-name=DOMAIN_NAME
. \ --networks=VPC_NETWORK_NAME
\ --visibility=privateCrea un record DNS all'interno della zona gestita privata appena creata. Marca 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=3600Sostituisci 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:
- 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 un record DNS personalizzato per l'URL
*.run.app
predefinito al fine di utilizzare Indirizzo endpoint Private Service Connect.
Crea il servizio Cloud Run di destinazione
Tieni presente che la destinazione Cloud Run non può avere URL predefinito disattivato.
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 dal 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 serverless (NEG)
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.
Crea un servizio di backend autogestito interno che faccia riferimento e il 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_NAME
con il nome del servizio di destinazione eREGION
con 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-neg \ --network-endpoint-group-region=REGION
Sostituisci
DESTINATION_SERVICE_NAME
con il nome del servizio di destinazione eREGION
con il nome della regione.
Crea una route HTTP che fa riferimento al servizio di backend.
La risorsa e i servizi
Mesh
sono configurati. Collegali con una risorsaHTTPRoute
che associa un nome host a un servizio di backend.Crea la specifica
HTTPRoute
e 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 desideri utilizzare per completamente gestito di Google Cloud. 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 l'utente. Se hai configurato Cloud DNS per utilizzare un indirizzo IP privato, il nome host della route può essere anche l'indirizzo URLrun.app
completo. In questo caso, puoi saltare il passaggio di configurazione di Cloud DNS.Sostituisci quanto segue:
DESTINATION_SERVICE_NAME
: il nome del dal 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.
Crea la risorsa
HTTPRoute
utilizzando la specifica nelhttp_route.yaml
file:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME
-route \ --source=http_route.yaml \ --location=globalConcedi 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
\ --regionREGION
\ --member=serviceAccount:PROJECT_NUMBER
-compute@developer.gserviceaccount.com \ --role=roles/run.invokerSostituisci quanto segue:
DESTINATION_SERVICE_NAME
: il nome del dal 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 collaterale Envoy le cui risorse sono correlate a QPS e dimensioni totali della configurazione. La maggior parte tempo, l'utilizzo della CPU è inferiore all'1% di una vCPU e l'utilizzo della memoria è inferiore 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 l'inoltro 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 con il tuo servizio Cloud Run.REGION
: il nome della regione.VPC_NETWORK_NAME
: il nome del tuo rete VPC; ad esempio "default".SUBNET_NAME
: il nome della subnet; ad esempio "predefinita".PROJECT_ID
: l'ID del progetto.MESH_NAME
: il nome della risorsa mesh.
Chiama 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:
Recupera l'URL del servizio client Cloud Run che 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 cliente dal servizio Cloud Run.REGION
: il nome della regione.PROJECT_ID
: l'ID del progetto.
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 dal 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 la route del servizio di backend le richieste vengono inviate 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
- Configurare i proxy Envoy con i servizi HTTP