Configura un balanceador de cargas de aplicaciones externo regional con buckets de Cloud Storage

En este documento, se muestra cómo crear un balanceador de cargas de aplicaciones externo regional para enrutar solicitudes de contenido estático a buckets de Cloud Storage.

Antes de comenzar

Asegúrate de que tu configuración cumpla con los requisitos.

Instala Google Cloud CLI

Algunas de las instrucciones de esta guía solo se pueden llevar a cabo con Google Cloud CLI. Para instalarla, consulta Instala gcloud CLI.

Encontrarás comandos relacionados con el balanceo de cargas en el documento de referencia de la API y la gcloud CLI.

Roles obligatorios

Si eres el creador del proyecto, se te otorga el rol de propietario (roles/owner). De forma predeterminada, el rol de propietario (roles/owner) o el rol de editor (roles/editor) incluye los permisos necesarios para seguir este documento.

Si no eres el creador del proyecto, se deben otorgar los permisos necesarios en el proyecto a la principal correspondiente. Por ejemplo, una principal puede ser una Cuenta de Google (para usuarios finales) o una cuenta de servicio.

Para obtener los permisos que necesitas para crear buckets de Cloud Storage y recursos de red, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Para obtener más información sobre los roles y permisos de Cloud Load Balancing, consulta Roles y permisos. Para obtener más información sobre cómo definir políticas de IAM con otorgamientos condicionales para reglas de reenvío, consulta Condiciones de IAM para reglas de reenvío.

Configura un recurso de certificado SSL

Para un balanceador de cargas de aplicaciones externo regional que use HTTPS como el protocolo de solicitud y respuesta, puedes crear un recurso de certificado SSL con un certificado SSL de Compute Engine o un certificado del Administrador de certificados.

Para este ejemplo, crea un recurso de certificado SSL con el Administrador de certificados como se describe en uno de los siguientes documentos:

Después de crear el certificado, puedes adjuntarlo al proxy de destino HTTPS.

Recomendamos que uses un certificado administrado por Google.

Limitaciones

Las siguientes limitaciones se aplican a los buckets de Cloud Storage cuando se usan como backends para un balanceador de cargas de aplicaciones externo regional:

  • No se admite el acceso a buckets privados, por lo que el bucket de backend debe ser accesible de forma pública a través de Internet.

  • No se admiten las URLs firmadas.

  • La integración de Cloud CDN no está disponible cuando se crean buckets de backend para un balanceador de cargas de aplicaciones externo regional.

  • Cuando se usa un balanceador de cargas de aplicaciones externo regional para acceder a buckets de backend, solo se admite el método HTTP GET. Puedes descargar contenido del bucket, pero no está disponible la carga de contenido en el bucket a través del balanceador de cargas de aplicaciones externo regional.

  • Para un balanceador de cargas de aplicaciones externo regional, los buckets de Cloud Storage solo se admiten en la región en la que está configurado el balanceador de cargas. No se admiten los buckets birregionales ni multirregionales.

Descripción general de la configuración

En el siguiente diagrama, se muestra un balanceador de cargas de aplicaciones externo regional con buckets de backend ubicados en la misma región que el balanceador de cargas.

La regla de reenvío del balanceador de cargas de aplicaciones externo regional tiene una dirección IP externa.

Un balanceador de cargas de aplicaciones externo regional envía tráfico a un backend de Cloud Storage.
Distribución del tráfico a Cloud Storage (haz clic para ampliar).

En las siguientes secciones, configurarás los diferentes recursos como se muestra en el diagrama anterior.

Configura la red y la subred de solo proxy

En este ejemplo, se usa la siguiente red de VPC, región y subred de solo proxy:

  • Red. La red es una red de VPC de modo personalizado denominada lb-network.

  • Subred para proxies de Envoy. Una subred llamada proxy-only-subnet-us en la región us-east1 usa 10.129.0.0/23 para su rango de IP principal.

Configura una red de VPC en modo personalizado

Console

  1. En la consola de Google Cloud , ve a la página Redes de VPC.

    Ir a Redes de VPC

  2. Haz clic en Crear red de VPC.

  3. En Nombre, ingresa lb-network.

  4. Haz clic en Crear.

gcloud

  1. Crea una red de VPC personalizada, denominada lb-network, con el gcloud compute networks create comando.

    gcloud compute networks create lb-network --subnet-mode=custom
    

Configura la subred de solo proxy

Una subred de solo proxy proporciona un conjunto de direcciones IP que Google Cloud usa para ejecutar proxies de Envoy en tu nombre. Los proxies finalizan las conexiones del cliente y crean conexiones nuevas a los backends.

Todos los balanceadores de cargas regionales basados en Envoy usan esta subred de solo proxy en la misma región de la red de VPC. Solo puede haber una subred de solo proxy activa para un propósito determinado, por región, por red.

Console

  1. En la consola de Google Cloud , ve a la página Redes de VPC.

    Ir a Redes de VPC

  2. Haz clic en el nombre de la red de VPC que creaste.

  3. En la pestaña Subred, haz clic en Agregar subred.

  4. Ingresa la siguiente información:

    • Nombre: proxy-only-subnet-us
    • Región: us-east1
    • Propósito: Proxy administrado regional
    • Rangos de direcciones IP: 10.129.0.0/23
  5. Haz clic en Agregar.

gcloud

  1. Crea una subred de solo proxy en la región us-east1 con el gcloud compute networks subnets create comando.

    gcloud compute networks subnets create proxy-only-subnet-us \
        --purpose=REGIONAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-east1 \
        --network=lb-network \
        --range=10.129.0.0/23
    

Configura tus buckets de Cloud Storage

El proceso para configurar tus buckets de Cloud Storage es el siguiente:

  • Se crean los buckets.
  • Se copia el contenido en los buckets.

Crea buckets de Cloud Storage

En este ejemplo, se crean dos buckets de Cloud Storage en la región us-east1.

Console

  1. En la Google Cloud consola de, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. Haz clic en Crear.

  3. En la sección Comenzar, ingresa un nombre global único que siga los lineamientos de nomenclatura.

  4. Haz clic en Elige dónde almacenar tus datos.

  5. Configura Tipo de ubicación como Región.

  6. En la lista de regiones, selecciona us-east1.

  7. Haz clic en Crear.

  8. Haz clic en Buckets para volver a la página Buckets de Cloud Storage. Usa estas instrucciones para crear un segundo bucket en la región us-east1.

gcloud

  1. Crea el primer bucket en la región us-east1 con el gcloud storage buckets create comando.

    gcloud storage buckets create gs://BUCKET1_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    
  2. Crea el segundo bucket también en la región us-east1 con el gcloud storage buckets create comando.

    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    

Reemplaza las variables BUCKET1_NAME y BUCKET2_NAME por los nombres de tus bucket de Cloud Storage.

Copia archivos gráficos en tus buckets de Cloud Storage

Para que puedas probar la configuración, copia un archivo gráfico de un bucket público de Cloud Storage en tus propios buckets de Cloud Storage.

Ejecuta el siguiente comando en Cloud Shell y reemplaza las variables de nombre del bucket por los nombres únicos de tus bucket de Cloud Storage:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/

Haz que los buckets de Cloud Storage sean legibles de forma pública

Para que todos los objetos de un bucket sean legibles para todos en la Internet pública, otorga a la principal allUsers el rol de visualizador de objetos de Storage (roles/storage.objectViewer).

Console

A fin de otorgar a todos los usuarios acceso para ver objetos en tus buckets, repite el siguiente procedimiento para cada bucket:

  1. En la Google Cloud consola de, ve a la página Buckets de Cloud Storage.

    Ir a Buckets

  2. En la lista de buckets, haz clic en el nombre del bucket que deseas hacer público.

  3. Selecciona la pestaña Permisos.

  4. En la sección Permisos, haz clic en el Otorgar acceso botón. Aparecerá el diálogo Otorgar acceso.

  5. En el campo Principales nuevas, ingresa allUsers.

  6. En el campo Seleccionar un rol, ingresa Storage Object Viewer en el cuadro de filtro y selecciona Visualizador de objetos de Storage a partir de los resultados filtrados.

  7. Haz clic en Guardar.

  8. Haz clic en Permitir acceso público.

gcloud

Ejecuta el buckets add-iam-policy-binding comando para otorgar a todos los usuarios acceso para ver objetos en tus buckets.

gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
    --member=allUsers \
    --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \
   --member=allUsers \
   --role=roles/storage.objectViewer

Reserva la dirección IP del balanceador de cargas

Reserva una dirección IP externa estática para la regla de reenvío del balanceador de cargas.

Console

  1. En la Google Cloud consola de, ve a la página Reserva una dirección estática.

    Ir a Reserva una dirección estática

  2. Elige un nombre para la dirección nueva.

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

  4. En Tipo, selecciona Regional.

  5. En Región, selecciona us-east1.

  6. Deja la opción Conectado a configurada en Ninguna. Después de crear el balanceador de cargas, esta dirección IP se adjunta a la regla de reenvío del balanceador de cargas.

  7. Haz clic en Reservar si deseas reservar la dirección IP.

gcloud

  1. Para reservar una dirección IP externa estática, usa el comando gcloud compute addresses create.

    gcloud compute addresses create ADDRESS_NAME \
       --region=us-east1
    

    Reemplaza lo siguiente:

    • ADDRESS_NAME: El nombre que quieres asignar a esta dirección.
  2. Usa el gcloud compute addresses describe comando para ver el resultado:

    gcloud compute addresses describe ADDRESS_NAME
    

La dirección IP que se muestra se denomina RESERVED_IP_ADDRESS en la siguiente sección.

Configura el balanceador de cargas con buckets de backend

En esta sección, se muestra cómo crear los siguientes recursos para un balanceador de cargas de aplicaciones externo regional:

  • Dos buckets de backend. Los buckets de backend sirven como wrapper para los buckets de Cloud Storage que creaste antes.
  • Mapa de URL
  • Proxy de destino
  • Una regla de reenvío con direcciones IP regionales. La regla de reenvío tiene una dirección IP externa.

En este ejemplo, puedes usar HTTP o HTTPS como el protocolo de solicitud y respuesta entre el cliente y el balanceador de cargas. Si quieres crear un balanceador de cargas de HTTPS, debes agregar un recurso de certificado SSL al frontend del balanceador de cargas.

Para crear los componentes de balanceo de cargas mencionados anteriormente con gcloud CLI, sigue estos pasos:

  1. Crea dos buckets de backend en la us-east1 región con el gcloud compute backend-buckets create comando. Los buckets de backend tienen un esquema de balanceo de cargas de EXTERNAL_MANAGED.

    gcloud compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --region=us-east1
    
    gcloud compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --region=us-east1
    

    Reemplaza las variables BUCKET1_NAME y BUCKET2_NAME por los nombres de tus bucket de Cloud Storage.

  2. Crea un mapa de URL para enrutar las solicitudes entrantes al bucket de backend con el gcloud compute url-maps create comando.

    gcloud compute url-maps create URL_MAP_NAME \
        --default-backend-bucket=backend-bucket-cats \
        --region=us-east1
    

    Reemplaza la variable URL_MAP_NAME por el nombre del mapa de URL.

  3. Configura las reglas de host y ruta de acceso del mapa de URL con el gcloud compute url-maps add-path-matcher comando.

    En este ejemplo, el bucket de backend predeterminado es backend-bucket-cats, que controla todas las rutas de acceso que existen en él. Sin embargo, cualquier solicitud que apunte a http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg usa el backend backend-bucket-dogs. Por ejemplo, si la /love-to-fetch/ carpeta también existe dentro de tu backend predeterminado (backend-bucket-cats), el balanceador de cargas prioriza el backend-bucket-dogs backend porque hay una regla de ruta de acceso específica para /love-to-fetch/*.

    gcloud compute url-maps add-path-matcher URL_MAP_NAME \
        --path-matcher-name=path-matcher-pets \
        --new-hosts=* \
        --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \
        --default-backend-bucket=backend-bucket-cats
    

    Reemplaza la variable URL_MAP_NAME por el nombre del mapa de URL.

  4. Crea un proxy de destino con el gcloud compute target-http-proxies create comando.

    Para el tráfico HTTP, crea un proxy HTTP de destino para enrutar solicitudes al mapa de URL:

    gcloud compute target-http-proxies create http-proxy \
        --url-map=URL_MAP_NAME \
        --region=us-east1
    

    Reemplaza la variable URL_MAP_NAME por el nombre del mapa de URL.

    Para el tráfico HTTPS, crea un proxy HTTPS de destino para enrutar las solicitudes a el mapa de URL. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para un balanceador de cargas de HTTPS. Después de crear el certificado, puedes adjuntarlo al proxy de destino HTTPS.

    Para adjuntar un certificado del Administrador de certificados, ejecuta el siguiente comando:

    gcloud compute target-https-proxies create https-proxy \
        --url-map=URL_MAP_NAME \
        --certificate-manager-certificates=CERTIFICATE_NAME \
        --region=us-east1
    

    Reemplaza lo siguiente:

  5. Crea una regla de reenvío con una dirección IP en la us-east1 región con el gcloud compute forwarding-rules create comando.

    Para el tráfico HTTP, crea una regla de reenvío regional para enrutar las solicitudes entrantes al proxy HTTP de destino:

    gcloud compute forwarding-rules create http-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network=lb-network \
        --address=RESERVED_IP_ADDRESS \
        --ports=80 \
        --region=us-east1 \
        --target-http-proxy=http-proxy \
        --target-http-proxy-region=us-east1
    

    Para el tráfico HTTPS, crea una regla de reenvío regional para enrutar las solicitudes entrantes al proxy HTTPS de destino:

    gcloud compute forwarding-rules create https-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network=lb-network \
        --address=RESERVED_IP_ADDRESS \
        --ports=443 \
        --region=us-east1 \
        --target-https-proxy=https-proxy \
        --target-https-proxy-region=us-east1
    

Envía una solicitud HTTP al balanceador de cargas

Ahora que el servicio de balanceo de cargas está en ejecución, puedes enviar una solicitud a la regla de reenvío del balanceador de cargas.

  1. Obtén la dirección IP de la regla de reenvío del balanceador de cargas (http-fw-rule), que se encuentra en la región us-east1.

      gcloud compute forwarding-rules describe http-fw-rule \
          --region=us-east1
    

    Copia la dirección IP que se muestra para usarla como FORWARDING_RULE_IP_ADDRESS en el siguiente paso.

  2. Realiza una solicitud HTTP a la dirección IP virtual (VIP) de la regla de reenvío mediante curl.

      curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
    
      curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
    

¿Qué sigue?