Configurar la malla de servicios de Cloud para Cloud Run

Esta página muestra cómo configurar Cloud Service Mesh para que se ejecute en un rango de infraestructura 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

  1. Tener conocimientos de Cloud Service Mesh

  2. Configura tu proyecto:

    gcloud config set core/project PROJECT_ID
  3. En la consola de Google Cloud, habilita las siguientes APIs para tu proyecto:

  4. 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:

La cuenta de servicio del cliente de Cloud Run también debe tener los siguientes roles:

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.

Llamada 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 se autentica automáticamente en el servicio de Cloud Run de destino para que no tengas 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:

  1. Configura una malla de servicios en la nube
  2. Configura Cloud DNS
  3. Crea el servicio de Cloud Run de destino
  4. Crea el NEG sin servidores
  5. Crea el servicio cliente de Cloud Run
  6. Llama al servicio desde el cliente de malla

Configura una malla de servicios de Cloud

  1. Para crear una ruta de servicio con la URL predeterminada, guarda la especificación Mesh en un archivo llamado mesh.yaml:

    name: MESH_NAME

    Reemplaza MESH_NAME por el nombre del recurso de malla.

  2. Ejecuta el siguiente comando para importar el recurso Mesh de la especificación:

    gcloud network-services meshes import MESH_NAME \
      --source=mesh.yaml \
      --location=global

    Reemplaza 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 * con comodín en la zona de Cloud DNS que se resuelve en una sola dirección IP. Si no quieres usar una Zona de Cloud DNS, crea una entrada de Cloud DNS Para cada nombre de host correspondiente a los servicios de Cloud Run que quieres se puedan direccionar desde la malla.

  • Para crear un registro de Cloud DNS en una zona exclusiva, ejecuta el siguiente comando: comandos:

    1. Crea una zona de DNS privada administrada en Cloud DNS para una malla de servicios.

      gcloud dns managed-zones create MESH_NAME \
      --description="Domain for DOMAIN_NAME service mesh routes" \
      --dns-name=DOMAIN_NAME. \
      --network=VPC_NETWORK_NAME \
      --visibility=private
    2. Crea 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=3600

      Reemplaza lo siguiente:

      • DOMAIN_NAME: Es el nombre del dominio DNS.
      • MESH_NAME: Es el nombre del recurso de malla.
      • VPC_NETWORK_NAME: Es el nombre de tu red de VPC, por ejemplo, "predeterminada".

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:

Crea el servicio de Cloud Run de destino

Ten en cuenta que el destino de Cloud Run no puede tener la URL predeterminada inhabilitada.

  1. 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 como us-docker.pkg.dev/cloudrun/container/hello:latest.

Crea el grupo de extremos de red sin servidores (NEG)

  1. Para crear el NEG de destino, ejecuta el siguiente comando:

    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: Es el nombre de la servicio de destino de Cloud Run.
  2. Crea un servicio interno de backend autoadministrado que haga referencia al NEG sin servidores.

    1. Crea el servicio de backend:

      gcloud compute backend-services create DESTINATION_SERVICE_NAME-REGION \
      --global \
      --load-balancing-scheme=INTERNAL_SELF_MANAGED

      Reemplaza DESTINATION_SERVICE_NAME por el nombre del servicio de destino y REGION por el nombre de la región.

    2. 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 y REGION por el nombre de la región.

  3. Crea una ruta HTTP que haga referencia al servicio de backend.

    Los servicios y el recurso Mesh están configurados. Conéctalos con un recurso HTTPRoute que asocie un nombre de host con un servicio de backend.

    1. Crea la especificación HTTPRoute y guárdala en un archivo llamado http_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 con los nombres que deseas usar para dirigir el 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 URL run.app completa. En ese caso, puedes omitir el paso de configuración de Cloud DNS.

      Reemplaza lo siguiente:

      • DESTINATION_SERVICE_NAME: Es el nombre de la servicio de destino de Cloud Run.
      • 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.
    2. Crea el recurso HTTPRoute con la especificación en el Archivo http_route.yaml:

      gcloud network-services http-routes import DESTINATION_SERVICE_NAME-route \
      --source=http_route.yaml \
      --location=global
      
    3. Ejecuta 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 \
      --region REGION \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.invoker

      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.
      • 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.

  • Si deseas crear el servicio de cliente para realizar pruebas, implementa la app de fortio en Cloud Run para permitir el reenvío de tráfico a 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 del servicio de Cloud Run del cliente.
    • REGION: el nombre de tu región.
    • VPC_NETWORK_NAME: Es el nombre de tu red de VPC; por ejemplo, “predeterminado”.
    • 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.

Cómo llamar 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:

  1. 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.
  2. Usa el comando curl para enviar una solicitud a la ruta de destino del extremo de fortio 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: Es el nombre de la servicio de destino de Cloud Run.
    • 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 las instancias de Compute Engine.

Próximos pasos