Configura servizi gRPC senza proxy
Questa guida illustra come configurare un mesh di servizi gRPC senza proxy con
Mesh
e GRPCRoute
risorse.
GRPCRoute
e Mesh
(fai clic per ingrandire)Prima di iniziare
Assicurati di leggere Preparati per la configurazione con carichi di lavoro Envoy e senza proxy e di completare i prerequisiti descritti in quel documento.
Configurazione della risorsa Mesh
Quando un'applicazione gRPC senza proxy si connette a un xds://hostname
, la richiesta
la libreria client stabilisce una connessione a Cloud Service Mesh. La libreria client
utilizza la connessione per ottenere la configurazione del routing necessaria per indirizzare
richieste per il nome host.
Assicurati di prendere nota del nome della risorsa Mesh
, che è la chiave
che l'applicazione gRPC senza proxy utilizza per richiedere la configurazione associata
questo mesh.
Crea la specifica
Mesh
e salvala in un file denominato mesh.yaml.name: grpc-mesh
Crea la risorsa
Mesh
usando la specificamesh.yaml
:gcloud network-services meshes import grpc-mesh \ --source=mesh.yaml \ --location=global
Dopo aver creato la risorsa Mesh
, Cloud Service Mesh è pronto per gestire
ma, poiché non sono ancora stati definiti servizi, la configurazione
è vuoto. Nella sezione successiva, definirai i servizi e li collegherai al
Mesh
risorsa.
Configura il server gRPC
A scopo dimostrativo, crei un servizio di backend con VM con scalabilità automatica
in un gruppo di istanze gestite. Le VM gestiscono
frase hello world
utilizzando il protocollo gRPC sulla porta 50051
.
Crea il modello di istanza VM di Compute Engine con un
helloworld
servizio gRPC esposto sulla porta50051
:gcloud compute instance-templates create grpc-td-vm-template \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --tags=allow-health-checks \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata-from-file=startup-script=<(echo '#! /bin/bash set -e cd /root sudo apt-get update -y sudo apt-get install -y openjdk-11-jdk-headless curl -L https://github.com/grpc/grpc-java/archive/v1.38.0.tar.gz | tar -xz cd grpc-java-1.38.0/examples/example-hostname ../gradlew --no-daemon installDist sudo systemd-run ./build/install/hostname-server/bin/hostname-server')
Crea un gruppo di istanze gestite basato sul modello:
gcloud compute instance-groups managed create grpc-td-mig-us-east1 \ --zone=ZONE \ --size=2 \ --template=grpc-td-vm-template
Crea la porta denominata per il servizio gRPC. La porta denominata è la porta su cui il servizio gRPC rimane in ascolto delle richieste. Nell'esempio seguente, la porta denominata è
50051
:gcloud compute instance-groups set-named-ports grpc-td-mig-us-east1 \ --named-ports=grpc-helloworld-port:50051 \ --zone=ZONE
Crea un controllo di integrità gRPC. I servizi devono implementare Protocollo per il controllo di integrità gRPC in modo che i controlli di integrità gRPC funzionino correttamente. Per ulteriori informazioni, vedi controlli di integrità.
gcloud compute health-checks create grpc grpc-helloworld-health-check \ --use-serving-port
Crea una regola firewall per consentire le connessioni del controllo di integrità alle istanze nella tua rete:
gcloud compute firewall-rules create grpc-vm-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --target-tags allow-health-checks \ --rules=tcp:50051
Crea un servizio di backend globale con uno schema di bilanciamento del carico di
INTERNAL_SELF_MANAGED
e aggiungi l'integrità al servizio di backend. La porta specificata qui viene utilizzata per la connessione a le VM nel gruppo di istanze gestite.gcloud compute backend-services create grpc-helloworld-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=GRPC \ --port-name=grpc-helloworld-port \ --health-checks grpc-helloworld-health-check
Aggiungi il gruppo di istanze gestite al servizio di backend.
gcloud compute backend-services add-backend \ grpc-helloworld-service \ --instance-group=grpc-td-mig-us-east1 \ --instance-group-zone=ZONE \ --global
La risorsa e i servizi Mesh
sono configurati. Nella sezione successiva imposti
il routing.
Configurazione del routing con GRPCRoute
Segui le istruzioni riportate di seguito per configurare il routing.
Crea la specifica
GRPCRoute
e salvala in un file denominatogrpc_route.yaml
.Puoi utilizzare
PROJECT_ID
oPROJECT_NUMBER
.name: helloworld-grpc-route hostnames: - helloworld-gce meshes: - projects/PROJECT_NUMBER/locations/global/meshes/grpc-mesh rules: - action: destinations: - serviceName: projects/PROJECT_NUMBER/locations/global/backendServices/grpc-helloworld-service
Crea la risorsa
GrpcRoute
usando la specificagrpc_route.yaml
:gcloud network-services grpc-routes import helloworld-grpc-route \ --source=grpc_route.yaml \ --location=global
Cloud Service Mesh è ora configurato per bilanciare il carico del traffico per i servizi
specificato nella risorsa GRPCRoute
nei backend nell'istanza gestita
gruppo.
Crea un client gRPC
Puoi verificare la configurazione creando un'istanza di una gRPC senza proxy dell'applicazione e la connette a Cloud Service Mesh. Nel suo file di bootstrap, l'applicazione deve specificare la rete VPC indicata nel mesh.
Dopo la configurazione, l'applicazione può inviare una richiesta alle istanze
o endpoint associati a helloworld-gce
utilizzando xds:///helloworld-gce
l'URI del servizio.
Nei seguenti esempi, utilizzerai lo strumento grpcurl per testare gRPC completamente gestito di Google Cloud.
Creare una VM client.
gcloud compute instances create grpc-client \ --zone=ZONE\ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --metadata-from-file=startup-script=<(echo '#! /bin/bash set -e export GRPC_XDS_BOOTSTRAP=/run/td-grpc-bootstrap.json echo export GRPC_XDS_BOOTSTRAP=$GRPC_XDS_BOOTSTRAP | sudo tee /etc/profile.d/grpc-xds-bootstrap.sh curl -L https://storage.googleapis.com/traffic-director/td-grpc-bootstrap-0.16.0.tar.gz | tar -xz ./td-grpc-bootstrap-0.16.0/td-grpc-bootstrap --config-mesh-experimental grpc-mesh | tee $GRPC_XDS_BOOTSTRAP')
Configurare il file di bootstrap
L'applicazione client deve avere un file di configurazione di bootstrap. La startup
nella sezione precedente imposta lo script GRPC_XDS_BOOTSTRAP
di variabile di ambiente e utilizza uno script di supporto per generare il file di bootstrap.
I valori per TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
e per la zona nel
i file di bootstrap generati sono ottenuti dal server dei metadati che conosce questi
e i dettagli delle tue istanze VM. Puoi fornire questi valori all'assistente
manualmente usando l'opzione --gcp-project-number
. Devi
fornisci un nome mesh corrispondente alla risorsa Mesh
utilizzando
Opzione --config-mesh-experimental
.
Per verificare la configurazione, accedi alla VM client ed esegui seguire.
Accedi tramite SSH alla VM client.
gcloud compute ssh grpc-client
Scarica e installa lo strumento
grpcurl
.curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.1/grpcurl_1.8.1_linux_x86_64.tar.gz | tar -xz
Esegui lo strumento
grpcurl
conxds:///helloworld-gce
come URI del servizio ehelloworld.Greeter/SayHello
come nome del servizio e metodo da richiamare. La I parametri al metodoSayHello
vengono passati utilizzando l'opzione-d
../grpcurl --plaintext \ -d '{"name": "world"}' \ xds:///helloworld-gce helloworld.Greeter/SayHello
Dovresti vedere un output simile al seguente, dove INSTANCE_HOSTNAME
è il
nome dell'istanza VM:
Greeting: Hello world, from INSTANCE_HOSTNAME
L'output verifica che il client gRPC senza proxy si sia connesso correttamente
Cloud Service Mesh e abbiamo imparato a conoscere i backend per
helloworld-gce
servizio con il nome resolver xds
.
Il client ha inviato una richiesta a uno dei backend del servizio senza dover
informazioni sull'indirizzo IP o sull'esecuzione
di una risoluzione DNS.
Passaggi successivi
- Per informazioni su come elencare le risorse di percorso associate a
Mesh
oGateway
risorsa, vedi Elenco di risorseRoute
. Questa funzionalità è in anteprima.