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. La implementación en varias regiones ofrece baja latencia y mayor disponibilidad en caso de interrupciones regionales.
Debido a que los servicios de Cloud Run se implementan en regiones individuales, debes implementar tu servicio en varias regiones y, luego, configurar el balanceo de cargas global para el servicio.
Implementa el servicio en varias regiones
Puedes implementar el mismo servicio en varias regiones con uno de los siguientes métodos:
- Repite los pasos para implementar en una sola región.
- Implementa un servicio multirregional.
Implementa un servicio multirregional
En esta sección, se muestra cómo implementar y configurar un servicio de varias regiones desde un solo comando de gcloud CLI o un archivo YAML.
gcloud
Para crear e implementar un servicio multirregional, ejecuta el comando
gcloud beta run deploy
con la marca--regions
:gcloud beta run deploy
SERVICE_NAME
\ --image=IMAGE_URL
\ --regions=REGIONS
Reemplaza lo siguiente:
SERVICE_NAME
: Es el nombre del servicio multirregión que deseas implementar.IMAGE_URL
: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest
.REGIONS
: Es la lista de varias regiones en las que deseas realizar la implementación. Por ejemplo,us-central1,asia-east1
YAML
Crea el archivo YAML para tu servicio con el atributo
run.googleapis.com/regions
para establecer las múltiples regiones en las que deseas implementar tu servicio:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
spec: template: spec: containers: - image:IMAGE_URL
Reemplaza lo siguiente:
SERVICE_NAME
: Es el nombre del servicio multirregional al que deseas implementar.REGIONS
: Es la lista de varias regiones que deseas actualizar. Por ejemplo,us-central1,asia-east1
IMAGE_URL
: Es una referencia a la imagen del contenedor, por ejemplo,us-docker.pkg.dev/cloudrun/container/hello:latest
.
Crea el servicio con el siguiente comando:
gcloud beta run multi-region-services replace service.yaml
Actualiza un servicio multirregional
En esta sección, se muestra cómo agregar o quitar regiones de un servicio multirregional desde un solo comando de gcloud CLI o un archivo YAML.
gcloud
Para agregar o quitar regiones de un servicio multirregional, ejecuta el comando gcloud beta run multi-region-services update
.
Para agregar el servicio multirregional a una o más regiones adicionales, usa la marca
--add-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --add-regions=REGIONS
Para quitar el servicio multirregional de una o varias regiones, usa la marca
--remove-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --remove-regions=REGIONS
Reemplaza lo siguiente:
SERVICE_NAME
: Es el nombre del servicio multirregión que deseas actualizar.REGIONS
: Es la región o regiones a las que deseas agregar o quitar tu servicio. Por ejemplo,us-central1,asia-east1
YAML
Para actualizar un servicio multirregional existente, descarga su configuración de YAML:
gcloud beta run multi-region-services describe SERVICE_NAME --format export > service.yaml
Actualiza el atributo
run.googleapis.com/regions
para agregar o quitar la lista de regiones en las que deseas que se implemente el servicio:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
Reemplaza lo siguiente:
SERVICE_NAME
: Es el nombre del servicio multirregional al que deseas implementar.REGIONS
: Es la nueva lista de varias regiones en las que deseas que se implemente la revisión del servicio.
Actualiza el servicio con el siguiente comando:
gcloud beta run multi-region-services replace service.yaml
Cómo borrar un servicio multirregional
Para borrar un servicio multirregión, ejecuta el comando
gcloud beta run multi-region-services delete
:gcloud beta run multi-region-services delete
SERVICE_NAME
Reemplaza
SERVICE_NAME
por el nombre del servicio multirregional que deseas borrar.
Configura el balanceo de cargas global
En esta sección, se muestra cómo configurar un balanceador de cargas de aplicaciones 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).
La arquitectura que se describe en las siguientes secciones no enruta las solicitudes de forma automática a una región diferente cuando un servicio regional de Cloud Run deja de responder o muestra errores. Para aumentar la disponibilidad de tu servicio multirregional, puedes configurar la detección de valores atípicos a fin de identificar los servicios de Cloud Run en mal estado según su tasa de errores HTTP y diferir algunas solicitudes a otra región.
Crea un balanceador de cargas
Crear un balanceador de cargas de aplicaciones externo implica crear varios recursos de red y conectarlos:
gcloud CLI
- Reserva una dirección IP estática para que no tengas que actualizar los registros DNS cuando vuelves a crear el balanceador de cargas.
En el comando anterior, reemplaza SERVICE_IP por un nombre para el recurso de dirección IP (p. ej.,gcloud compute addresses create --global SERVICE_IP
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.
-
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
). - 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
). - Crea un certificado TLS administrado para que el dominio entregue tráfico de HTTPS. Reemplaza example.com por el nombre de dominio.
gcloud 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
). - 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
). - 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
).
Terraform
Como alternativa a los pasos descritos en esta sección, puedes usar el Módulo de Terraform del balanceador de cargas de HTTP global.
Agrega lo siguiente a tu archivo de Terraform (por ejemplo, main.tf
):
-
Configura la dirección IP:
Configura el nombre del recurso de dirección IP como
myservice-service-ip
. Puedes cambiarlo a tu propio valor. 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. -
Crea y configura el servicio de backend:
Este recurso configura el servicio de backend para que se llame
myservice-backend
. Puedes cambiarlo a tu propio valor. -
Configura el mapa de URL:
Conecta el recurso de servicio de backend (
myservice-backend
) al nuevo recurso de mapa de URL (myservice-lb-urlmap
). Puedes cambiarlos por tus propios valores. -
Crea un certificado TLS administrado para que el dominio entregue tráfico de HTTPS. Reemplaza
example.com
por tu nombre de dominio en el recursogoogle_compute_managed_ssl_certificate
: -
Configura el proxy HTTPS:
Crea un recurso
google_compute_target_https_proxy
con el nombre de destinomyservice-https-proxy
y conecta el certificado TLS creado previamente (myservice-ssl-cert
) y los recursos de asignación de URL (myservice-lb-urlmap
). Puedes cambiarlos por tus propios valores. -
Configura la regla de reenvío:
Crea el recurso
google_compute_global_forwarding_rule
con el nombre de destinomyservice-https-proxy
y conecta el proxy HTTPS de destino (myservice-https-proxy
) y el recurso de dirección IP (myservice-service-ip
) que creaste anteriormente. Puedes cambiarlos a tus propios valores. -
Aplica esta configuración:
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud , completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto predeterminado de Google Cloud en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf
, por ejemplo,main.tf
. En este instructivo, el archivo se denominamain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tf
recién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgrade
para usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yes
cuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto de para ver los resultados. En la consola de Google Cloud , navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Configura grupos de extremos de red 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:
gcloud CLI
-
Crea un grupo de extremos de red para el servicio de Cloud Run en
REGION
:gcloud compute network-endpoint-groups create NEG_NAME \ --region=REGION \ --network-endpoint-type=SERVERLESS \ --cloud-run-service=SERVICE_NAME
Reemplaza lo siguiente:
- NEG_NAME por el nombre del recurso del grupo de extremos de red (p. ej., “myservice-neg-uscentral1”)
- REGION por la [region][loc] en la que se implementa el servicio
- SERVICE_NAME por el nombre de tu servicio
-
Agrega el grupo de extremos de red al servicio de backend:
gcloud 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.
-
Repite los pasos anteriores para cada región.
Terraform
-
Configura un grupo de extremos de red con el nombre
myservice-neg
para el servicio de Cloud Run en cada región especificada en la variablerun_regions
: -
Configura un servicio de backend para conectar el grupo de extremos de red (
myservice-neg
):
Configura registros DNS en el dominio
Para apuntar el nombre de dominio a la regla de reenvío que creaste, actualiza los registros DNS con la dirección IP que creaste.
Ejecuta el siguiente comando para encontrar la dirección IP reservada del balanceador de cargas:
gcloud compute addresses describe \ --global=SERVICE_IP \ --format='value(address)'
Reemplaza SERVICE_IP por el nombre de la dirección IP que creaste antes. Este comando imprime la dirección IP en el resultado.
Para actualizar los registros DNS del dominio, agrega un registro
A
con esta dirección IP.
Configura un público personalizado si usas servicios autenticados
Los servicios autenticados están protegidos por IAM. Estos servicios de Cloud Run requieren una autenticación de cliente que declare el destinatario previsto de una solicitud durante la generación de la credencial (el público).
El público suele ser la URL completa del servicio de destino, que de forma predeterminada es una URL generada que termina en run.app
para los servicios de Cloud Run. Sin embargo, en una implementación multirregional, un cliente no puede saber con anticipación a qué servicio regional se enrutará una solicitud.
Por lo tanto, en el caso de una implementación multirregional, configura el servicio para que use públicos personalizados.
Espera a que el balanceador de cargas aprovisione
Después de configurar el dominio con la dirección IP del balanceador de cargas, espera a que se propaguen los registros DNS. Del mismo modo, espera a que se emita el certificado TLS administrado para tu dominio y esté listo para comenzar a entregar tráfico HTTPS de manera global.
El balanceador de cargas puede tardar hasta 30 minutos en comenzar a entregar tráfico.
Una vez que esté listo, visita la URL de tu sitio web con el prefijo https://
para probarlo.
Verifica el estado
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
En el resultado, se muestra la dirección IP que configuraste en tus registros DNS.
Ejecuta el siguiente comando para verificar el estado de la emisión del certificado administrado:
gcloud compute ssl-certificates describe CERT_NAME
Reemplaza CERT_NAME por el nombre que elegiste antes para el recurso del certificado SSL.
El resultado muestra una línea que contiene
status: ACTIVE
.
Configurar el redireccionamiento de HTTP a HTTPS
De forma predeterminada, una regla de reenvío solo controla un único protocolo y, por lo tanto, las solicitudes a los extremos http://
responden con el mensaje "404 Not Found". Si necesitas que las solicitudes a las URLs http://
se redireccionen al protocolo https://
, crea un mapa de URL adicional y una regla de reenvío mediante las siguientes instrucciones:
gcloud CLI
-
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 (por ejemplo,
myservice-httpredirect
). -
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 (por ejemplo,
myservice-http
). -
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 (por ejemplo,
myservice-httplb
).
Terraform
-
Cree un recurso de mapa de URL con una regla de redireccionamiento.
-
Crea un proxy HTTP de destino con el recurso de asignación de URL recién creado (
myservice-https-urlmap
): -
Crea una regla de reenvío en el puerto
80
con la misma dirección IP reservada (myservice-http-proxy
).
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 multirregional de Cloud Run.
Configura una conmutación por error manual
Para configurar manualmente el tráfico de modo que se realice la conmutación por error a una región en buen estado, modifica el mapa de URL del balanceador de cargas de aplicaciones externo global.
Para actualizar el mapa de URL del balanceador de cargas de aplicaciones externo global, quita el NEG del servicio de backend con la marca
--global
:gcloud compute backend-services remove-backend
BACKEND_NAME
\ --network-endpoint-group=NEG_NAME
\ --network-endpoint-group-region=REGION
\ --globalReemplaza lo siguiente:
BACKEND_NAME
: el nombre del servicio de backend.NEG_NAME
: Es el nombre del recurso del grupo de extremos de red, por ejemplo,myservice-neg-uscentral1
.REGION
: Es la región en la que se creó el NEG y de la que deseas quitar tu servicio. Por ejemplo,us-central1,asia-east1
Para confirmar que una región en buen estado ahora entrega tráfico, navega a https://
<domain-name>
.