Configura Cloud Service Mesh para Cloud Run
En esta página, se muestra cómo configurar Cloud Service Mesh para que se ejecute en una variedad de infraestructuras de procesamiento para los servicios de Cloud Run.
Cloud Service Mesh te permite habilitar las funciones avanzadas de administración del tráfico de la malla, como la división de tráfico ponderada y el balanceo de cargas global, así como las políticas de observabilidad y seguridad para el tráfico de un servicio de Cloud Run a otro. También te brinda una solución de plano de datos completamente administrada que quita la carga operativa de mantener tus propios sidecars de malla de servicios.
Antes de comenzar
Tener conocimientos sobre Cloud Service Mesh
Configura tu proyecto:
gcloud config set core/project
PROJECT_ID
En la consola de Google Cloud, habilita las siguientes APIs para tu proyecto:
API de Acceso a VPC sin servidores si usas un conector de acceso a VPC sin servidores y no una VPC directa para la salida de red.
Actualiza los componentes de
gcloud
a la versión más reciente (488.0.0 o una posterior):gcloud components update
Roles obligatorios
Para obtener los permisos que necesitas para configurar y, luego, implementar los servicios de Cloud Run, pide a tu administrador que te otorgue los siguientes roles de IAM:
- Desarrollador de Cloud Run (
roles/run.developer
) en el servicio de Cloud Run - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser
) en la identidad del servicio
La cuenta de servicio del cliente de Cloud Run también debe tener los siguientes roles:
- Cliente de Traffic Director (
roles/trafficdirector.client
) para acceder a las APIs de enrutamiento de servicios - Agente de Cloud Trace (
roles/cloudtrace.agent
) para habilitar el seguimiento
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con las APIs de Google Cloud, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información acerca de cómo otorgar roles, consulta Permisos de implementación y Administra el acceso.
Cómo realizar llamadas entre servicios de Cloud Run con Cloud Service Mesh
Cloud Run usa la malla de servicios de Cloud
APIs de Service Enrutamiento.
Estas APIs permiten que un servicio de Cloud Run llame a otros
servicios de Cloud Run con una URL personalizada en lugar del
proporcionó la URL de run.app
. Además, Cloud Run automáticamente
se autentica en el servicio de destino de Cloud Run
no tienes que configurar tu propia autenticación para adjuntar credenciales de solicitud a
otros servicios de Cloud Run.
Para llamar desde un servicio de Cloud Run a otro con Cloud Service Mesh, sigue estos pasos:
- Configura una malla de servicios en la nube
- Configura Cloud DNS
- Crea el servicio de destino de Cloud Run
- Crea el NEG sin servidores
- Crea el servicio cliente de Cloud Run
- Llama al servicio desde el cliente de malla
Configura una malla de servicios de Cloud
Para crear una ruta de servicio con la URL predeterminada, guarda
Mesh
la especificación en un archivo llamadomesh.yaml
:name:
MESH_NAME
Reemplaza
MESH_NAME
por el recurso de malla de la fuente de datos.Ejecuta el siguiente comando para importar el recurso
Mesh
de la especificación: :gcloud network-services meshes import
MESH_NAME
\ --source=mesh.yaml \ --location=globalReemplaza
MESH_NAME
por el nombre del recurso de malla.
Configura Cloud DNS
Puedes omitir la configuración de Cloud DNS y pasar a la siguiente sección si usas un extremo de Private Service Connect con la dirección URL run.app
completa como nombre de host, ya que solo se capturan las direcciones IP privadas.
Cuando un cliente de malla llama al servicio de destino, el nombre de host que se usa en la solicitud se debe poder resolver a través de DNS. Cualquier RFC 1918 válido La dirección IP es aceptable porque el archivo adicional captura todo el tráfico IP a estas direcciones IP. de direcciones IP y lo redirecciona de manera adecuada.
En el siguiente ejemplo, se muestra cómo crear una entrada comodín *
en Cloud DNS
que se resuelve en una sola dirección IP. Si no quieres usar una zona de Cloud DNS exclusiva, crea una entrada de Cloud DNS para cada nombre de host que corresponda a los servicios de Cloud Run a los que deseas que se pueda dirigir desde la malla.
Para crear un registro de Cloud DNS en una zona exclusiva, ejecuta los siguientes comandos:
Crear una zona de DNS administrada y privada en Cloud DNS para un servicio de la red de VPC.
gcloud dns managed-zones create
MESH_NAME
\ --description="Domain forDOMAIN_NAME
service mesh routes" \ --dns-name=DOMAIN_NAME
. \ --network=VPC_NETWORK_NAME
\ --visibility=privateCrea un registro DNS dentro de la zona privada administrada que acabas de crear. Marca asegúrate de que la dirección IP
10.0.0.1
no esté en uso.gcloud dns record-sets create "*.
DOMAIN_NAME
." \ --type=A \ --zone="MESH_NAME
" \ --rrdatas=10.0.0.1 \ --ttl=3600Reemplaza lo siguiente:
DOMAIN_NAME
: Es el nombre del dominio DNS.MESH_NAME
: Es el nombre del recurso de la malla.VPC_NETWORK_NAME
: Es el nombre de tu VPC. network; por ejemplo, “predeterminado”.
Accede a servicios internos con Cloud Service Mesh
Cloud Run te permite restringir el tráfico de red entrante a “interno”. Si tu servicio tiene habilitada esta restricción de entrada, el tráfico se puede configurar como “interno” cuando habilitas una ruta de acceso a Cloud Run.
Para acceder a los servicios internos con Cloud Service Mesh, usa una de las con los siguientes métodos:
- Configura el Acceso privado a Google para tu red de VPC. No es necesario configurar un registro DNS personalizado.
- Conecta un extremo de Private Service Connect a Cloud Service Mesh.
Esto requiere la configuración de un registro DNS personalizado para que la URL predeterminada de
*.run.app
use la dirección del extremo de Private Service Connect.
Crea el servicio de Cloud Run de destino
Ten en cuenta que el destino de Cloud Run no puede tener URL predeterminada inhabilitada.
Implementa un servicio nuevo o existente de Cloud Run:
gcloud run deploy
DESTINATION_SERVICE_NAME
\ --no-allow-unauthenticated \ --region=REGION
\ --image=IMAGE_URL
Reemplaza lo siguiente:
DESTINATION_SERVICE_NAME
: Es el nombre de la servicio de destino de Cloud Run.REGION
: es el nombre de la región.IMAGE_URL
: Una referencia a la imagen de contenedor comous-docker.pkg.dev/cloudrun/container/hello:latest
.
Crea el grupo de extremos de red (NEG) sin servidores
Ejecuta el siguiente comando para crear el NEG de destino:
gcloud compute network-endpoint-groups create destination-neg \ --region=
REGION
\ --network-endpoint-type=serverless \ --cloud-run-service=DESTINATION_SERVICE_NAME
Reemplaza lo siguiente:
REGION
: es el nombre de la región.DESTINATION_SERVICE_NAME
: El nombre del servicio de Cloud Run de destino.
Crea un servicio interno de backend autoadministrado que haga referencia al NEG sin servidores.
Crea el servicio de backend:
gcloud compute backend-services create
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGEDReemplaza
DESTINATION_SERVICE_NAME
por el nombre del servicio de destino yREGION
por el nombre de la región.Agrega el backend sin servidores al servicio de backend:
gcloud compute backend-services add-backend
DESTINATION_SERVICE_NAME
-REGION
\ --global \ --network-endpoint-group=destination-neg \ --network-endpoint-group-region=REGION
Reemplaza
DESTINATION_SERVICE_NAME
por el nombre del servicio de destino yREGION
por el nombre de la región.
Crea una ruta HTTP que haga referencia al servicio de backend.
Los servicios y el recurso
Mesh
están configurados. Conéctalos con un RecursoHTTPRoute
que asocia un nombre de host con un servicio de backend.Crea la especificación
HTTPRoute
y guárdala en un archivo llamadohttp_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
"Establece los nombres de host que deseas usar para abordar la servicio. Todos los clientes de la misma malla de servicios pueden llamar a este servicio. usando la URL
http://<HOSTNAME>
, sin importar la región y el proyecto de el llamador. Si configuraste Cloud DNS para usar una dirección IP privada, el nombre de host de la ruta también puede ser la dirección URLrun.app
completa. En ese caso, puedes omitir el paso de configuración de Cloud DNS.Reemplaza lo siguiente:
DESTINATION_SERVICE_NAME
: El nombre del servicio de Cloud Run de destino.DOMAIN_NAME
: Es el nombre del dominio DNS.PROJECT_ID
: el ID del proyecto.MESH_NAME
: Es el nombre de la malla.REGION
: es el nombre de la región.
Crea el recurso
HTTPRoute
con la especificación del archivohttp_route.yaml
:gcloud network-services http-routes import
DESTINATION_SERVICE_NAME
-route \ --source=http_route.yaml \ --location=globalEjecuta el siguiente comando para otorgar el rol de invocador de Cloud Run (
roles/iam.invoker
) en el servicio de destino de Cloud Run:gcloud run services add-iam-policy-binding
DESTINATION_SERVICE_NAME
\ --regionREGION
\ --member=serviceAccount:PROJECT_NUMBER
-compute@developer.gserviceaccount.com \ --role=roles/run.invokerReemplaza lo siguiente:
DESTINATION_SERVICE_NAME
: Es el nombre de la servicio de destino de Cloud Run.REGION
: es el nombre de la región.PROJECT_NUMBER
: Es el número del proyecto.
Crea el servicio de Cloud Run del cliente
Cuando creas un servicio cliente de Cloud Run, se crea un archivo adicional de Envoy. cuyos recursos se relacionan con las QPS y el tamaño total de la configuración. La mayor parte del tiempo, el uso de la CPU es inferior al 1% de una CPU virtual y el uso de la memoria es inferior a 50 MB.
Debes tener acceso de salida de red a una red de nube privada virtual.
Para crear el servicio de cliente para pruebas, implementa la app de fortio en Cloud Run para permitir el reenvío de tráfico a las rutas 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
"Reemplaza lo siguiente:
CLIENT_SERVICE_NAME
: Es el nombre de la cliente de Cloud Run.REGION
: el nombre de tu región.VPC_NETWORK_NAME
: Es el nombre de tu red de VPC, por ejemplo, “default”.SUBNET_NAME
: Es el nombre de tu subred, por ejemplo, "predeterminada".PROJECT_ID
: el ID de tu proyecto.MESH_NAME
: Es el nombre del recurso de malla.
Llama al servicio desde un cliente de malla
Para reenviar una solicitud a la ruta de destino con la app de prueba de fortio de la sección anterior Crea un servicio de cliente, haz lo siguiente:
Recupera la URL del servicio cliente de Cloud Run que con la ejecución del siguiente comando:
TEST_SERVICE_URL=$(gcloud run services describe
CLIENT_SERVICE_NAME
\ --region=REGION
--format="value(status.url)" \ --project=PROJECT_ID
)Reemplaza lo siguiente:
CLIENT_SERVICE_NAME
: Es el nombre del cliente. servicio de Cloud Run.REGION
: el nombre de tu región.PROJECT_ID
: el ID de tu proyecto.
Usa el comando
curl
para enviar una solicitud a la ruta de destino del fortio endpoint del paso anterior:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "$TEST_SERVICE_URL/fortio/fetch/
DESTINATION_SERVICE_NAME
.DOMAIN_NAME
"Reemplaza lo siguiente:
DESTINATION_SERVICE_NAME
: El nombre del servicio de Cloud Run de destino.DOMAIN_NAME
: Es el nombre del dominio DNS.
Llama al backend de Compute Engine desde Cloud Run
Implementa una ruta de servicio de Compute Engine y Cloud Service Mesh grupos de instancias administrados como backends Configura el servidor HTTP basado en Compute Engine en Cloud Service Mesh. Esto permite que los clientes de Cloud Run usen esta ruta de servicio de backend para enviar solicitudes directamente a instancias de Compute Engine.
Próximos pasos
- Explora las configuraciones de redes comunes de Cloud Run para redes públicas y privadas
- Configura redes privadas para Cloud Run
- Configura proxies de Envoy con servicios HTTP