En esta guía, se usa un ejemplo para explicar los conceptos básicos sobre el uso de un backend externo (a veces llamado origen personalizado) con un balanceador de cargas de aplicaciones externo global. Un backend externo es un extremo externo a Google Cloud. Cuando usas un backend externo con un balanceador de cargas de aplicaciones externo global, puedes mejorar el rendimiento mediante el almacenamiento en caché de Cloud CDN.
En la guía, se muestra cómo configurar un balanceador de cargas de aplicaciones externo global con un servicio de backend habilitado para Cloud CDN que envía solicitudes mediante proxy a un servidor de backend externo.
Antes de seguir con esta guía, familiarízate con la documentación Descripción general de NEG de Internet, incluidas las limitaciones.En el siguiente diagrama de arquitectura, se muestra un frontend global del balanceador de cargas de aplicaciones externo con un backend externo.
Permisos
Para seguir esta guía, debes crear un NEG de Internet y crear o modificar un balanceador de cargas de aplicaciones externo en un proyecto. Debes ser propietario o editor (roles/owner
o roles/editor
) de proyecto o tener ambos de los siguientes roles de IAM de Compute Engine.
Tarea | Función requerida |
---|---|
Crear y modificar componentes del balanceador de cargas | Administrador de red de Compute ( roles/compute.networkAdmin )
|
Crear y modificar los NEG | Administrador de instancias de Compute ( roles/compute.instanceAdmin )
|
Configura el entorno de backend externo fuera de Google Cloud
Para configurar tu entorno, consulta las siguientes secciones.
Configura extremos de red
Configura un extremo de red para exponer tu backend externo a Google Cloud. Asegúrate de que se pueda acceder al extremo a través de Internet, ya sea una combinación de IP:Port o un nombre de dominio completamente calificado (FQDN) y un puerto. Luego, se hace referencia a este extremo desde el NEG de Internet.
A fin de obtener información sobre los requisitos de configuración detallados para los extremos de NEG de Internet, consulta Descripción general de los NEG de Internet.
Permite que el backend externo reciba tráfico de Google Cloud
Para permitir que las solicitudes de Google Cloud lleguen a tu backend externo, debes incluir en la lista de entidades permitidas los rangos de direcciones IP que Google usa para enviar solicitudes a backends externos. Para buscar las direcciones IP que deben tener permiso para enviar tráfico a tus backends externos, consulta el registro TXT _cloud-eoips.googleusercontent.com
de DNS mediante una herramienta como dig
o nslookup
.
Ejemplos:
Ejecuta el siguiente comando
nslookup
:nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
El resultado luce de la siguiente manera:
Non-authoritative answer: _cloud-eoips.googleusercontent.com text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
Ten en cuenta los rangos de CIDR después de
ip4:
y asegúrate de que las reglas de firewall o las listas de control de acceso (LCA) en la nube configuradas en el backend externo permitan esos rangos.Ejecuta el siguiente comando
dig
:dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
El resultado contiene dos rangos de direcciones IP, como se muestra a continuación:
34.96.0.0/20 34.127.192.0/18
Configura tu entorno de Google Cloud
Crea el balanceador de cargas de aplicaciones externo global con un backend de NEG de Internet.
Reservar una dirección IP externa
Reserva una dirección IP externa estática global que los clientes usen para acceder a tu aplicación.
Console
En la consola de Google Cloud, ve a la página Direcciones IP externas.
Haz clic en Reservar dirección estática externa para reservar una dirección IPv4.
Ingresa un nombre.
En Nivel de servicio de red, selecciona Premium.
Para Versión de la IP, selecciona IPv4.
En Tipo, selecciona Global.
Haz clic en Reservar.
gcloud
gcloud compute addresses create LB_IP_ADDRESS_NAME \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Tome nota de la dirección IPv4 que estaba reservada:
gcloud compute addresses describe LB_IP_ADDRESS_NAME \ --format="get(address)" \ --global
Configura el NEG de Internet
Console
En la consola de Google Cloud, ve a la página Grupos de extremos de red.
Haz clic en Crear un grupo de extremos de red.
Ingresa un nombre.
En Tipo de grupo de extremos de red, selecciona Grupo de extremos de red (Internet).
En Puerto predeterminado, ingresa
443
.En Nuevo extremo de red, selecciona Nombre y puerto de dominio completamente calificados.
Ingresa el nombre de dominio completamente calificado.
En Tipo de puerto, selecciona Predeterminado y verifica que el Número de puerto sea
443
.Haz clic en Crear.
gcloud
Crea un NEG de Internet y establece
--network-endpoint-type
comointernet-fqdn-port
(el nombre de host y el puerto en el que se encuentra el backend externo):gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
Agrega el extremo al NEG. Si no se especifica un puerto, la selección se establece de forma predeterminada en el puerto
80
(HTTP) o443
(HTTPS; HTTP/2), según el protocolo configurado en el servicio de backend. Asegúrate de incluir la marca--global
.gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \ --global
Crea el balanceador de cargas
Console
Inicia la configuración
En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en Crear balanceador de cargas.
- En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
- En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
- En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo globales y haz clic en Siguiente.
- En Generación de balanceadores de cargas, selecciona Balanceador de cargas de aplicaciones externo global y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración de frontend
- Haz clic en Configuración de frontend.
- Ingresa un nombre.
Si quieres crear un balanceador de cargas HTTPS, debes tener un certificado SSL. Recomendamos que uses un certificado administrado por Google.
Verifica que las siguientes opciones estén configuradas con estos valores.
Propiedad Valor (escribe un valor o selecciona una opción como se especifica) Protocolo HTTPS Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP Selecciona la dirección IP creada en el paso Reserva una dirección IP externa. Puerto 443 Opcional: Tiempo de espera de keepalive de HTTP (opcional) Ingresa un valor de tiempo de espera de 5 a 1,200 segundos. El valor predeterminado es 610 segundos. Certificado Selecciona un certificado SSL existente o crea uno nuevo.
Si quieres crear un balanceador de cargas HTTPS , debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.
Para crear un certificado administrado por Google, debes tener un dominio. El registro A del dominio debe resolverse en la dirección IP del balanceador de cargas (en este ejemplo,
example-ip
). Te recomendamos usar los certificados administrados por Google porque Google Cloud obtiene, administra y renueva estos certificados automáticamente. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para las pruebas.(Opcional) Habilitar el redireccionamiento de HTTP a HTTPS Usa esta casilla de verificación para habilitar los redireccionamientos HTTP a HTTPS.
Si habilitas esta casilla de verificación, se creará un balanceador de cargas HTTP parcial adicional que usa la misma dirección IP que tu balanceador de cargas HTTPS y redirecciona las solicitudes HTTP al frontend de HTTPS del balanceador de cargas.
Esta casilla de verificación solo se puede seleccionar cuando se selecciona el protocolo HTTPS y se usa una dirección IP reservada.
Si quieres probar este proceso sin configurar un recurso de certificado SSL (o un dominio según lo requieren los certificados administrados por Google), puedes configurar un balanceador de cargas de HTTP.
Para crear un balanceador de cargas HTTP, verifica que las siguientes opciones estén configuradas con estos valores:
Propiedad Valor (escribe un valor o selecciona una opción como se especifica) Protocolo HTTP Nivel de servicio de red Premium Versión de IP IPv4 Dirección IP Selecciona la dirección IP creada en el paso Reserva una dirección IP externa. Puerto 80 Opcional: Tiempo de espera de keepalive de HTTP (opcional) Ingresa un valor de tiempo de espera de 5 a 1,200 segundos. El valor predeterminado es 610 segundos. Haz clic en Listo.
Configuración de backend
- Haz clic en Configuración de backend.
- Haz clic en Servicios y buckets de backend.
- Haz clic en Crear un servicio de backend.
- Ingresa un nombre.
- En Tipo de backend, selecciona Grupo de extremos de red de Internet.
- Para configurar Protocolo, selecciona el protocolo que quieres usar desde el balanceador de cargas al NEG de Internet. En este ejemplo, selecciona HTTP/2.
- Para configurar Backends, en la ventana Nuevo backend, selecciona el NEG de Internet que se creó en el paso anterior.
- Haz clic en Crear.
Revisa y finaliza
- Haz clic en Revisar y finalizar.
- Si todo parece correcto, haz clic en Crear.
gcloud
- Crea un servicio de backend:
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- Agrega el NEG de Internet al servicio de backend:
gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend:
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
Sigue este paso solo si quieres crear un balanceador de cargas HTTPS. Este paso no es obligatorio para los balanceadores de cargas HTTP.
Si quieres crear un balanceador de cargas HTTPS, debes tener un recurso de certificado SSL para usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado. Te recomendamos usar certificados administrados por Google porque Google Cloud obtiene, administra y renueva estos certificados de manera automática.
Para crear un certificado administrado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autoadministrado para realizar pruebas.
Si deseas crear un recurso de certificado SSL administrado por Google, haz lo siguiente: Si deseas crear un recurso de certificado SSL autoadministrado, haz lo siguiente:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
Crea un proxy HTTP(S) de destino para enrutar las solicitudes al mapa de URL.
Para un balanceador de cargas de HTTP, crea un proxy HTTP de destino:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --global
Para un balanceador de cargas de HTTPS, crea un proxy HTTPS de destino. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas HTTPS, por lo que también debes cargar el certificado en este paso.
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --global
Reemplaza lo siguiente:
TARGET_HTTP_PROXY_NAME
: el nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: el nombre del proxy HTTPS de destino.SSL_CERTIFICATE_NAME
: es el nombre del certificado SSL.URL_MAP_NAME
: el nombre del mapa de URL.
--http-keep-alive-timeout-sec
. El valor del tiempo de espera debe ser de entre 5 a 1,200 segundos. El valor predeterminado es 610 segundos.Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy.
Para un balanceador de cargas de HTTP, ingresa el siguiente comando:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=LB_IP_ADDRESS_NAME \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --global \ --ports=80
Para un balanceador de cargas HTTPS, ingresa el siguiente comando:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=LB_IP_ADDRESS_NAME \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --global \ --ports=443
Conecta tu dominio al balanceador de cargas
Después de crear el balanceador de cargas, toma nota de la dirección IP asociada con este: por ejemplo, 30.90.80.100
. Para apuntar tu dominio al balanceador de cargas, crea un registro A
mediante tu servicio de registro de dominio. Si agregaste varios dominios a tu certificado SSL, debes agregar un registro A
para cada uno, que apunte a la dirección IP del balanceador de cargas. Por ejemplo, para crear registros A
para www.example.com
y example.com
, usa lo siguiente:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Si usas Cloud DNS como proveedor de DNS, consulta Agrega, modifica y borra registros.
Prueba el balanceador de cargas
Ahora que ya configuraste el balanceador de cargas, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas. Si configuraste un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede llevar un tiempo en completarse, por lo que puedes comenzar a usar la dirección IP para realizar pruebas.
Console
En la consola de Google Cloud, ve a la página Balanceo de cargas.
Haz clic en el balanceador de cargas que acabas de crear.
Toma nota de la Dirección IP del balanceador de cargas.
Envía tráfico al balanceador de cargas.
Si creaste un balanceador de cargas HTTP, puedes probarlo en
http://IP_ADDRESS
. ReemplazaIP_ADDRESS
por la dirección IP del balanceador de cargas. Se te debería dirigir a la aplicación que ejecutas en el backend externo.Si creaste un balanceador de cargas HTTPS, puedes probarlo en
https://IP_ADDRESS
. ReemplazaIP_ADDRESS
por la dirección IP del balanceador de cargas. Se te debería dirigir a la aplicación que ejecutas en el backend externo.
Si eso no funciona y usas un certificado administrado por Google, confirma que el estado del recurso de certificado sea ACTIVO. Para obtener más información, consulta la página sobre el estado del recurso del certificado SSL que administra Google.
Como alternativa, puedes usar
curl
desde la línea de comandos de tu máquina local. ReemplazaIP_ADDRESS
por la dirección IPv4 del balanceador de cargas. Si usas un certificado administrado por Google, prueba el dominio que apunta a la dirección IP del balanceador de cargas. Por ejemplo:curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
Opcional: Si usas un dominio personalizado, es posible que debas esperar a que se propague la configuración de DNS actualizada. Luego, prueba el dominio en el navegador web.
Para obtener ayuda con la solución de problemas, consulta la sección Soluciona problemas con el backend externo y el NEG de Internet.
Configuración adicional
En esta sección se expande el ejemplo de configuración para proporcionar opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en cualquier orden.
Habilitar Cloud CDN
Cuando Cloud CDN está habilitado, el balanceador de cargas de aplicaciones externo envía solicitudes al backend de NEG de Internet solo cuando hay un error de caché de Cloud CDN.
Console
En la consola de Google Cloud, ve a la página Balanceo de cargas.
Haz clic en el nombre del balanceador de cargas que deseas modificar.
Haz clic en
Editar.Haz clic en Configuración de backend.
Para el servicio de backend con el backend de NEG de Internet, haz clic en
Editar.Selecciona Habilitar Cloud CDN.
Opcional: Modifica la configuración del modo de almacenamiento en caché y de TTL.
Haz clic en Actualizar.
Para revisar los cambios, haz clic en Revisar y finalizar y, luego, haz clic en Actualizar.
gcloud
- Para habilitar Cloud CDN en el servicio de backend, usa el siguiente comando:
gcloud compute backend-services update BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE
Para establecer el modo de almacenamiento en caché, reemplaza
CACHE_MODE
por uno de los siguientes valores:CACHE_All_STATIC
: Almacena en caché el contenido estático de forma automática.USE_ORIGIN_HEADERS
(predeterminado): se requiere que se configuren encabezados de almacenamiento en caché válidos para el contenido de la caché en el origen.FORCE_CACHE_ALL
: almacena en caché todo el contenido, sin importar las directivasprivate
,no-store
ono-cache
en los encabezados de respuestaCache-Control
.
Usa un encabezado personalizado para autenticar solicitudes
Para autenticar las solicitudes enviadas a tu backend externo, puedes configurar un encabezado personalizado que indique que la solicitud provino de un balanceador de cargas de Google Cloud. Por ejemplo, puedes configurar el backend externo para que espere un valor particular para el encabezado Host
de la solicitud HTTP y puedes configurar el servicio de backend para que establezca el encabezado Host
en ese valor esperado.
Sigue estos pasos para configurar el servicio de backend a fin de agregar un encabezado Host
personalizado a cada solicitud.
Console
En la consola de Google Cloud, ve a la página Balanceo de cargas.
Haz clic en el nombre del balanceador de cargas que deseas modificar.
Haz clic en
Editar.Haz clic en Configuración de backend.
Para el servicio de backend con el backend de NEG de Internet, haz clic en
Editar.Haz clic en Configuración avanzada.
Para configurar Encabezados de solicitud personalizados, haz clic en Agregar encabezado:
- En Nombre del encabezado, ingresa
Host
. - En Valor de encabezado, ingresa
FQDN_NEG_ENDPOINT
.
- En Nombre del encabezado, ingresa
Haz clic en Actualizar.
Para revisar los cambios, haz clic en Revisar y finalizar y, luego, haz clic en Actualizar.
gcloud
- Usa el siguiente comando para configurar el servicio de backend a fin de agregar un encabezado `Host` personalizado a cada solicitud.
gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
Asegúrate de haber configurado el backend externo para que espere un encabezado Host
, de modo que pueda autenticar las solicitudes entrantes.
Para obtener información general sobre los encabezados de solicitud personalizados, consulta Configura encabezados de solicitud personalizados. Para otros métodos de autenticación, consulta Autentica solicitudes al backend externo.
Habilita IAP en el balanceador de cargas de aplicaciones externo
Nota: Ten en cuenta que IAP no es compatible con Cloud CDN.Puedes configurar IAP para que
se habilite o inhabilite (predeterminado). Si se habilita, debes proporcionar valores para
oauth2-client-id
y oauth2-client-secret
.
Para habilitar IAP, actualiza el servicio de backend
a fin de incluir la marca --iap=enabled
con oauth2-client-id
y
oauth2-client-secret
.
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \ --global
De manera opcional, puedes habilitar IAP para un recurso de Compute Engine con la consola de Google Cloud, gcloud CLI o la API.
Actualiza el tiempo de espera de keepalive del HTTP del cliente
El balanceador de cargas creado en los pasos anteriores se configuró con un valor predeterminado para el tiempo de espera de keepalive de HTTP del cliente.Para actualizar el tiempo de espera de keepalive del cliente HTTP, sigue las siguientes instrucciones.
Console
En la consola de Google Cloud, ve a la página Balanceo de cargas.
- Haz clic en el nombre del balanceador de cargas que deseas modificar.
- Haz clic en Editar.
- Haz clic en Configuración de frontend.
- Expande Funciones avanzadas. Para el tiempo de espera de keepalive de HTTP, ingresa un valor de tiempo de espera.
- Haz clic en Actualizar.
- Para revisar los cambios, haz clic en Revisar y finalizar y, luego, haz clic en Actualizar.
gcloud
Para un balanceador de cargas de HTTP, actualiza el proxy HTTP de destino con el comandogcloud compute target-http-proxies update
:
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Para un balanceador de cargas de HTTPS, actualiza el proxy HTTPS de destino con el comandogcloud compute target-https-proxies update
:
gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --global
Reemplaza lo siguiente:
TARGET_HTTP_PROXY_NAME
: el nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: el nombre del proxy HTTPS de destino.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: El valor de tiempo de espera de keepalive de HTTP de 5 a 600 segundos.
¿Qué sigue?
- Para verificar si Cloud CDN entrega respuestas desde la caché, consulta Visualiza registros.
- Para obtener información sobre qué contenido se puede, o no se puede, almacenar en caché, consulta Descripción general del almacenamiento en caché.
- Para encontrar los puntos de presencia de Cloud CDN, consulta Ubicaciones de la caché.
- Limpia la configuración del balanceador de cargas.
- Para aprender a inhabilitar Cloud CDN, consulta Inhabilita Cloud CDN.