En esta guía se usa un ejemplo para enseñar los conceptos básicos del uso de un backend externo (a veces denominado origen personalizado) con un balanceador de carga de aplicación externo global. Un backend externo es un endpoint que no forma parte de Google Cloud. Cuando usas un backend externo con un balanceador de carga de aplicación externo global, puedes mejorar el rendimiento mediante el almacenamiento en caché de Cloud CDN.
En esta guía se explica cómo configurar un balanceador de carga de aplicación externo global con un servicio de backend habilitado para Cloud CDN que proxy las solicitudes a un servidor de backend externo.
Antes de seguir esta guía, familiarízate con la documentación de Descripción general de NEG de Internet, incluidas las limitaciones.En el siguiente diagrama de arquitectura se muestra un frontend de balanceador de carga de aplicación externo global con un backend externo.
Permisos
Para seguir esta guía, debe crear un NEG de Internet y crear o modificar un balanceador de carga de aplicaciones externo en un proyecto. Debes ser propietario o editor (roles/owner
o roles/editor
) de un proyecto, o bien tener los dos roles de gestión de identidades y accesos de Compute Engine que se indican a continuación.
Tarea | Rol necesario |
---|---|
Crear y modificar componentes de balanceadores de carga | Administrador de red de Compute ( roles/compute.networkAdmin )
|
Crear y modificar grupos de puntos de conexión de red | Administrador de instancias de Compute ( roles/compute.instanceAdmin )
|
Configurar el entorno de backend externo fuera de Google Cloud
Para configurar tu entorno, consulta las siguientes secciones.
Configurar endpoints de red
Configura un endpoint de red para exponer tu backend externo aGoogle Cloud. Asegúrate de que se pueda acceder al endpoint (una combinación de IP y puerto o un nombre de dominio completo y un puerto) a través de Internet. Este endpoint se referencia más adelante desde el NEG de Internet.
Para obtener información detallada sobre los requisitos de configuración de los endpoints de los NEGs de Internet, consulta la descripción general de los NEGs de Internet.
Permitir 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 permitidos los intervalos de direcciones IP que Google usa para enviar solicitudes a backends externos. Para buscar las direcciones IP a las que se debe permitir enviar tráfico a tus back-ends externos, consulta el registro TXT DNS _cloud-eoips.googleusercontent.com
con una herramienta como dig
o nslookup
.
Ejemplos:
Ejecuta el siguiente comando
nslookup
:nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
La salida tiene este aspecto:
Non-authoritative answer: _cloud-eoips.googleusercontent.com text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
Toma nota de los intervalos CIDR que siguen a
ip4:
y asegúrate de que las reglas de cortafuegos o las listas de control de acceso (LCAs) en la nube configuradas en tu backend externo permitan estos intervalos.Ejecuta el siguiente comando
dig
:dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
La salida contiene dos intervalos de direcciones IP, como se indica a continuación:
34.96.0.0/20 34.127.192.0/18
Configurar el Google Cloud entorno
Crea el balanceador de carga de aplicación 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.
Consola
En la Google Cloud consola, ve a la página Direcciones IP externas.
Haz clic en Reservar dirección estática externa para reservar una dirección IPv4.
Escribe un nombre.
En Nivel de servicio de red, seleccione Premium.
En Versión de IP, selecciona IPv4.
En Type (Tipo), selecciona Global (Global).
Haz clic en Reservar.
gcloud
gcloud compute addresses create LB_IP_ADDRESS_NAME \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe LB_IP_ADDRESS_NAME \ --format="get(address)" \ --global
Configurar el NEG de Internet
Consola
En la Google Cloud consola, ve a la página Grupos de endpoints de red.
Haz clic en Crear grupo de endpoints de red.
Escribe un nombre.
En Tipo de grupo de puntos finales de red, selecciona Grupo de puntos finales de red (Internet).
En Puerto predeterminado, introduce
443
.En Nuevo endpoint de red, selecciona Nombre de dominio completo y puerto.
Introduce el nombre de dominio completo.
En Tipo de puerto, selecciona Predeterminado y comprueba que Número de puerto sea
443
.Haz clic en Crear.
gcloud
Crea un NEG de Internet y asigna el valor
--network-endpoint-type
ainternet-fqdn-port
(el nombre de host y el puerto en los que se puede acceder a tu backend externo):gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
Añade tu endpoint al NEG. Si no se especifica ningún puerto, se seleccionará el puerto
80
(HTTP) o443
(HTTPS; HTTP/2) de forma predeterminada, en función del protocolo configurado en el servicio de backend. Incluye la marca--global
:gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \ --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \ --global
Crear el balanceador de carga
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.
- En Implementación global o en una sola región, selecciona La mejor opción para cargas de trabajo globales y haz clic en Siguiente.
- En Generación del balanceador de carga, selecciona Balanceador de carga de aplicación externo global y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración de frontend
- Haz clic en Configuración de frontend.
- Escribe un nombre.
Para crear un balanceador de carga HTTPS, debes tener un certificado SSL. Te recomendamos que uses un certificado gestionado por Google.
Verifica que las siguientes opciones estén configuradas con estos valores.
Propiedad Valor (escribe un valor o selecciona una opción según se especifique) 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 Reservar una dirección IP externa. Puerto 443 Opcional: tiempo de espera de keep-alive HTTP Introduce un valor de tiempo de espera entre 5 y 1200 segundos. El valor predeterminado es 610 segundos. Certificado Selecciona un certificado SSL o crea uno.
Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS. Puedes crear un recurso de certificado SSL mediante un certificado SSL gestionado por Google o un certificado SSL autogestionado.
Para crear un certificado gestionado por Google, debes tener un dominio. El registro A del dominio debe resolverse en la dirección IP del balanceador de carga (en este ejemplo,
example-ip
). Te recomendamos que utilices certificados gestionados por Google, ya que Google Cloud obtiene, gestiona y renueva estos certificados automáticamente. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para hacer pruebas.Opcional: Habilita la opción de redireccionamiento de HTTP a HTTPS Usa esta casilla para habilitar las redirecciones de HTTP a HTTPS.
Si marcas esta casilla, se creará un balanceador de carga HTTP parcial adicional que usará la misma dirección IP que tu balanceador de carga HTTPS y redirigirá las solicitudes HTTP al frontend HTTPS de tu balanceador de carga.
Esta casilla solo se puede marcar si 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, como requieren los certificados gestionados por Google), puedes configurar un balanceador de carga HTTP.
Para crear un balanceador de carga HTTP, comprueba que las siguientes opciones estén configuradas con estos valores:
Propiedad Valor (escribe un valor o selecciona una opción según se especifique) 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 Reservar una dirección IP externa. Puerto 80 Opcional: tiempo de espera de keep-alive HTTP Introduce un valor de tiempo de espera entre 5 y 1200 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 segmentos de backend.
- Haz clic en Crear un servicio de backend.
- Escribe un nombre.
- En Tipo de backend, selecciona Grupo de endpoints de red de Internet.
- En Protocolo, selecciona el protocolo que quieras usar desde el balanceador de carga hasta el NEG de Internet. En este ejemplo, selecciona HTTP/2.
- En Backends (Backends), en la ventana New backend (Nuevo backend), seleccione el NEG de Internet que ha creado en el paso anterior.
- Haz clic en Crear.
Revisar y finalizar
- Haz clic en Revisar y finalizar.
- Si todo es correcto, haz clic en Crear.
gcloud
- Crea un servicio de backend:
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- Añade 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 URLs para enrutar las solicitudes entrantes al servicio de backend:
gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
Realiza este paso solo si quieres crear un balanceador de carga HTTPS. Este paso no es obligatorio para los balanceadores de carga HTTP.
Para crear un balanceador de carga HTTPS, debes tener un recurso de certificado SSL que usar en el proxy HTTPS de destino. Puedes crear un recurso de certificado SSL con un certificado SSL gestionado por Google o con un certificado SSL autogestionado. Te recomendamos que utilices certificados gestionados por Google, ya que Google Cloud obtiene, gestiona y renueva estos certificados automáticamente.
Para crear un certificado gestionado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autogestionado para hacer pruebas.
Para crear un recurso de certificado SSL gestionado por Google, sigue estos pasos: Para crear un recurso de certificado SSL autogestionado, sigue estos pasos: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 a tu mapa de URLs.
En el caso de un balanceador de carga HTTP, crea un proxy HTTP de destino:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --global
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-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --global
Haz los cambios siguientes:
TARGET_HTTP_PROXY_NAME
: nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: nombre del proxy HTTPS de destino.SSL_CERTIFICATE_NAME
: el nombre del certificado SSL.URL_MAP_NAME
: nombre del mapa de URLs.
--http-keep-alive-timeout-sec
. El valor del tiempo de espera debe estar entre 5 y 1200 segundos. El valor predeterminado es 610 segundos.Crea una regla de reenvío para dirigir las solicitudes entrantes al proxy.
En el caso de un balanceador de carga HTTP:
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
En el caso de un balanceador de carga HTTPS:
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
Conectar tu dominio a tu balanceador de carga
Una vez creado el balanceador de carga, anota la dirección IP asociada a él. Por ejemplo, 30.90.80.100
. Para dirigir tu dominio a tu balanceador de carga, crea un registro A
con tu servicio de registro de dominios. Si has añadido varios dominios a tu certificado SSL, debes añadir un registro A
para cada uno de ellos, todos apuntando a la dirección IP del balanceador de carga. Por ejemplo, para crear registros A
de 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 el artículo sobre cómo añadir, modificar y eliminar registros.
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. Si has configurado un dominio, también puedes enviar tráfico al nombre de dominio. Sin embargo, la propagación de DNS puede tardar en completarse, por lo que puedes empezar usando la dirección IP para hacer pruebas.
Consola
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.
Envía tráfico al balanceador de carga.
Si has creado un balanceador de carga HTTP, puedes probarlo yendo a
http://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la aplicación que estés ejecutando en el backend externo.Si has creado un balanceador de carga HTTPS, puedes probarlo yendo a
https://IP_ADDRESS
. SustituyeIP_ADDRESS
por la dirección IP del balanceador de carga. Se te dirigirá a la aplicación que se está ejecutando en el backend externo.
Si no funciona y estás usando un certificado gestionado por Google, confirma que el estado del recurso de tu certificado es ACTIVE. Para obtener más información, consulta el estado del recurso de certificado SSL gestionado por Google.
También puedes usar
curl
desde la línea de comandos de tu máquina local. SustituyeIP_ADDRESS
por la dirección IPv4 del balanceador de carga. Si usas un certificado gestionado por Google, prueba el dominio que apunta a la dirección IP del balanceador de carga. Por ejemplo:curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
Opcional: Si usas un dominio personalizado, puede que tengas que esperar a que se propaguen los ajustes de DNS actualizados. A continuación, prueba tu dominio en el navegador web.
Si necesitas ayuda para solucionar problemas, consulta el artículo Solucionar problemas de NEG y backend externo e Internet.
Configuración adicional
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.
Habilitar Cloud CDN
Cuando Cloud CDN está habilitado, el balanceador de carga de aplicaciones externo envía solicitudes al backend del NEG de Internet solo cuando no hay datos en la caché de Cloud CDN.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
Haga clic en el nombre del balanceador de carga que quiera modificar.
Haz clic en
Editar.Haz clic en Configuración de backend.
En el servicio de backend con el backend de NEG de Internet, haz clic en
Editar.Selecciona Habilitar Cloud CDN.
Opcional: Modifica los ajustes de modo de caché y TTL.
Haz clic en Actualizar.
Para revisar los cambios, haz clic en Revisar y finalizar y, a continuación, 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
Define el modo de caché. Para ello, sustituye
CACHE_MODE
por uno de los siguientes valores:CACHE_All_STATIC
: almacena en caché automáticamente el contenido estático.USE_ORIGIN_HEADERS
(predeterminado): requiere que el origen defina encabezados de almacenamiento en caché válidos para almacenar contenido en caché.FORCE_CACHE_ALL
: almacena en caché todo el contenido, ignorando las directivasprivate
,no-store
ono-cache
en los encabezados de respuestaCache-Control
.
Usar un encabezado personalizado para autenticar solicitudes
Para autenticar las solicitudes enviadas a tu backend externo, puedes definir un encabezado personalizado que indique que la solicitud procede de un Google Cloud balanceador de carga. Por ejemplo, puedes configurar el backend externo para que espere un valor concreto en el encabezado Host
de la solicitud HTTP y configurar el servicio de backend para que asigne ese valor al encabezado Host
.
Sigue estos pasos para configurar el servicio de backend y añadir un encabezado Host
personalizado a cada solicitud.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
Haga clic en el nombre del balanceador de carga que quiera modificar.
Haz clic en
Editar.Haz clic en Configuración de backend.
En el servicio de backend con el backend de NEG de Internet, haz clic en
Editar.Haz clic en Configuraciones avanzadas.
En Encabezados de solicitud personalizados, haga clic en Añadir encabezado:
- En Nombre del encabezado, escribe
Host
. - En Valor del encabezado, introduce
FQDN_NEG_ENDPOINT
.
- En Nombre del encabezado, escribe
Haz clic en Actualizar.
Para revisar los cambios, haz clic en Revisar y finalizar y, a continuación, en Actualizar.
gcloud
- Usa el siguiente comando para configurar el servicio de backend de forma que añada 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 que también has configurado el backend externo para que espere un encabezado Host
para que pueda autenticar las solicitudes entrantes.
Para obtener información general sobre los encabezados de solicitud personalizados, consulte Configurar encabezados de solicitud personalizados. Para otros métodos de autenticación, consulta Autenticar solicitudes en el backend externo.
Habilitar IAP en el balanceador de carga de aplicación externo
Nota: IAP no es compatible con Cloud CDN.Puedes configurar las compras en aplicaciones para que estén habilitadas o inhabilitadas (opción predeterminada). Si está habilitada, debe proporcionar valores para oauth2-client-id
y oauth2-client-secret
.
Para habilitar IAP, actualiza el servicio de backend para 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 forma opcional, puedes habilitar IAP en un recurso de Compute Engine mediante la Google Cloud consola, la CLI de gcloud o la API.
Actualizar el tiempo de espera de keep-alive HTTP del cliente
El balanceador de carga creado en los pasos anteriores se ha configurado con un valor predeterminado para el tiempo de espera de keep-alive HTTP del cliente.Para actualizar el tiempo de espera de keep-alive HTTP del cliente, sigue estas instrucciones.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en el nombre del balanceador de carga que quiera modificar.
- Haz clic en Editar.
- Haz clic en Configuración de frontend.
- Despliega Funciones avanzadas. En Tiempo de espera de HTTP Keep-Alive, introduce un valor de tiempo de espera.
- Haz clic en Actualizar.
- Para revisar los cambios, haz clic en Revisar y finalizar y, a continuación, en Actualizar.
gcloud
En el caso de un balanceador de carga HTTP, actualiza el proxy HTTP de destino con el comando gcloud 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
En el caso de un balanceador de carga HTTPS, actualiza el proxy HTTPS de destino con el comando gcloud 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
Haz los cambios siguientes:
TARGET_HTTP_PROXY_NAME
: nombre del proxy HTTP de destino.TARGET_HTTPS_PROXY_NAME
: nombre del proxy HTTPS de destino.HTTP_KEEP_ALIVE_TIMEOUT_SEC
: el valor del tiempo de espera de HTTP Keep-Alive de 5 a 600 segundos.
Siguientes pasos
- Para comprobar si Cloud CDN está sirviendo respuestas desde la caché, consulta Ver registros.
- Para saber qué contenido se puede almacenar en caché y cuál no, consulta el artículo Descripción general del almacenamiento en caché.
- Para ver los puntos de presencia de Cloud CDN, consulta las ubicaciones de caché.
- Limpiar la configuración del balanceador de carga.
- Para saber cómo inhabilitar Cloud CDN, consulta Inhabilitar Cloud CDN.