Configurar un balanceador de carga de aplicación externo global con un backend externo

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.

Un balanceador de carga de aplicación externo global con un backend externo.
Imagen 1. Un balanceador de carga de aplicación externo global con un backend externo (haz clic para ampliar).

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

  1. En la Google Cloud consola, 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. Escribe un nombre.

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

  5. En Versión de IP, selecciona IPv4.

  6. En Type (Tipo), selecciona Global (Global).

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

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

    Ir a grupos de puntos finales de red

  2. Haz clic en Crear grupo de endpoints de red.

  3. Escribe un nombre.

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

  5. En Puerto predeterminado, introduce 443.

  6. En Nuevo endpoint de red, selecciona Nombre de dominio completo y puerto.

  7. Introduce el nombre de dominio completo.

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

  9. Haz clic en Crear.

gcloud

  1. Crea un NEG de Internet y asigna el valor --network-endpoint-type a internet-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
    
  2. Añade tu endpoint al NEG. Si no se especifica ningún puerto, se seleccionará el puerto 80 (HTTP) o 443 (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

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

    Ir a Balanceo de carga

  2. Haga clic en Crear balanceador de carga.
  3. En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Público o interno, selecciona Público (externo) y haz clic en Siguiente.
  5. 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.
  6. En Generación del balanceador de carga, selecciona Balanceador de carga de aplicación externo global y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración de frontend

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

Configuración de backend

  1. Haz clic en Configuración de backend.
  2. Haz clic en Servicios y segmentos de backend.
  3. Haz clic en Crear un servicio de backend.
  4. Escribe un nombre.
  5. En Tipo de backend, selecciona Grupo de endpoints de red de Internet.
  6. En Protocolo, selecciona el protocolo que quieras usar desde el balanceador de carga hasta el NEG de Internet. En este ejemplo, selecciona HTTP/2.
  7. En Backends (Backends), en la ventana New backend (Nuevo backend), seleccione el NEG de Internet que ha creado en el paso anterior.
  8. Haz clic en Crear.

Revisar y finalizar

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

gcloud

  1. Crea un servicio de backend:
      gcloud compute backend-services create BACKEND_SERVICE \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      
  2. 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
       
  3. 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
      
  4. 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:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    Para crear un recurso de certificado SSL autogestionado, sigue estos pasos:
      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 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.
    Opcional: En el caso de los balanceadores de carga de aplicación externos globales, puedes definir un tiempo de espera de keep-alive HTTP de cliente mediante la opción --http-keep-alive-timeout-sec. El valor del tiempo de espera debe estar entre 5 y 1200 segundos. El valor predeterminado es 610 segundos.
  6. 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

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

    Ir a Balanceo de carga

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

  3. Anota la dirección IP del balanceador de carga.

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

    • Si has creado un balanceador de carga HTTP, puedes probarlo yendo a http://IP_ADDRESS. Sustituye IP_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. Sustituye IP_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. Sustituye IP_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
    

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

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

    Ve a Balanceo de carga.

  2. Haga clic en el nombre del balanceador de carga que quiera modificar.

  3. Haz clic en Editar.

  4. Haz clic en Configuración de backend.

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

  6. Selecciona Habilitar Cloud CDN.

  7. Opcional: Modifica los ajustes de modo de caché y TTL.

  8. Haz clic en Actualizar.

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

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

    Ve a Balanceo de carga.

  2. Haga clic en el nombre del balanceador de carga que quiera modificar.

  3. Haz clic en Editar.

  4. Haz clic en Configuración de backend.

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

  6. Haz clic en Configuraciones avanzadas.

  7. En Encabezados de solicitud personalizados, haga clic en Añadir encabezado:

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

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

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

    Ve a Balanceo de carga.

  2. Haga clic en el nombre del balanceador de carga que quiera modificar.
  3. Haz clic en Editar.
  4. Haz clic en Configuración de frontend.
  5. Despliega Funciones avanzadas. En Tiempo de espera de HTTP Keep-Alive, introduce un valor de tiempo de espera.
  6. Haz clic en Actualizar.
  7. 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