Configura un balanceador de cargas de aplicaciones clásico con un backend externo

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.

Un balanceador de cargas de aplicaciones externo global con un backend externo.
Figura 1. Un balanceador de cargas externo de aplicaciones externo con un backend externo (haz clic para ampliar).

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

  1. En la consola de Google Cloud, ve a la página Direcciones IP externas.

    Ir a Direcciones IP externas

  2. Haz clic en Reservar dirección estática externa para reservar una dirección IPv4.

  3. Ingresa un nombre.

  4. En Nivel de servicio de red, selecciona Premium.

  5. Para Versión de la IP, selecciona IPv4.

  6. En Tipo, selecciona Global.

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

  1. En la consola de Google Cloud, ve a la página Grupos de extremos de red.

    Ir a Grupos de extremos de red

  2. Haz clic en Crear un grupo de extremos de red.

  3. Ingresa un nombre.

  4. En Tipo de grupo de extremos de red, selecciona Grupo de extremos de red (Internet).

  5. En Puerto predeterminado, ingresa 443.

  6. En Nuevo extremo de red, selecciona Nombre y puerto de dominio completamente calificados.

  7. Ingresa el nombre de dominio completamente calificado.

  8. En Tipo de puerto, selecciona Predeterminado y verifica que el Número de puerto sea 443.

  9. Haz clic en Crear.

gcloud

  1. Crea un NEG de Internet y establece --network-endpoint-type como internet-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
    
  2. Agrega el extremo al NEG. Si no se especifica un puerto, la selección se establece de forma predeterminada en el puerto 80 (HTTP) o 443 (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

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
  5. En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo globales y haz clic en Siguiente.
  6. En Generación de balanceadores de cargas, selecciona Balanceador de cargas de aplicaciones clásico y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración de frontend

  1. Haz clic en Configuración de frontend.
  2. Ingresa un nombre.
  3. 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
    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
  4. Haz clic en Listo.

Configuración de backend

  1. Haz clic en Configuración de backend.
  2. Haz clic en Servicios y buckets de backend.
  3. Haz clic en Crear un servicio de backend.
  4. Ingresa un nombre.
  5. En Tipo de backend, selecciona Grupo de extremos de red de Internet.
  6. Para configurar Protocolo, selecciona el protocolo que quieres usar desde el balanceador de cargas al NEG de Internet. En este ejemplo, selecciona HTTP/2.
  7. Para configurar Backends, en la ventana Nuevo backend, selecciona el NEG de Internet que se creó en el paso anterior.
  8. Haz clic en Crear.

Revisa y finaliza

  1. Haz clic en Revisar y finalizar.
  2. Si todo parece correcto, haz clic en Crear.

gcloud

  1. Crea un servicio de backend:
      gcloud compute backend-services create BACKEND_SERVICE \
          --global
      
  2. 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
       
  3. 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
      
  4. 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:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    Si deseas crear un recurso de certificado SSL autoadministrado, haz lo siguiente:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --certificate CRT_FILE_PATH \
          --private-key KEY_FILE_PATH
      
  5. 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.
  6. 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 \
          --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 \
          --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

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a Balanceo de cargas

  2. Haz clic en el balanceador de cargas que acabas de crear.

  3. Toma nota de la Dirección IP del balanceador de cargas.

  4. Envía tráfico al balanceador de cargas.

    • Si creaste un balanceador de cargas HTTP, puedes probarlo en http://IP_ADDRESS. Reemplaza IP_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. Reemplaza IP_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. Reemplaza IP_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
    

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

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a Balanceo de cargas

  2. Haz clic en el nombre del balanceador de cargas que deseas modificar.

  3. Haz clic en Editar.

  4. Haz clic en Configuración de backend.

  5. Para el servicio de backend con el backend de NEG de Internet, haz clic en Editar.

  6. Selecciona Habilitar Cloud CDN.

  7. Opcional: Modifica la configuración del modo de almacenamiento en caché y de TTL.

  8. Haz clic en Actualizar.

  9. 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 \
          --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 directivas private, no-store o no-cache en los encabezados de respuesta Cache-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

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a Balanceo de cargas

  2. Haz clic en el nombre del balanceador de cargas que deseas modificar.

  3. Haz clic en Editar.

  4. Haz clic en Configuración de backend.

  5. Para el servicio de backend con el backend de NEG de Internet, haz clic en Editar.

  6. Haz clic en Configuración avanzada.

  7. Para configurar Encabezados de solicitud personalizados, haz clic en Agregar encabezado:

    1. En Nombre del encabezado, ingresa Host.
    2. En Valor de encabezado, ingresa FQDN_NEG_ENDPOINT.
  8. Haz clic en Actualizar.

  9. 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" \
          --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.

¿Qué sigue?