Configurar un backend externo con un NEG de Internet

En esta guía, se usa un ejemplo para describir los conceptos básicos sobre el uso de un backend externo (a veces llamado origen personalizado) en un balanceador de cargas de aplicaciones externo. Un backend externo es un extremo externo a Google Cloud. Cuando usas un backend externo con un balanceador de cargas de aplicaciones externo, puedes mejorar el rendimiento mediante el almacenamiento en caché de Cloud CDN.

En la guía, se explica cómo configurar un balanceador de cargas de aplicaciones externo global con un servicio de backend habilitado para Cloud CDN que se conecta mediante proxy a un servidor de backend externo en backend.example.com.

En el ejemplo, el balanceador de cargas acepta las solicitudes HTTPS de clientes y las reenvía mediante proxy como HTTPS al backend externo. En este ejemplo, se da por sentado que el backend externo admite HTTPS.

Otra opción sería configurar un balanceador de cargas para aceptar solicitudes HTTP o HTTPS y usar HTTPS cuando se reenvían solicitudes mediante proxy al backend externo.

En esta guía, se presupone que ya configuraste un balanceador de cargas y que agregas un nuevo backend externo. Para obtener más información, consulta Configura un balanceador de cargas de aplicaciones clásico con un backend de grupo de instancias administrado.

En la Figura 1, se muestra una arquitectura de ejemplo.

Figura 1. Caso de uso típico para backends externos.
Figura 1. Caso de uso típico para backends externos.

En el diagrama, www.example.com tiene un frontend de balanceador de cargas con la dirección IP 120.1.1.1. Cuando hay un error de caché, las solicitudes de usuario para /cart/id/1223515 se recuperan del backend externo por medio de HTTPS. El resto del tráfico entrante se dirige al servicio de backend de Google Cloud con las VM de Compute Engine o al bucket de backend, según el mapa de URL.

Antes de comenzar

Antes de seguir con esta guía, familiarízate con lo siguiente:

Permisos

Para seguir esta guía, debes crear un grupo de extremos de red de Internet (NEG) y crear o modificar un balanceador de cargas de aplicaciones externo en un proyecto. Debes ser propietario o editor de un proyecto o tener ambas de las siguientes funciones de IAM de Compute Engine.

Tarea Función requerida
Crear y modificar componentes del balanceador de cargas Administrador de redes
Crear y modificar los NEG Administrador de instancias de Compute

Configura un balanceador de cargas con un backend externo

En esta sección, se muestra cómo configurar y probar un NEG de Internet.

Descripción general de la configuración

La configuración de un NEG de Internet implica hacer lo siguiente:

  • Definir el extremo de Internet en un NEG de Internet
  • Agregar un NEG de Internet como el backend de un servicio de backend
  • Definir a qué tráfico de usuario se mapea este servicio de backend mediante la configuración del mapa de URL del balanceador de cargas de aplicaciones externo
  • Permite mostrar los rangos de IP necesarios.

En este ejemplo, se crean los siguientes recursos:

  • Una regla de reenvío con la dirección IP 120.1.1.1 dirige las solicitudes entrantes a un proxy de destino.
    • El networkTier de la regla de reenvío debe ser PREMIUM.
  • El proxy de destino compara cada solicitud con el mapa de URL a fin de determinar el servicio de backend apropiado para la solicitud.
    • Para los backends externos, el proxy de destino debe ser TargetHttpProxy o TargetHttpsProxy. En este ejemplo, se usa TargetHttpsProxy.
  • En el servicio de backend, Cloud CDN habilitado (opcional) permite almacenar en caché y entregar respuestas desde las cachés de Cloud CDN.
  • En este ejemplo, se incluye un encabezado personalizado, que se requiere cuando el backend externo espera un valor específico para el encabezado Host de la solicitud HTTP.

La configuración se ve de la siguiente manera.

Figura 2. Cloud CDN con un backend local
Figura 2. Cloud CDN con un backend local

Crea el NEG y el extremo 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 el nombre del grupo de extremos de red: example-fqdn-neg.
  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. En el FQDN, ingresa backend.example.com.
  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 example-fqdn-neg \
        --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 example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Enumera el NEG de Internet creado:

    gcloud compute network-endpoint-groups list --global
    

    Resultado:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. Enumera el extremo dentro del NEG:

    gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \
        --global
    

    Resultado:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Agrega un backend externo a un balanceador de cargas

En el siguiente ejemplo, se actualiza un balanceador de cargas existente.

En el balanceador de cargas existente, el servicio predeterminado es un servicio de Google Cloud. El ejemplo modifica el mapa de URL existente mediante la incorporación de un comparador de rutas de acceso que envía todas las solicitudes de cart/id/1223515 al servicio de backend images, que está asociado con el NEG de Internet.

Console

Crea el servicio de backend y agrega el NEG de Internet

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

    Ir a Balanceo de cargas

  2. Para agregar el servicio de backend a un balanceador de cargas existente, selecciona tu balanceador de cargas de aplicaciones clásico, haz clic en Menú y, luego, selecciona Editar.
  3. Haga clic en Configuración de backend.
  4. En el menú Servicios y buckets de backend, selecciona Crear un servicio de backend.
  5. Configura el nombre del servicio de backend como images.
  6. En Tipo de backend, selecciona Grupo de extremos de red de Internet.
  7. Selecciona el protocolo que quieres usar desde el balanceador de cargas al NEG de Internet. En este ejemplo, selecciona HTTPS.
  8. En Nuevo backend > Grupo de extremos de red de Internet, selecciona example-fqdn-neg y, luego, haz clic en Listo.
  9. Selecciona Habilitar Cloud CDN.
  10. Opcional: Modifica la configuración del modo de almacenamiento en caché y de TTL.
  11. En Configuración avanzada, en Encabezados de solicitud personalizados, haz clic en Agregar encabezado.
    1. En Nombre del encabezado, ingresa Host.
    2. En Valor de encabezado, ingresa backend.example.com.
  12. Haz clic en Crear.
  13. Mantén la ventana abierta para continuar.

Conecta el servicio de backend a un mapa de URL existente

  1. Haz clic en Reglas de host y ruta.
  2. La primera fila o filas tienen servicios de Google Cloud en la columna derecha, y una de ellas ya se propagó con la regla predeterminada Any unmatched (default) para hosts y Rutas.
  3. Asegúrate de que exista una fila con images seleccionado en la columna de la derecha. Si no existe, haz clic en Agregar regla de host y de ruta y selecciona images. Propaga los otros campos de la siguiente manera:
    1. En Hosts, ingresa *.
    2. En Rutas, ingresa /cart/id/1223515.

Revisa y finaliza

  1. Haz clic en Revisar y finalizar.
  2. Compara tu configuración con lo que pretendías crear.
  3. Si todo parece correcto, haz clic en Actualizar.

gcloud

  1. Crea un servicio de backend nuevo para el NEG:

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --cache-mode=CACHE_MODE \
       --protocol=HTTP2
    

    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.

  2. Configura el servicio de backend para agregar el encabezado de solicitud personalizado Host: backend.example.com a la solicitud:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. Usa el comando backend-services add-backend para agregar el NEG de Internet al servicio de backend:

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. Conecta el servicio de backend nuevo con el mapa de URL del balanceador de cargas mediante la creación de una regla coincidente nueva para dirigir las solicitudes a ese backend.

    gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \
      --default-service=GCP_SERVICE_EXAMPLE \
      --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \
      --backend-service-path-rules=/CART/ID/1223515=IMAGES
    

    Reemplaza lo siguiente:

    • EXAMPLE_URL_MAP: El nombre del mapa de URL existente
    • GCP_SERVICE_EXAMPLE: El nombre de un servicio de backend predeterminado existente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: El nombre de esta regla de ruta de acceso nueva
    • /CART/ID/1223515: La ruta
    • IMAGES: El nombre del nuevo servicio de backend con el NEG de Internet conectado

Agrega a la lista de entidades permitidas los rangos de IP necesarios

Para permitir que un balanceador de cargas de aplicaciones externo envíe solicitudes a tu NEG de Internet, debes consultar el registro TXT de DNS _cloud-eoips.googleusercontent.com mediante una herramienta como dig o nslookup.

Por ejemplo, ejecuta el siguiente comando dig:

dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2

El resultado contiene dos rangos de IP, como se muestra a continuación:

34.96.0.0/20
34.127.192.0/18

Toma nota de los rangos de IP y asegúrate de que tu firewall o la lista de control de acceso (LCA) a la nube permitan estos rangos.

Para obtener más información, consulta Autentica solicitudes.

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 de aplicaciones externo

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.

  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. Si creaste un balanceador de cargas HTTP, puedes probarlo con un navegador web en http://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Deberías dirigirte a la página principal del servicio helloworld.

    Si creaste un balanceador de cargas de HTTPS, puedes probarlo mediante un navegador web en https://IP_ADDRESS. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Deberías dirigirte a la página principal del servicio helloworld.

    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 (por ejemplo, backend.example.com) 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.

Inhabilita 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. Desmarca la casilla de verificación Habilitar Cloud CDN.

  7. Para revisar los cambios, haz clic en Revisar y finalizar y, luego, haz clic en Actualizar.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

Inhabilitar Cloud CDN no invalida ni borra definitivamente las memorias caché. Si desactivas Cloud CDN y vuelves a activarlo, es probable que la mayor parte del contenido almacenado en caché, o todo ese contenido, aún siga almacenado en caché. Para evitar que las memorias caché usen el contenido, debes invalidarlo.

¿Qué sigue?