Comienza a usar el balanceo de cargas para API Gateway

En este instructivo, se muestra cómo crear un balanceador de cargas de aplicaciones externo global para enrutar las solicitudes a API Gateway. En el proceso de configuración, se siguen los mismos pasos que para configurar la integración del balanceador de cargas de aplicaciones externo global con otros productos sin servidores, como Cloud Run, funciones de Cloud Run y App Engine.

Si bien no se requiere un balanceador de cargas para que API Gateway funcione, este permite que tu puerta de enlace aproveche los beneficios de un balanceador de cargas. Por ejemplo, usar un balanceador de cargas de aplicaciones externo global con API Gateway te permite hacer lo siguiente:

  • Usa dominios personalizados.
  • Aprovecha Google Cloud Armor como servicio de seguridad de red.
  • Administra un balanceo de cargas eficiente en las puertas de enlace de varias ubicaciones.
  • Implementa la administración avanzada del tráfico.

Antes de comenzar

  1. Si aún no lo hiciste, descarga e instala Google Cloud CLI.

    Descarga la CLI de gcloud

  2. Actualiza los componentes de gcloud:

    gcloud components update
  3. Sigue la Guía de inicio rápido de API Gateway para implementar un servicio de Cloud Run y crear una puerta de enlace que apunte a ese servicio.

  4. Configura permisos.

  5. Agrega un recurso de certificado SSL.

Implementa un servicio de Cloud Run y una instancia de API Gateway

En este instructivo, implementarás un servicio “hello-world” en Cloud Run, crearás una puerta de enlace que se enruta al servicio de Cloud Run y configurarás un balanceador de cargas de aplicaciones externo global para enrutar las solicitudes a un dominio personalizado.

Aunque en este instructivo se usa Cloud Run como el servicio de backend para API Gateway, estos pasos también se aplican a cualquier servicio de backend que admita API Gateway.

Cuando se complete de forma correcta la guía de inicio rápido de API Gateway, debes tener una URL de puerta de enlace implementada que apunte al servicio de Cloud Run.

Configura permisos

En este instructivo, crearás un grupo de extremos de red (NEG) sin servidores y un balanceador de cargas de aplicaciones externo global en un proyecto de Cloud. Para ello, debes tener el rol de propietario o editor del proyecto o las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear balanceador de cargas y componentes de herramientas de redes Administrador de redes
Crear y modificar los NEG Administrador de instancias de procesamiento
Crear y modificar certificados SSL Administrador de seguridad

Crea un recurso de certificado SSL

Para crear un balanceador de cargas de aplicaciones externo global, se debe agregar un recurso de certificado SSL al frontend del balanceador de cargas. Crea un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado.

  • Certificados administrados por Google. Se recomienda usar certificados administrados por Google, ya que Google Cloud obtiene, administra y renueva estos certificados de manera automática. Si quieres crear un certificado administrado por Google, debes tener un dominio y los registros DNS para ese dominio a fin de que se aprovisione el certificado. Si aún no tienes un dominio, puedes obtener uno en Google Domains. Además, deberás actualizar el registro DNS A del dominio para que apunte a la dirección IP del balanceador de cargas que se creó en un paso posterior. Para obtener instrucciones detalladas, consulta Cómo usar certificados administrados por Google.

  • Certificados autofirmados. Si no deseas configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para realizar una prueba.

En este instructivo se supone que ya creaste un recurso de certificado SSL.

Si quieres probar este proceso sin crear un recurso de certificado SSL (o un dominio requerido por los certificados administrados por Google), puedes seguir las instrucciones de esta página para configurar un balanceador de cargas de HTTP en su lugar.

Crea el balanceador de cargas de aplicaciones externo global

  1. Crea un NEG sin servidores para API Gateway.

    Un grupo de extremos de red (NEG) especifica un grupo de extremos de backend para un balanceador de cargas. Un NEG sin servidores es un backend que apunta a un servicio como API Gateway, como se muestra en la siguiente figura:

    diagrama de NEG sin servidores como backend para puertas de enlace multirregionales

    Para crear un NEG sin servidores para tu puerta de enlace, ejecuta el siguiente comando, en el que:

    • SERVERLESS_NEG_NAME es el nombre del NEG sin servidores que se creará.
    • GATEWAY_ID especifica el nombre de la puerta de enlace.
    • REGION_ID es la región de implementación del NEG sin servidores (debe coincidir con la región de la puerta de enlace).
    gcloud beta compute network-endpoint-groups create SERVERLESS_NEG_NAME \
      --region=REGION_ID \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=GATEWAY_ID

    Por ejemplo:

    gcloud beta compute network-endpoint-groups create api-gateway-serverless-neg \
      --region=us-central1 \
      --network-endpoint-type=serverless \
      --serverless-deployment-platform=apigateway.googleapis.com \
      --serverless-deployment-resource=my-gateway
  2. Crea un servicio de backend para definir cómo distribuye el tráfico el balanceador de cargas de aplicaciones externo global.

    La configuración del servicio de backend contiene un conjunto de valores, como el protocolo que se usa para conectarse a backends, varios parámetros de configuración de distribución y sesión, verificaciones de estado y tiempos de espera, como se muestra en la siguiente imagen:

    diagrama de NEG sin servidores como backend para un servicio de backend

    Para crear un servicio de backend, ejecute el siguiente comando:

    gcloud compute backend-services create BACKEND_SERVICE_NAME --global

    en el que BACKEND_SERVICE_NAME es el nombre de tu nuevo servicio de backend.

    Por ejemplo:

    gcloud compute backend-services create api-gateway-backend-service --global

    Para agregar tu NEG sin servidores como un backend al servicio de backend, ejecuta el siguiente comando, en el que:

    • BACKEND_SERVICE_NAME es el nombre de tu servicio de backend.
    • SERVERLESS_NEG_NAME es el nombre del NEG sin servidores que se creó en el paso anterior.
    • REGION_ID es la región de implementación del NEG sin servidores (debe coincidir con la región de la puerta de enlace).
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME \
      --network-endpoint-group-region=REGION_ID

    Por ejemplo:

    gcloud compute backend-services add-backend api-gateway-backend-service \
      --global \
      --network-endpoint-group=api-gateway-serverless-neg \
      --network-endpoint-group-region=us-central1
  3. Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend, como se muestra en la siguiente imagen:

    diagrama del mapa de URL al servicio de backend

    Para crear el mapa de URL, ejecuta el siguiente comando, en el que:

    • URL_MAP_NAME es el nombre del mapa de URL que se creará.
    • BACKEND_SERVICE_NAME es el nombre de tu servicio de backend.
    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME

    Por ejemplo:

    gcloud compute url-maps create api-gateway-url-map \
      --default-service api-gateway-backend-service

    Este mapa de URL de ejemplo solo se orienta a un servicio de backend que representa una sola puerta de enlace, por lo que no se requieren reglas de host ni comparadores de rutas de acceso. Si tienes más de un servicio de backend, puedes usar reglas de host para dirigir las solicitudes a diferentes servicios según el nombre de host. Usa comparadores de rutas de acceso para dirigir solicitudes a diferentes servicios según la ruta de acceso de la solicitud.

    Por ejemplo:

    gcloud compute url-maps add-path-matcher api-gateway-url-map \
      --path-matcher-name=my-pm2  \
      --default-service=my-host-default-backend \
      --path-rules="/video=video-service,/video/*=video-service" \
      --new-hosts my-hosts.com
    gcloud compute url-maps add-host-rule api-gateway-url-map \
      --hosts=my-app-domain \
      --path-matcher-name=my-app-path-matcher

    Para obtener más información sobre las reglas de host y los comparadores de rutas de acceso, consulta la documentación de Mapa de URL.

  4. Crea un certificado SSL para tu proxy de destino, como se muestra en la siguiente imagen:

    diagrama del certificado SSL para el proxy de destino

    Para crear un balanceador de cargas de aplicaciones externo global, se requiere un recurso de certificado SSL para el proxy de destino HTTP(S). Puedes crear un recurso de certificado SSL mediante un certificado SSL administrado por Google o un certificado SSL autoadministrado. Se recomienda usar certificados administrados por Google. Si pruebas este proceso sin un recurso de certificado SSL y deseas configurar un balanceador de cargas de HTTP, puedes omitir este paso.

    Para crear un certificado administrado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para las pruebas.

    Si deseas crear un recurso de certificado SSL administrado por Google, haz lo siguiente:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
      --domains DOMAIN

    Si deseas crear un recurso de certificado SSL autoadministrado, haz lo siguiente:

    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 URL, como se muestra en la siguiente imagen:

    diagrama del proxy HTTP al mapa de URL

    Para crear el proxy de destino, usa el siguiente comando, en el que:

    • TARGET_HTTPS_PROXY_NAME es el nombre del proxy HTTP(S) de destino que se creará.
    • URL_MAP_NAME es el nombre del mapa de URL creado en un paso anterior.
    • Opcional: SSL_CERT_NAME es el nombre del certificado SSL creado.
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
      --ssl-certificates=SSL_CERT_NAME \
      --url-map=URL_MAP_NAME

    Por ejemplo:

    gcloud compute target-https-proxies create api-gateway-https-proxy \
      --ssl-certificates=hello-cert \
      --url-map=api-gateway-url-map

    Como se señaló anteriormente, puedes crear un balanceador de cargas HTTP sin crear un recurso de certificado SSL. Para ello, usa el siguiente comando:

    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME

    Por ejemplo:

    gcloud compute target-http-proxies create api-gateway-http-proxy \
      --url-map=api-gateway-url-map

    Los comandos posteriores para los proxies HTTP deben modificarse para admitir la marca --target-http-proxy y TARGET_HTTP_PROXY_NAME para sus contrapartes HTTP(S).

  6. Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy, como se muestra en la siguiente imagen:

    diagrama de la regla de reenvío al proxy HTTP

    Usa el siguiente comando para crear la regla de reenvío, en la que:

    • HTTPS_FORWARDING_RULE_NAME es el nombre de la regla que se creará.
    • TARGET_HTTPS_PROXY_NAME es el nombre del proxy de destino HTTP(S).
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
      --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
      --global \
      --ports=443

    Por ejemplo:

    gcloud compute forwarding-rules create my-fw \
      --target-https-proxy=api-gateway-https-proxy \
      --global \
      --ports=443

Actualiza los registros DNS con la dirección IP del balanceador de cargas

Si tienes un dominio personalizado, este paso es obligatorio para configurar la configuración de DNS de tu dominio para que apunte a la nueva dirección IP de tu servicio. También es necesario si creaste un balanceador de cargas de aplicaciones externo global con un certificado administrado por Google (que requiere un dominio). Se recomienda asignar y usar una dirección IP estática cuando se usa con DNS. Las instrucciones específicas para este paso dependen de tu proveedor de DNS.

  1. Para enviar tráfico al balanceador de cargas, el registro DNS de tu dominio (en este instructivo, mi-dominio-de-app) debe apuntar a las direcciones IP del balanceador de cargas.

    Para encontrar la dirección IP de tu regla de reenvío global, usa este comando:

    gcloud compute forwarding-rules list
  2. Actualiza el registro A o AAAA de DNS del dominio para que apunte a la dirección IP del balanceador de cargas, a fin de que el tráfico que se envía a la URL del dominio personalizado existente se enrute, en su lugar, mediante el balanceador de cargas. El DNS puede tardar desde unos segundos hasta varias horas en propagar este cambio al servidor DNS.

  3. Prueba para confirmar que tu puerta de enlace recibe tráfico con curl o visita la URL en tu navegador. Por ejemplo: https://my-app-domain

    Cuando realices la prueba, deberías ver la respuesta que genera el servicio de Cloud Run. Por ejemplo, puede ser una página HTML de "Hello World" o alguna otra respuesta esperada que genera directamente el servicio de backend. Esto significa que tu solicitud pasa por el balanceador de cargas y el servicio de backend le indica al balanceador de cargas que la envíe a tu puerta de enlace.

Prueba la configuración del balanceador de cargas

Ahora que ya configuraste el balanceador de cargas, puedes comenzar a enviar tráfico a la dirección IP de la regla de reenvío.

Para encontrar la dirección IP de tu regla de reenvío global, usa el siguiente comando:

gcloud compute forwarding-rules list

Usa el comando de curl para probar la respuesta de varias URL de tus servicios. Por ejemplo:

curl https://HOST_URL/hello/
curl https://HOST_URL

Puedes usar API Gateway en la consola de Cloud para verificar que las solicitudes lleguen a los servicios correctos.

¡Felicitaciones! Configuraste correctamente el balanceador de cargas de aplicaciones externo global para API Gateway PVI.

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos utilizados en esta guía de inicio rápido, puedes borrar los recursos de Cloud Load Balancing que creaste. Si estos recursos se crearon dentro de su propio proyecto, puedes borrar todo el proyecto. De lo contrario, puedes borrar los recursos de forma individual.

Borra el proyecto

Ejecuta el siguiente comando y reemplaza PROJECT_ID por el ID del proyecto:

gcloud projects delete PROJECT_ID

Borra los recursos individuales

Borra cada componente del balanceador de cargas:

  1. Borra las reglas de reenvío:

    gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
  2. Borra las direcciones IP externas globales:

    gcloud compute addresses delete IP_ADDRESSES --global
  3. Borra el proxy de destino:

    gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
  4. Borra la asignación de URL:

    gcloud compute url-maps delete URL_MAP_NAME
  5. Borra los servicios de backend:

    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
  6. Borra el certificado SSL (opcional):

    gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME

Borra el NEG sin servidores:

gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION