Configurar servicios gRPC sin proxy
En esta guía se muestra cómo configurar una malla de servicios gRPC sin proxy con recursos de Mesh
y GRPCRoute
.
GRPCRoute
y Mesh
(haz clic en la imagen para ampliarla)Antes de empezar
Lee el artículo Preparar la configuración con Envoy y cargas de trabajo sin proxy y completa los requisitos previos que se describen en él.
Configurar el recurso Mesh
Cuando una aplicación gRPC sin proxy se conecta a un xds:///hostname
, la biblioteca de cliente gRPC establece una conexión con Cloud Service Mesh. La biblioteca de cliente usa la conexión para obtener la configuración de enrutamiento necesaria para enrutar las solicitudes del nombre de host.
Anota el nombre del recurso Mesh
, que es la clave que usa la aplicación de gRPC sin proxy para solicitar la configuración asociada a esta malla.
Crea la especificación
Mesh
y guárdala en un archivo llamado mesh.yaml.name: grpc-mesh
Crea el recurso
Mesh
con la especificaciónmesh.yaml
:gcloud network-services meshes import grpc-mesh \ --source=mesh.yaml \ --location=global
Una vez creado el recurso Mesh
, Cloud Service Mesh estará listo para proporcionar la configuración, pero, como aún no se ha definido ningún servicio, la configuración estará vacía. En la siguiente sección, definirá los servicios y los asociará al recurso Mesh
.
Configurar el servidor gRPC
Para hacer una demostración, creas un servicio de backend con VMs autoescaladas en un grupo de instancias gestionado. Las VMs sirven la frase hello world
mediante el protocolo gRPC en el puerto 50051
.
Crea la plantilla de instancia de VM de Compute Engine con un servicio de gRPC
helloworld
que se exponga en el puerto50051
:gcloud compute instance-templates create-with-container grpc-td-vm-template \ --container-image=grpc/java-example-hostname:1.73.0 \ --tags=allow-health-checks \ --scopes=https://www.googleapis.com/auth/cloud-platform
Crea un grupo de instancias gestionado basado en la plantilla:
gcloud compute instance-groups managed create grpc-td-mig \ --zone=ZONE \ --size=2 \ --template=grpc-td-vm-template
Crea el puerto con nombre para el servicio gRPC. El puerto con nombre es el puerto en el que el servicio gRPC escucha las solicitudes. En el siguiente ejemplo, el puerto con nombre es
50051
:gcloud compute instance-groups set-named-ports grpc-td-mig \ --named-ports=grpc-helloworld-port:50051 \ --zone=ZONE
Crea una comprobación del estado de gRPC. Los servicios deben implementar el protocolo de comprobación del estado de gRPC para que las comprobaciones del estado de gRPC funcionen correctamente. Para obtener más información, consulta Comprobaciones del estado.
gcloud compute health-checks create grpc grpc-helloworld-health-check \ --use-serving-port
Crea una regla de cortafuegos para permitir las conexiones de comprobación del estado a las instancias de tu red:
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 servicio de backend global con un esquema de balanceo de carga
INTERNAL_SELF_MANAGED
y añade la comprobación de estado al servicio de backend. El puerto especificado aquí se usa para conectar con las VMs del grupo de instancias gestionado.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
Añade el grupo de instancias gestionado al servicio de backend.
gcloud compute backend-services add-backend grpc-helloworld-service \ --instance-group=grpc-td-mig \ --instance-group-zone=ZONE \ --global
Se han configurado los Mesh
recursos y servicios. En la siguiente sección, configurará el enrutamiento.
Configurar el enrutamiento con GRPCRoute
Sigue estas instrucciones para configurar el enrutamiento.
Crea la especificación
GRPCRoute
y guárdala en un archivo llamadogrpc_route.yaml
.Puedes usar
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 el recurso
GrpcRoute
con la especificacióngrpc_route.yaml
:gcloud network-services grpc-routes import helloworld-grpc-route \ --source=grpc_route.yaml \ --location=global
Cloud Service Mesh ahora está configurado para balancear la carga del tráfico de los servicios especificados en el recurso GRPCRoute
entre los backends del grupo de instancias gestionado.
Crear un cliente gRPC
Para verificar la configuración, crea una instancia de una aplicación gRPC sin proxy y conéctala a Cloud Service Mesh. En su archivo de arranque, la aplicación debe especificar la red de VPC indicada en la malla.
Una vez configurada, la aplicación puede enviar una solicitud a las instancias o los endpoints asociados a helloworld-gce
mediante el URI de servicio xds:///helloworld-gce
.
En los ejemplos siguientes, se usa la herramienta grpcurl para probar el servicio gRPC.
Crea una VM cliente.
gcloud compute instances create grpc-client \ --zone=ZONE\ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata-from-file=startup-script=<(echo '#!/bin/bash set -ex 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=grpc-mesh | tee $GRPC_XDS_BOOTSTRAP')
Configurar el archivo de arranque
La aplicación cliente debe tener un archivo de configuración de arranque. La secuencia de comandos de inicio de la sección anterior define la variable de entorno GRPC_XDS_BOOTSTRAP
y usa una secuencia de comandos auxiliar para generar el archivo de arranque.
Los valores de TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
y de la zona del archivo de arranque generado se obtienen del servidor de metadatos, que conoce estos detalles sobre tus instancias de VM. Puede proporcionar estos valores al script auxiliar manualmente mediante la opción --gcp-project-number
. Debes proporcionar un nombre de malla que coincida con el recurso Mesh
mediante la opción --config-mesh
.
Para verificar la configuración, inicia sesión en la VM del cliente y ejecuta lo siguiente.
Accede a la VM cliente mediante SSH.
gcloud compute ssh grpc-client --zone=ZONE
Descarga e instala la herramienta
grpcurl
.curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.9.2/grpcurl_1.9.2_linux_x86_64.tar.gz | tar -xz
Ejecuta la herramienta
grpcurl
conxds:///helloworld-gce
como URI de servicio yhelloworld.Greeter/SayHello
como nombre de servicio y método que invocar. Los parámetros del métodoSayHello
se transfieren mediante la opción-d
../grpcurl --plaintext \ -d '{"name": "world"}' \ xds:///helloworld-gce helloworld.Greeter/SayHello
Debería ver un resultado similar al siguiente, donde INSTANCE_HOSTNAME
es el nombre de una de las instancias de VM del servidor gRPC:
{ "message": "Hello world, from INSTANCE_HOSTNAME" }
El resultado verifica que el cliente de gRPC sin proxy se ha conectado correctamente a Cloud Service Mesh y ha obtenido información sobre los backends del servicio helloworld-gce
mediante el resolvedor de nombres xds
.
El cliente ha enviado una solicitud a uno de los back-ends del servicio sin necesidad de conocer la dirección IP ni de realizar la resolución de DNS.
Siguientes pasos
- Para obtener información sobre cómo enumerar los recursos de ruta asociados a un recurso
Mesh
oGateway
, consulta Enumerar recursos deRoute
.