En esta página se explica cómo desplegar un balanceador de carga de aplicaciones externo regional con un backend de Cloud Run. Para configurarlo, usa un backend de NEG sin servidor para el balanceador de carga.
Antes de probar este procedimiento, asegúrate de que conoces los siguientes temas:
- Descripción general del balanceador de carga de aplicaciones externo
- Información general sobre los NEGs sin servidor
En este documento se explica cómo configurar un balanceador de carga de aplicaciones que proxy las solicitudes a un backend de NEG sin servidor.
Los NEGs sin servidor te permiten usar servicios de Cloud Run con tu balanceador de carga. Después de configurar un balanceador de carga con el backend de NEG sin servidor, las solicitudes al balanceador de carga se enrutan al backend de Cloud Run.
Antes de empezar
Instala el SDK de Google Cloud
Instala la herramienta Google Cloud CLI. Para obtener información conceptual y sobre la instalación de la CLI de gcloud, consulta la información general sobre la CLI de gcloud.
Si no has ejecutado la CLI de gcloud anteriormente, ejecuta primero gcloud init
para inicializar tu directorio de la CLI de gcloud.
Desplegar un servicio de Cloud Run
En estas instrucciones, se presupone que ya tienes un servicio Cloud Run en ejecución.
En el ejemplo de esta página, puedes usar cualquiera de las guías de inicio rápido de Cloud Run para desplegar un servicio de Cloud Run.
El NEG sin servidor y el balanceador de carga deben estar en la misma región que el servicio de Cloud Run. Puedes bloquear las solicitudes externas que se envían directamente a las URLs predeterminadas del servicio de Cloud Run restringiendo el acceso ainternal and cloud load
balancing
. Por ejemplo:
gcloud run deploy CLOUD_RUN_SERVICE_NAME \ --platform=managed \ --allow-unauthenticated \ --ingress=internal-and-cloud-load-balancing \ --region=REGION \ --image=IMAGE_URL
Anota el nombre del servicio que crees. En el resto de esta página se explica cómo configurar un balanceador de carga que enrute las solicitudes a este servicio.
Configurar permisos
Para seguir esta guía, debes crear un NEG sin servidor y un balanceador de carga en un proyecto. Debes ser propietario o editor de un proyecto, o bien tener los siguientes roles y permisos de gestión de identidades y accesos de Compute Engine:
Tarea | Rol necesario |
---|---|
Crear balanceadores de carga y componentes de red | Administrador de red de Compute (roles/compute.networkAdmin ) |
Crear y modificar grupos de puntos de conexión de red | Administrador de instancias de Compute (v. 1) (roles/compute.instanceAdmin.v1 ) |
Crear y modificar certificados SSL | Administrador de seguridad (roles/iam.securityAdmin ) |
Configurar la red y las subredes
Para configurar la red y sus subredes, sigue estos pasos:
- Crea una red de nube privada virtual (VPC) y una subred.
- Crea una subred de solo proxy.
Crear la red VPC
Crea una red de VPC en modo personalizado.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En Nombre, escribe
lb-network
.Haz clic en Crear.
gcloud
Crea la red de VPC personalizada con el comando
gcloud compute networks create
:gcloud compute networks create lb-network --subnet-mode=custom
Crear una subred de solo proxy
Crea una subred de solo proxy para todos los balanceadores de carga regionales basados en Envoy de una región específica de la red lb-network
.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haga clic en el nombre de la red VPC compartida a la que quiera añadir la subred de solo proxy.
Haz clic en Añadir subred.
En el campo Name (Nombre), introduce
proxy-only-subnet
.Selecciona una región.
En Propósito, selecciona Proxy gestionado regional.
Introduce un intervalo de direcciones IP como
10.129.0.0/23
.Haz clic en Añadir.
gcloud
Crea la subred de solo proxy con el comando gcloud compute networks subnets
create
.
En este ejemplo se usa el intervalo de direcciones IP 10.129.0.0/23
para la subred solo de proxy. Puedes configurar cualquier intervalo de subred válido.
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION \ --network=lb-network \ --range=10.129.0.0/23
Crear el balanceador de carga
En el siguiente diagrama, el balanceador de carga usa un backend de NEG sin servidor para dirigir las solicitudes a un servicio de Cloud Run sin servidor.
El tráfico que va del balanceador de carga a los backends de NEG sin servidor usa rutas especiales definidas fuera de tu VPC que no están sujetas a reglas de cortafuegos. Por lo tanto, si tu balanceador de carga solo tiene backends de NEG sin servidor, no tienes que crear reglas de cortafuegos para permitir que el tráfico de la subred de solo proxy llegue al backend sin servidor.
Consola
Selecciona el tipo de balanceador de carga
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en Crear balanceador de carga.
- En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
- En Público o interno, selecciona Público (externo) y haz clic en Siguiente.
- Para la implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo regionales y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
- En el nombre del balanceador de carga, introduce
serverless-lb
. - Selecciona la red como
lb_network
. - Mantén la ventana abierta para continuar.
Configurar el frontend
- Antes de continuar, asegúrate de que tienes un certificado SSL.
- Haz clic en Configuración de frontend.
- Escribe un nombre.
- Para configurar un balanceador de carga de aplicación externo regional, rellena los campos de la siguiente manera.
- En Protocol (Protocolo), selecciona HTTPS.
- En Nivel de servicio de red, selecciona Estándar.
- En Versión de IP, selecciona IPv4.
- En Dirección IP, selecciona Efímera.
- En Puerto, selecciona
443
. En Certificado, selecciona un certificado SSL o crea uno.
En el siguiente ejemplo se muestra cómo crear certificados SSL de Compute Engine:
- Haz clic en Crear certificado.
- En el campo Nombre, introduce un nombre.
- En los campos correspondientes, sube los archivos con formato PEM:
- Certificado
- Clave privada
- Haz clic en Crear.
- Opcional: Para crear un balanceador de carga HTTP, haz lo siguiente:
- En Protocolo, selecciona HTTP.
- En Nivel de servicio de red, selecciona Estándar.
- En Versión de IP, selecciona IPv4.
- En Dirección IP, selecciona Efímera.
- En Puerto, selecciona
80
. - Haz clic en Listo.
Si quieres probar este proceso sin configurar un recurso de certificado SSL, puedes configurar un balanceador de carga HTTP.
Configurar los servicios de backend
- Haz clic en Configuración de backend.
- En el menú Crear o seleccionar servicios de backend, coloca el puntero sobre Servicios de backend y, a continuación, selecciona Crear un servicio de backend.
- En la ventana Crear un servicio de backend, introduce un Nombre.
- En Tipo de backend, selecciona Grupo de endpoints de red sin servidor.
- No modifiques el valor de Protocol. Este parámetro se ignora.
- Backends > New backend (Backends > Nuevo backend), selecciona Create serverless network endpoint group (Crear grupo de endpoints de red sin servidor).
- En la ventana Crear grupo de endpoints de red sin servidor, introduce un Nombre.
- En Región, se muestra la región del balanceador de carga.
- En el campo Tipo de grupo de endpoints de red sin servidor, selecciona Cloud Run. Cloud Run es el único tipo admitido.
- Selecciona Seleccionar nombre de servicio.
- En la lista Servicio, seleccione el servicio de Cloud Run para el que quiera crear un balanceador de carga.
- Haz clic en Listo.
- Haz clic en Crear.
-
Opcional: Configura una política de seguridad de backend predeterminada. La política de seguridad predeterminada limita el tráfico por encima de un umbral configurado por el usuario. Para obtener más información sobre las políticas de seguridad predeterminadas, consulta el artículo Descripción general de la limitación de frecuencia.
- Para inhabilitar la política de seguridad predeterminada de Cloud Armor, selecciona
None
en la lista Política de seguridad de backend de Cloud Armor. - Para configurar la política de seguridad predeterminada de Cloud Armor, selecciona Política de seguridad predeterminada en la lista Política de seguridad de backend de Cloud Armor.
- En el campo Nombre de la política, acepta el nombre generado automáticamente o introduce un nombre para tu política de seguridad.
- En el campo Número de solicitudes, acepta el número de solicitudes predeterminado o introduce un número entero entre
1
y10,000
. - En el campo Intervalo, selecciona un intervalo.
- En el campo Enforce on key (Aplicar en clave), elige uno de los siguientes valores: All (Todo), IP address (Dirección IP) o X-Forwarded-For IP address (Dirección IP X-Forwarded-For). Para obtener más información sobre estas opciones, consulta Identificar clientes para limitar la frecuencia.
- Para inhabilitar la política de seguridad predeterminada de Cloud Armor, selecciona
- En la ventana Crear servicio de backend, haz clic en Crear.
Configurar reglas de enrutamiento
Las reglas de enrutamiento determinan cómo se dirige el tráfico. Puedes dirigirlo a un servicio de backend o a uno de Kubernetes. El tráfico que no coincida de forma explícita con un host y un comparador de rutas se enviará al servicio predeterminado.
- Haz clic en Regla sencilla de host y ruta.
- Selecciona un servicio backend de la lista Backend.
Revisar la configuración
- Haz clic en Revisar y finalizar.
- Revisa los valores de Backend, Reglas de host y ruta y Frontend.
- Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
- Haz clic en Crear. Espera a que se cree el balanceador de carga.
- Haz clic en el nombre del balanceador de carga (serverless-lb).
- Anota la dirección IP del balanceador de carga para la siguiente tarea.
gcloud
- Reserva una dirección IP externa estática para el balanceador de carga.
gcloud compute addresses create IP_ADDRESS_NAME \ --region=REGION \ --network-tier=STANDARD
- Crea un NEG sin servidor para tu servicio de Cloud Run:
gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \ --region=REGION \ --network-endpoint-type=serverless \ --cloud-run-service=CLOUD_RUN_SERVICE_NAME
- Crea un servicio backend regional. Define
--protocol
en HTTP. Este parámetro se ignora, pero es obligatorio porque, de lo contrario,--protocol
se asigna a TCP de forma predeterminada.gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --region=REGION
- Añade el NEG sin servidor como backend al servicio de backend:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --region=REGION \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=REGION
- Crea un mapa de URLs regional para enrutar las solicitudes entrantes al servicio backend:
Este mapa de URLs de ejemplo solo tiene como destino un servicio de backend que representa una aplicación sin servidor, por lo que no es necesario configurar reglas de host ni coincidencias de ruta.gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE_NAME \ --region=REGION
- Opcional: Realiza este paso si utilizas HTTPS entre el cliente y el balanceador de carga. Este paso no es obligatorio para los balanceadores de carga HTTP.
Puedes crear certificados de Compute Engine o de Certificate Manager. Utiliza cualquiera de los siguientes métodos para crear certificados con Certificate Manager:
- Certificados autogestionados regionales. Para obtener información sobre cómo crear y usar certificados regionales autogestionados, consulta Implementar un certificado regional autogestionado. No se admiten mapas de certificados.
Certificados gestionados por Google regionales. No se admiten mapas de certificados.
Certificate Manager admite los siguientes tipos de certificados regionales gestionados por Google:
- Certificados regionales gestionados por Google con autorización de DNS por proyecto. Para obtener más información, consulta el artículo sobre cómo desplegar un certificado regional gestionado por Google con autorización de DNS.
- Certificados privados gestionados por Google regionales con el Servicio de Autoridades de Certificación. Para obtener más información, consulta el artículo sobre cómo implementar un certificado regional gestionado por Google con el Servicio de Autoridades de Certificación.
Una vez que hayas creado los certificados, adjúntalos directamente al proxy de destino.
Para crear un recurso de certificado SSL autogestionado regional, sigue estos pasos:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH \ --region=REGION
- Crea un proxy de destino regional para enrutar las solicitudes al mapa de URLs.
En el caso de un balanceador de carga HTTP, cree un proxy HTTP de destino: En el caso de un balanceador de carga HTTPS, crea un proxy HTTPS de destino. El proxy es la parte del balanceador de carga que contiene el certificado SSL para el balanceo de carga HTTPS, por lo que también debes cargar tu certificado en este paso.gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=REGION
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --region=REGION
- Crea una regla de reenvío para dirigir las solicitudes entrantes al proxy.
En el caso de un balanceador de carga HTTP:
En el caso de un balanceador de carga HTTPS:gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=REGION \ --region=REGION \ --ports=80
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=REGION \ --region=REGION \ --ports=443
Probar el balanceador de carga
Ahora que has configurado el balanceador de carga, puedes empezar a enviar tráfico a la dirección IP del balanceador de carga.
En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en el balanceador de carga que acabas de crear.
Anota la dirección IP del balanceador de carga.
En el caso de un balanceador de carga HTTP, puedes probarlo con un navegador web. Para ello, ve a
http://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la página principal del servicio de Cloud Run.En el caso de un balanceador de carga HTTPS, puedes probarlo con un navegador web. Para ello, ve a
https://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la página principal del servicio Cloud Run.
Si has usado un certificado autofirmado para hacer pruebas, tu navegador mostrará una advertencia. Debes indicar explícitamente a tu navegador que acepte un certificado autofirmado. Haz clic en la advertencia para ver la página.
Opciones de configuración adicionales
En esta sección se amplía el ejemplo de configuración para ofrecer opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes llevarlas a cabo en el orden que quieras.
Usar una máscara de URL
Cuando creas un NEG sin servidor, en lugar de seleccionar un servicio de Cloud Run específico, puedes usar una máscara de URL para apuntar a varios servicios que se ejecutan en el mismo dominio. Una máscara de URL es una plantilla de tu esquema de URL. El NEG sin servidor usa esta plantilla para extraer el nombre del servicio de la URL de la solicitud entrante y asignar la solicitud al servicio adecuado.
Las máscaras de URL son especialmente útiles si tu servicio está asignado a un dominio personalizado en lugar de a la dirección predeterminada que Google Cloud proporciona para el servicio desplegado. Una máscara de URL te permite orientar una sola regla a varios servicios y versiones, incluso cuando tu aplicación usa un patrón de URL personalizado.
Si aún no lo has hecho, lee la descripción general de NEGs sin servidor: máscaras de URL.
Crear una máscara de URL
Para crear una máscara de URL para tu balanceador de carga, empieza con la URL de tu servicio. En este ejemplo se usa una aplicación sin servidor de muestra que se ejecuta en https://example.com/login
. Esta es la URL en la que se ofrece el servicio login
de la aplicación.
- Quita
http
ohttps
de la URL. Te quedanexample.com/login
. - Sustituye el nombre del servicio por un marcador de posición de la máscara de URL.
- Cloud Run: sustituye el nombre del servicio de Cloud Run por el marcador de posición
<service>
. Si el servicio de Cloud Run tiene una etiqueta asociada, sustituye el nombre de la etiqueta por el marcador de posición<tag>
. En este ejemplo, la máscara de URL que queda esexample.com/<service>
.
- Cloud Run: sustituye el nombre del servicio de Cloud Run por el marcador de posición
Opcional: Si el nombre del servicio se puede extraer de la parte de la ruta de la URL, se puede omitir el dominio. La parte de la ruta de la máscara de URL se distingue por el primer carácter de barra diagonal (
/
). Si no hay una barra inclinada (/
) en la máscara de URL, se entiende que la máscara representa solo el host. Por lo tanto, en este ejemplo, la máscara de URL se puede reducir a/<service>
.Del mismo modo, si se puede extraer
<service>
de la parte del host de la URL, puedes omitir la ruta por completo de la máscara de URL.También puede omitir cualquier componente de host o subdominio que vaya antes del primer marcador de posición, así como cualquier componente de ruta que vaya después del último marcador de posición. En estos casos, el marcador de posición recoge la información necesaria para el componente.
A continuación, te mostramos algunos ejemplos más que demuestran estas reglas:
En esta tabla se da por hecho que tienes un dominio personalizado llamado example.com
y que todos tus servicios de Cloud Run están asignados a este dominio.
Servicio, nombre de la etiqueta | URL de dominio personalizado de Cloud Run | Máscara de URL |
---|---|---|
servicio: inicio de sesión | https://login-home.example.com/web | <service>-home.example.com |
servicio: inicio de sesión | https://example.com/login/web | example.com/<service> o /<service> |
servicio: inicio de sesión, etiqueta: prueba | https://test.login.example.com/web | <tag>.<service>.example.com |
servicio: inicio de sesión, etiqueta: prueba | https://example.com/home/login/test | example.com/home/<service>/<tag> o /home/<service>/<tag> |
servicio: inicio de sesión, etiqueta: prueba | https://test.example.com/home/login/web | <tag>.example.com/home/<service> |
Crear un NEG sin servidor con una máscara de URL
Consola
En el caso de un nuevo balanceador de carga, puedes usar el mismo proceso integral que se ha descrito anteriormente en este documento. Cuando configures el servicio de backend, en lugar de seleccionar un servicio específico, introduce una máscara de URL.
Si ya tienes un balanceador de carga, puedes editar la configuración del backend para que el NEG sin servidor apunte a una máscara de URL en lugar de a un servicio específico.
Para añadir un NEG sin servidor basado en una máscara de URL a un servicio de backend, sigue estos pasos:
- En la Google Cloud consola, ve a la página Balanceo de carga.
Ve a Balanceo de carga - Haga clic en el nombre del balanceador de carga que tenga el servicio de backend que quiera editar.
- En la página Detalles del balanceador de carga, haga clic en Editar.
- En la página Editar balanceador de carga de aplicación externo global, haga clic en Configuración de backend.
- En la página Configuración de backend, haz clic en Editar en el servicio de backend que quieras modificar.
- Haz clic en Añadir backend.
- Selecciona Crear grupo de endpoints de red sin servidor.
- En Nombre, escribe
helloworld-serverless-neg
. - En Región, se muestra la región del balanceador de carga.
- En Tipo de grupo de endpoints de red sin servidor, Cloud Run es el único tipo de grupo de endpoints de red admitido.
- Selecciona Usar máscara de URL.
- Introduce una máscara de URL. Para obtener información sobre cómo crear una máscara de URL, consulta el artículo Crear una máscara de URL.
- Haz clic en Crear.
- En Nuevo backend, haga clic en Hecho.
- Haz clic en Actualizar.
gcloud
Para crear un NEG sin servidor con una máscara de URL de ejemplo de
example.com/<service>
, sigue estos pasos:
gcloud compute network-endpoint-groups create SERVERLESS_NEG_MASK_NAME \ --region=REGION \ --network-endpoint-type=serverless \ --cloud-run-url-mask="example.com/<service>"
Eliminar un NEG sin servidor
No se puede eliminar un grupo de endpoints de red si está asociado a un servicio de backend. Antes de eliminar un NEG, asegúrate de que esté separado del servicio de backend.
Consola
- Para asegurarte de que el NEG sin servidor que quieres eliminar no lo esté usando ningún servicio de backend, ve a la pestaña Servicios de backend de la página Componentes de balanceo de carga.
Ve a Servicios de backend. - Si el NEG sin servidor está en uso, haga lo siguiente:
- Haga clic en el nombre del servicio de backend que esté usando el NEG sin servidor.
- Haz clic en Editar.
- En la lista Backends (Backends), haga clic en para quitar el backend de NEG sin servidor del servicio de backend.
- Haz clic en Guardar.
- Ve a la página Grupo de puntos finales de red de la consola de Google Cloud Google Cloud.
Ir a Grupo de puntos finales de red - Marca la casilla de la NEG sin servidor que quieras eliminar.
- Haz clic en Eliminar.
- Haz clic en Eliminar de nuevo para confirmar la acción.
gcloud
Para quitar un NEG sin servidor de un servicio backend, debes especificar la región en la que se creó el NEG.
gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=REGION \ --region=REGION
Para eliminar el NEG sin servidor, sigue estos pasos:
gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME \ --region=REGION
Siguientes pasos
- Usar el almacenamiento de registros y la monitorización
- Solucionar problemas con NEGs sin servidor
- Limpiar la configuración del balanceador de carga
- Usar un módulo de Terraform para un balanceador de carga HTTPS externo con un backend de Cloud Run