Entrega tráfico desde varias regiones

Para mostrar respuestas más rápidas a los usuarios de todo el mundo, debes implementar servicios en varias regiones y enrutar a tus usuarios a la región más cercana.

Sin embargo, los servicios de Cloud Run (completamente administrados) se implementan en regiones individuales. Para enrutar a los usuarios a diferentes regiones del servicio, debes configurar el balanceo de cargas de HTTP(S) externo.

En esta guía, se muestra cómo configurar el balanceador de cargas de HTTP(S) externo con un dominio protegido con un certificado TLS administrado que apunte a una dirección IP anycast global (que enruta los usuarios al centro de datos de Google más cercano en que se implementa tu servicio).

Antes de comenzar

Crea un balanceador de cargas

Crear un balanceador de cargas externo implica crear varios recursos de red y conectarlos, como se muestra en las siguientes instrucciones.

Línea de comandos

  1. Reserva una dirección IP estática para que no tengas que actualizar los registros DNS cuando vuelves a crear el balanceador de cargas.
    gcloud compute addresses create --global SERVICE_IP
    En el comando anterior, reemplaza SERVICE_IP por un nombre para el recurso de dirección IP (p. ej., myservice-ip).

    Esta dirección IP es una dirección IPv4 anycast global que se enruta al centro de datos de Google o al punto de presencia más cercano a los visitantes.

  2. Crea un servicio de backend.
    gcloud compute backend-services create --global BACKEND_NAME

    En el comando anterior, reemplaza BACKEND_NAME por el nombre que deseas darle al servicio de backend (p. ej., myservice-backend).

  3. Crea un mapa de URL.
    gcloud compute url-maps create URLMAP_NAME --default-service=BACKEND_NAME

    Reemplaza URLMAP_NAME por el nombre que deseas asignar al mapa de URL (p. ej., myservice-urlmap).

  4. Crea un certificado TLS administrado para que el dominio entregue tráfico de HTTPS. Reemplaza example.com por el nombre de dominio.
    gcloud beta compute ssl-certificates create CERT_NAME \
      --domains=example.com

    Reemplaza CERT_NAME por el nombre que quieres que tenga el certificado SSL administrado (p. ej., myservice-cert).

  5. Crea un proxy HTTPS de destino.
    gcloud compute target-https-proxies create HTTPS_PROXY_NAME \
      --ssl-certificates=CERT_NAME \
      --url-map=URLMAP_NAME

    Reemplaza HTTPS_PROXY_NAME por el nombre que deseas otorgar al proxy HTTPS de destino (p. ej., myservice-https).

  6. Crea una regla de reenvío que conecte los recursos de red que creaste a la dirección IP.
    gcloud compute forwarding-rules create --global FORWARDING_RULE_NAME \
      --target-https-proxy=HTTPS_PROXY_NAME \
      --address=SERVICE_IP \
      --ports=443

    Reemplaza FORWARDING_RULE_NAME por el nombre del recurso de regla de reenvío que deseas crear (p. ej., myservice-lb).

Implementa en varias regiones

Implementa el servicio en las regiones de Cloud Run disponibles. Para facilitar la administración, puedes usar el mismo nombre de servicio en varias regiones.

  1. Elige las regiones en las que quieres que el servicio esté disponible.

  2. Implementa el servicio de Cloud Run en regiones individuales.

      gcloud run deploy SERVICE_NAME \
          --allow-unauthenticated \
          --image=IMAGE_URL \
          --region=REGION
    

    Reemplaza las siguientes variables:

    • REGION por una de las regiones en las que deseas realizar la implementación
    • SERVICE_NAME por el nombre de tu servicio. Usar el mismo nombre de servicio en varias regiones facilita el seguimiento de las implementaciones multirregionales
    • IMAGE_URL por una referencia a la imagen del contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest
  3. Repite el paso anterior para cada región.

Ubicaciones de Cloud Run

Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.

El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run. Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run. Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.

Cloud Run está disponible en las siguientes regiones:

Sujetas a los Precios del nivel 1

Sujetas a los Precios del nivel 2

  • asia-east2 (Hong Kong)
  • asia-northeast3 (Seúl, Corea del Sur)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Yakarta)
  • asia-south1 (Bombay, India)
  • asia-south2 Delhi (India)
  • australia-southeast1 (Sídney)
  • australia-southeast2 (Melbourne)
  • europe-central2 (Varsovia, Polonia)
  • europe-west2 (Londres, Reino Unido)
  • europe-west3 (Fráncfort, Alemania)
  • europe-west6 (Zúrich, Suiza) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast1 (Montreal) Ícono de la hoja Bajo nivel de CO2
  • northamerica-northeast2 (Toronto)
  • southamerica-east1 (São Paulo, Brasil) Ícono de la hoja Bajo nivel de CO2
  • us-west2 (Los Ángeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en Cloud Console.

Configura backends regionales

Para cada región que implementaste en el paso anterior, debes crear grupos de extremos de red (NEG) sin servidores y agregarlos al servicio de backend mediante las siguientes instrucciones:

  1. Crea un grupo de extremos de red para el servicio de Cloud Run en REGION:

    gcloud beta compute network-endpoint-groups create NEG_NAME \
        --region=REGION \
        --network-endpoint-type=SERVERLESS \
        --cloud-run-service=SERVICE_NAME 

    En el comando anterior, reemplaza los siguientes valores:

    • NEG_NAME por el nombre del recurso del grupo de extremos de red (p. ej. myservice-neg-uscentral1)
    • REGION por la región en la que se implementa el servicio
    • SERVICE_NAME por el nombre de tu servicio
  2. Agrega el grupo de extremos de red al servicio de backend:

    gcloud beta compute backend-services add-backend --global BACKEND_NAME \
        --network-endpoint-group-region=REGION \
        --network-endpoint-group=NEG_NAME

    Especifica el NEG_NAME que creaste en el paso anterior para la región.

  3. Repite los pasos anteriores para cada región.

Configura registros DNS en el dominio

Para apuntar el nombre de dominio a la regla de reenvío que creaste, debes actualizar los registros DNS con la dirección IP que creaste.

  1. Busca la dirección IP reservada del balanceador de cargas mediante la ejecución del siguiente comando:

      gcloud compute addresses describe --global SERVICE_IP --format='value(address)'

    Reemplaza SERVICE_IP por el nombre de la dirección IP que creaste antes. Con este comando, se imprimirá la dirección IP en el resultado.

  2. Para actualizar los registros DNS del dominio, agrega un registro A con esta dirección IP.

Espera a que el balanceador de cargas aprovisione

Después de configurar el dominio con la dirección IP del balanceador de cargas, debes esperar un tiempo para que se propaguen los registros DNS. Del mismo modo, debes esperar un tiempo hasta que se emita el certificado TLS administrado para el dominio y esté listo para entregar tráfico de HTTPS de manera global.

Puede llevar hasta 30 minutos que el balanceador de cargas comience a entregar tráfico.

Una vez que esté listo, visita la URL del sitio web con el prefijo https:// para probarlo.

Verifica el estado

  1. Para verificar el estado de la propagación de los registros DNS, usa la utilidad de línea de comandos de dig:

    dig A +short example.com

    El resultado debería mostrar la dirección IP que configuraste en los registros DNS.

  2. Para verificar el estado de la emisión del certificado administrado, ejecuta lo siguiente:

    gcloud beta compute ssl-certificates describe CERT_NAME

    Reemplaza CERT_NAME por el nombre que elegiste antes para el recurso del certificado SSL.

    El resultado debe mostrar una línea que contenga status: ACTIVE.

Configura el redireccionamiento de HTTP a HTTPS

Según la configuración predeterminada, una regla de reenvío solo controla un único protocolo y, por lo tanto, las solicitudes a los extremos http:// responderán con el error 404 Not Found. Si necesitas que las solicitudes a las URL http:// se redireccionen al protocolo https://, debes crear un mapa de URL adicional y una regla de reenvío mediante las siguientes instrucciones:

  1. Cree un mapa de URL con una regla de redireccionamiento.

    gcloud compute url-maps import HTTP_URLMAP_NAME \
        --global \
        --source /dev/stdin <<EOF
    name: HTTP_URLMAP_NAME
    defaultUrlRedirect:
      redirectResponseCode: MOVED_PERMANENTLY_DEFAULT
      httpsRedirect: True
    EOF

    Reemplaza HTTP_URLMAP_NAME por el nombre del recurso de mapa de URL que crearás (p. ej., myservice-httpredirect).

  2. Crea un proxy HTTP de destino con el mapa de URL.

    gcloud compute target-http-proxies create HTTP_PROXY_NAME \
      --url-map=HTTP_URLMAP_NAME

    Reemplaza HTTP_PROXY_NAME por el nombre del proxy HTTP de destino que crearás (p. ej., myservice-http).

  3. Crea una regla de reenvío en el puerto 80 con la misma dirección IP reservada.

    gcloud compute forwarding-rules create --global HTTP_FORWARDING_RULE_NAME \
      --target-http-proxy=HTTP_PROXY_NAME \
      --address=SERVICE_IP \
      --ports=80
    

    Reemplaza HTTP_FORWARDING_RULE_NAME por el nombre de la regla de reenvío nueva que crearás (p. ej., myservice-httplb).

Usa suscripciones de envío de Pub/Sub autenticadas con implementación multirregional

De forma predeterminada, un servicio de Pub/Sub entrega mensajes a los extremos de envío en la misma región de Google Cloud en la que el servicio de Pub/Sub almacena los mensajes. Para obtener una solución alternativa a este comportamiento, consulta Usa una suscripción de envío de Pub/Sub autenticada con una implementación de Cloud Run multirregional.