Los enlaces exprés en Ambient Networking te permiten conectar un servicio de Cloud Run de origen a un servicio de Cloud Run de destino en el mismo proyecto y región sin escribir código de autenticación en tu aplicación ni configurar una malla de servicios.
Cuando un servicio de Cloud Run llama a otro servicio de Cloud Run protegido por Identity and Access Management (IAM), la solicitud debe incluir un token de ID de OpenID Connect (OIDC) para que el destino pueda verificar la identidad y los permisos del emisor. Sin un enlace exprés, debes escribir código de autenticación de servicio a servicio en tu aplicación para recuperar y adjuntar tokens del servidor de metadatos, o configurar recursos de Cloud Service Mesh, como una red de nube privada virtual (VPC), servicios de backend y reglas de enrutamiento. Un enlace exprés descarga este trabajo de autenticación y enrutamiento en el contenedor sidecar de Ambient completamente administrado, lo que mantiene el código de la aplicación portátil y enfocado en la lógica empresarial.
Casos de uso
Puedes usar enlaces exprés en las siguientes situaciones:
- Descarga la autenticación de servicio a servicio del código de la aplicación: conecta un servicio de Cloud Run que realiza llamadas a un servicio de Cloud Run de destino protegido por IAM a través de HTTP simple. El sidecar de Ambient recupera e inserta automáticamente el token de ID de OIDC del servicio de origen y encripta la solicitud a través de HTTPS.
- Abstrae las URLs de destino con nombres de host personalizados: Configura un nombre de host personalizado en el enlace exprés con la marca
--matches-hostnamepara que tu aplicación de origen envíe solicitudes a una dirección lógica, comohttp://my-backend, en lugar de codificar de forma fija la URL determinística del destino. Si el servicio de destino cambia, puedes volver a crear el enlace exprés para que apunte al nuevo destino sin modificar ni volver a implementar el código de la aplicación de origen. - Simplifica las llamadas de servicio de punto a punto sin una malla de servicios: Obtén inserción automática de credenciales entre los servicios de Cloud Run sin aprovisionar una red de VPC, grupos de extremos de red, servicios de backend o registros de Cloud DNS que requiere Cloud Service Mesh.
En la siguiente tabla, se comparan los pasos para configurar la comunicación autenticada entre servicios con y sin un enlace exprés:
| Paso | Sin un enlace exprés | Con un enlace exprés |
|---|---|---|
| 1. Implementa el servicio de destino | Implementa el servicio de Cloud Run de destino con la autenticación de IAM requerida (--no-allow-unauthenticated). |
Igual. |
| 2. Otorga permiso de invocador | Otorga el rol de Invocador de Cloud Run (roles/run.invoker) en el servicio de destino a la cuenta de servicio del servicio de origen. |
Igual. |
| 3. Configura la solicitud saliente | Escribe código en tu aplicación de origen para recuperar un token de ID de OIDC para la URL de destino y adjuntarlo al encabezado Authorization: Bearer a través de HTTPS. |
Envía una solicitud http:// simple a la URL de destino o al nombre de host personalizado sin código de autenticación en tu aplicación de origen. |
| 4. Implementa el servicio de origen | Implementa el servicio de Cloud Run de origen. | Implementa el servicio de Cloud Run de origen con Ambient Networking habilitado y, luego, crea un enlace exprés entre los servicios de origen y destino implementados. |
Arquitectura
Cuando habilitas Ambient Networking en un servicio de Cloud Run de origen y creas un enlace exprés, Cloud Run configura el contenedor sidecar de Envoy completamente administrado que se ejecuta junto con el contenedor de tu aplicación en cada instancia de contenedor.
Cuando tu aplicación envía una solicitud HTTP simple a la URL determinística del servicio de destino o a un nombre de host personalizado que configuras en el enlace exprés, el contenedor sidecar de Ambient realiza automáticamente lo siguiente:
- Intercepta las solicitudes HTTP salientes destinadas al servicio de destino.
- Recupera un token de ID de OIDC para la cuenta de servicio del servicio de origen y lo inserta en el encabezado
Authorization. - Encripta y reenvía la solicitud a través de HTTPS (TLS unidireccional) al servicio de Cloud Run de destino, que verifica los permisos de IAM del emisor.
Conectividad de red y plano de datos
Un enlace exprés configura la intercepción de solicitudes salientes y la inserción de credenciales en el sidecar de Ambient, pero no reemplaza la ruta de red subyacente entre tus servicios. Aún debes asegurarte de que tu servicio de origen pueda alcanzar la ruta de entrada del servicio de destino:
- La entrada de destino se establece en Todo: no se requiere ninguna red de VPC ni configuración de salida en tu servicio de origen.
- Entrada de destino configurada como Interna o Interna y balanceadores de cargas de Cloud: Debes enrutar el tráfico saliente desde tu servicio de origen a través de una red de VPC autorizada con la salida de VPC directa o un conector de Acceso a VPC sin servidores con el Acceso privado a Google habilitado. Para obtener más información, consulta Recibe solicitudes de otros servicios de Cloud Run.
Antes de comenzar
- Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Habilita las APIs de Cloud Run, Network Services y Traffic Director, si aún no están habilitadas.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.- Asegúrate de tener un servicio de Cloud Run de origen existente y un servicio de Cloud Run de destino existente en el mismo proyecto y región.
- Asegúrate de que
las redes de ambient estén
habilitadas con el permiso
globalen tu servicio de Cloud Run de origen. Por ejemplo, ejecutagcloud beta run services update SOURCE_SERVICE --ambient-networking --ambient-scope=global --region=REGION, pero recuerda primero aumentar los límites de CPU y memoria de tu servicio. -
Lee la página de precios de Cloud Run para conocer el uso del sidecar de Ambient Networking. La facturación de las funciones de ambiente no se aplica de manera forzosa durante la versión preliminar.
Roles obligatorios
Para obtener los permisos que necesitas para configurar enlaces exprés, pídele a tu administrador que te otorgue los siguientes roles de IAM:
-
Configura el enlace exprés:
Desarrollador de Cloud Run (
roles/run.developer) y Usuario de cuenta de servicio (roles/iam.serviceAccountUser) en el proyecto -
Administra los recursos de enlace exprés:
Administrador de servicios de red (
roles/networkservices.admin) en el proyecto
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
La identidad del servicio del servicio de Cloud Run de origen también debe tener los siguientes roles en el proyecto:
- Cliente de Traffic Director (
roles/trafficdirector.client) - Agente de Cloud Trace (
roles/cloudtrace.agent)
Para otorgar estos roles a la identidad de servicio, usa gcloud:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/trafficdirector.client" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:RUN_CLIENT_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/cloudtrace.agent"
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- RUN_CLIENT_SA: Es el nombre de la cuenta de servicio adjunta a tu servicio de Cloud Run de origen.
Si la identidad de servicio de Cloud Run no tiene estos roles, el servicio de Cloud Run se implementa de todos modos, pero las funciones que dependen de Ambient Networking no funcionan. Este comportamiento difiere de Cloud Service Mesh, en el que el servicio de Cloud Run no se implementa cuando faltan los roles requeridos.
Limitaciones
Se aplican las siguientes limitaciones a los vínculos exprés:
- Solo se admiten los servicios de Cloud Run como recursos de origen y destino. No se admiten los trabajos, los grupos de trabajadores ni las instancias de Cloud Run.
- No se admiten las configuraciones entre proyectos y entre regiones. El servicio de Cloud Run de origen y el servicio de Cloud Run de destino deben estar en el mismo proyecto y región.
- Los enlaces exprés requieren
Ambient Networking
con el alcance
globalen el servicio de origen. Si el servicio de origen usa el permisoregional, la creación del enlace exprés se realiza correctamente, pero el tráfico no se enruta. - Debes crear los servicios de Cloud Run de origen y destino antes de crear el enlace exprés. No se admite la creación desordenada. Si borras un servicio de destino, el enlace exprés puede seguir mostrando y aplicando la configuración obsoleta hasta que borres o vuelvas a crear el enlace exprés.
- No puedes actualizar el servicio de origen, el servicio de destino ni el nombre de host personalizado de un enlace exprés existente. El comando
gcloud beta network-services express-links updatesolo actualiza la descripción del enlace exprés. Para cambiar la configuración de enrutamiento, borra y vuelve a crear el enlace exprés. - Los servicios de Cloud Run de destino deben tener habilitada la
URL
run.apppredeterminada, incluso si usas URLs personalizadas, dominios personalizados o configuras un nombre de host personalizado con la marca--matches-hostname. - Las solicitudes enviadas a la URL no determinística del destino no se interceptan y fallan con un error
403 Forbidden. Si el servicio de destino no tiene una URL determinística porque el nombre del servicio y el número de proyecto combinados superan los 63 caracteres, debes especificar--matches-hostnameo la creación del enlace exprés fallará con un errorCloud Run Service name is too long. - Cuando ves el estado completo de un enlace exprés, solo se devuelve la información del servicio de destino. Es posible que falten detalles sobre las revisiones de Cloud Run de origen y la autenticación negociada, o que se muestren datos obsoletos. Esto no afecta la forma en que el enlace exprés enruta o autentica el tráfico.
- No se admiten los servicios de Cloud Run de origen configurados con la identidad del agente ni los tokens vinculados a mTLS.
- No se admiten los servicios de Cloud Run de origen configurados para enrutar el tráfico saliente a través de Agent Gateway en Cloud Run y el proxy web seguro. Los enlaces exprés requieren el permiso de alcance global de Ambient Networking, mientras que Agent Gateway requiere el permiso de alcance regional.
- Si una solicitud saliente del servicio de origen ya incluye un
encabezado
Authorization, el enlace exprés reenvía la solicitud con ese encabezado sin cambios y no inserta un token. No se admite la inserción automática de tokens en el encabezadoX-Serverless-Authorization. - No se admite el tráfico generado desde los contenedores de zona de pruebas de Cloud Run.
- No puedes usar enlaces exprés para reenviar tráfico a servicios de Cloud Run de destino que estén protegidos por Identity-Aware Proxy.
- Cada enlace exprés admite un servicio de Cloud Run de destino, y puedes crear hasta 5,000 enlaces exprés por proyecto.
Configura un enlace exprés
Para conectar tus servicios de Cloud Run, crea un enlace exprés especificando el servicio de origen y el de destino y, luego, otorga el rol de Invocador de Cloud Run en el servicio de destino.
Conéctate a otro servicio de Cloud Run
Para conectar un servicio de Cloud Run de origen a un servicio de Cloud Run de destino, crea un enlace exprés con gcloud o YAML.
gcloud
Usa el comando gcloud beta network-services express-links create
para crear un enlace exprés:
gcloud beta network-services express-links create EXPRESS_LINK_NAME \ --location=global \ --source-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE \ --destination-services=//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE
Reemplaza lo siguiente:
- EXPRESS_LINK_NAME: Es un nombre para tu enlace exprés.
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- REGION: la región en la que se implementan tus servicios de Cloud Run.
- SOURCE_SERVICE: Es el nombre del servicio de Cloud Run de origen.
- DESTINATION_SERVICE: Es el nombre del servicio de Cloud Run de destino.
Después de que se complete el comando, la configuración de enrutamiento puede tardar hasta 2 minutos en propagarse a las instancias de servicio de origen en ejecución.
De forma predeterminada, el enlace exprés solo intercepta las solicitudes enviadas a la
URL determinística del servicio de destino, no
a su URL no determinística. Para usar un nombre de host personalizado, pasa el nombre de host
sin un esquema en la
marca --matches-hostname="HOSTNAME", como
--matches-hostname="DESTINATION_SERVICE", y envía
solicitudes desde tu aplicación de origen a
http://HOSTNAME. Si especificas
--matches-hostname, se reemplaza la URL determinística en lugar de
agregarla.
YAML
Crea un archivo de configuración, por ejemplo,
express-link.yaml:name: "projects/PROJECT_ID/locations/global/expressLinks/EXPRESS_LINK_NAME" source: services: - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/SOURCE_SERVICE" destination: services: - "//run.googleapis.com/projects/PROJECT_ID/locations/REGION/services/DESTINATION_SERVICE"
Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- REGION: Es la región en la que se implementan tus servicios.
- EXPRESS_LINK_NAME: Es un nombre para tu enlace exprés.
- SOURCE_SERVICE: Es el nombre del servicio de Cloud Run de origen.
- DESTINATION_SERVICE: Es el nombre del servicio de Cloud Run de destino.
Importa el archivo YAML con el comando
gcloud beta network-services express-links import:gcloud beta network-services express-links import EXPRESS_LINK_NAME \ --location=global \ --source=YAML_FILENAME.yaml
Reemplaza lo siguiente:
- EXPRESS_LINK_NAME: Es un nombre para tu enlace exprés.
- YAML_FILENAME: Es el nombre de tu archivo YAML.
Otorga permisos de invocador en el servicio de destino
Para permitir que el servicio de origen invoque un servicio de destino protegido por IAM, otorga el rol de
Invocador de Cloud Run
(roles/run.invoker) a la cuenta de servicio del servicio de origen en el
servicio de Cloud Run de destino. Esto es necesario para que la autenticación funcione en el plano de datos.
gcloud run services add-iam-policy-binding DESTINATION_SERVICE \ --member="serviceAccount:SOURCE_SA@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGION
Reemplaza lo siguiente:
- DESTINATION_SERVICE: Es el nombre del servicio de Cloud Run de destino.
- SOURCE_SA: Es el nombre de la cuenta de servicio adjunta a tu servicio de Cloud Run de origen.
- PROJECT_ID: Es el ID del proyecto de Google Cloud .
- REGION: Es la región en la que se implementa tu servicio de destino.
Verifica el estado del enlace exprés
Para ver la configuración básica de tu enlace exprés, usa el
comando gcloud beta network-services express-links describe:
gcloud beta network-services express-links describe EXPRESS_LINK_NAME \ --location=global
Para ver el estado completo del enlace exprés, incluidos connectionStatus
(tipo de ruta activa, nombres de host que coinciden y URI de revisión de origen) y
cloudRunSourceInfo (métodos de autenticación configurados y red de
VPC), incluye ?view=EXPRESS_LINK_VIEW_FULL# en el nombre del recurso:
gcloud beta network-services express-links describe 'EXPRESS_LINK_NAME?view=EXPRESS_LINK_VIEW_FULL#' \ --location=global
Reemplaza EXPRESS_LINK_NAME por el nombre de tu enlace exprés. Conserva
las comillas simples y el carácter # final cuando consultes la vista completa.
Borra o vuelve a crear un enlace exprés
Para quitar un enlace exprés y detener la inserción automática de credenciales y la intercepción de tráfico
desde el servicio de origen, usa el
comando
gcloud beta network-services express-links delete:
gcloud beta network-services express-links delete EXPRESS_LINK_NAME \ --location=global
Reemplaza EXPRESS_LINK_NAME por el nombre de tu enlace exprés.
Para dirigir un enlace exprés existente a un servicio de destino diferente o cambiar
el parámetro de configuración --matches-hostname, borra el enlace exprés con el comando
anterior y, luego, crea un enlace exprés nuevo con la
configuración actualizada.
¿Qué sigue?
- Obtén más información para configurar Ambient Networking en los servicios de Cloud Run.
- Obtén más información sobre Agent Gateway en Cloud Run.
- Obtén más información sobre la autenticación de servicio a servicio en Cloud Run.
- Obtén información para restringir la entrada de extremos de red en los servicios de Cloud Run.