Empezar a usar el balanceo de carga para API Gateway
En este tutorial se muestra cómo crear un balanceador de carga de aplicación externo global para enrutar solicitudes a API Gateway. El proceso de configuración sigue los mismos pasos que se usan para configurar la integración del balanceador de carga de aplicaciones externo global con otros productos sin servidor, como Cloud Run, Cloud Run functions y App Engine.
Aunque no es necesario un balanceador de carga para que API Gateway funcione, sí permite que tu pasarela aproveche las ventajas de un balanceador de carga. Por ejemplo, si usas un balanceador de carga de aplicación externo global con API Gateway, podrás hacer lo siguiente:
- Usa dominios personalizados.
- Aprovecha Google Cloud Armor como servicio de seguridad de red.
- Gestionar el balanceo de carga eficiente en las pasarelas de varias ubicaciones.
- Implementa la gestión avanzada del tráfico.
Antes de empezar
Si aún no lo has hecho, descarga e instala la CLI de Google Cloud.
Actualiza los componentes de
gcloud
:gcloud components update
Sigue la guía de inicio rápido de API Gateway para desplegar un servicio de Cloud Run y crear una pasarela que apunte a ese servicio.
Desplegar un servicio de Cloud Run y una instancia de API Gateway
En este tutorial, desplegarás un servicio "hello-world" en Cloud Run, crearás una pasarela que enrute al servicio de Cloud Run y configurarás un balanceador de carga de aplicación externo global para enrutar las solicitudes a un dominio personalizado.
Aunque en este tutorial se usa Cloud Run como servicio de backend de API Gateway, estos pasos también se aplican a cualquier servicio de backend compatible con API Gateway.
Una vez que hayas completado la guía de inicio rápido de API Gateway, deberías tener una URL de pasarela desplegada que apunte al servicio de Cloud Run.
Configurar permisos
En este tutorial, crearás un grupo de puntos finales de red (NEG) sin servidor y un balanceador de carga de aplicaciones externo global en un proyecto de Cloud. Para ello, debes tener el rol de propietario o editor del proyecto, o los siguientes roles de gestión de identidades y accesos de Compute Engine:
Tarea | Rol obligatorio |
---|---|
Crear balanceadores de carga y componentes de red | Administrador de red |
Crear y modificar grupos de puntos de conexión de red | Administrador de instancias de Compute |
Crear y modificar certificados SSL | Administrador de seguridad |
Crear un recurso de certificado SSL
Para crear un balanceador de carga de aplicación externo global, se debe añadir un recurso de certificado SSL al frontend del balanceador de carga. Crea un recurso de certificado SSL con un certificado SSL gestionado por Google o un certificado SSL autogestionado.
Certificados gestionados por Google. Te recomendamos que uses certificados gestionados por Google porque Google Cloud obtiene, gestiona y renueva estos certificados automáticamente. Para crear un certificado gestionado por Google, debes tener un dominio y los registros DNS de ese dominio para que se pueda aprovisionar el certificado. Si aún no tienes un dominio, puedes obtener uno en Google Domains. Además, tendrás que actualizar el registro A de DNS del dominio para que apunte a la dirección IP del balanceador de carga que se creará en un paso posterior. Para obtener instrucciones detalladas, consulta Usar certificados gestionados por Google.
Certificados autofirmados. Si no quieres configurar un dominio en este momento, puedes usar un certificado SSL autofirmado para hacer pruebas.
En este tutorial se da por hecho que ya has creado un recurso de certificado SSL.
Si quieres probar este proceso sin crear un recurso de certificado SSL (o un dominio, como requieren los certificados gestionados por Google), puedes seguir las instrucciones de esta página para configurar un balanceador de carga HTTP.
Crear el balanceador de carga de aplicación externo global
Crea un NEG sin servidor para API Gateway.
Un grupo de puntos finales de red (NEG) especifica un grupo de endpoints de backend para un balanceador de carga. Un NEG sin servidor es un backend que apunta a un servicio como API Gateway, tal como se muestra en la siguiente figura:
Para crear un NEG sin servidor para tu pasarela, ejecuta el siguiente comando, donde:
- SERVERLESS_NEG_NAME es el nombre del NEG sin servidor que se va a crear.
- GATEWAY_ID especifica el nombre de la pasarela.
- REGION_ID es la región de despliegue del NEG sin servidor (debe coincidir con la región de la pasarela).
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
Crea un servicio de backend para definir cómo distribuye el tráfico el balanceador de carga de aplicación externo global.
La configuración del servicio de backend contiene un conjunto de valores, como el protocolo usado para conectarse a los backends, varios ajustes de distribución y de sesión, comprobaciones de estado y tiempos de espera, tal como se muestra en la siguiente figura:
Para crear un servicio de backend, ejecuta el siguiente comando:
gcloud compute backend-services create BACKEND_SERVICE_NAME --global
donde 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 añadir tu NEG sin servidor como backend al servicio de backend, ejecuta el siguiente comando, donde:
- BACKEND_SERVICE_NAME es el nombre de tu servicio de backend.
- SERVERLESS_NEG_NAME es el nombre del NEG sin servidor creado en el paso anterior.
- REGION_ID es la región de despliegue del NEG sin servidor (debe coincidir con la región de la pasarela).
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
Crea un mapa de URLs para enrutar las solicitudes entrantes al servicio de backend, como se muestra en la siguiente figura:
Para crear el mapa de URLs, ejecuta el siguiente comando:
- URL_MAP_NAME es el nombre del mapa de URLs que se va a 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 URLs de ejemplo solo tiene como destino un servicio de backend que representa una única pasarela, por lo que no se necesitan reglas de host ni matchers de ruta. Si tienes más de un servicio de backend, puedes usar reglas de host para dirigir las solicitudes a diferentes servicios en función del nombre de host. Usa matchers de ruta para dirigir las solicitudes a diferentes servicios en función de la ruta 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 matchers de ruta, consulta la documentación sobre mapas de URLs.
Crea un certificado SSL para tu proxy de destino, tal como se muestra en la siguiente figura:
Para crear un balanceador de carga de aplicaciones externo global, se necesita un recurso de certificado SSL para el proxy de destino HTTP(S). Puedes crear un recurso de certificado SSL con un certificado SSL gestionado por Google o con un certificado SSL autogestionado. Te recomendamos que uses certificados gestionados por Google. Si estás probando este proceso sin un recurso de certificado SSL y quieres configurar un balanceador de carga HTTP, puedes saltarte este paso.
Para crear un certificado gestionado por Google, debes tener un dominio. Si no tienes un dominio, puedes usar un certificado SSL autofirmado para hacer pruebas.
Para crear un recurso de certificado SSL gestionado por Google, sigue estos pasos:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAIN
Para crear un recurso de certificado SSL autogestionado, sigue estos pasos:
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
Crea un proxy HTTP(S) de destino para enrutar las solicitudes a tu mapa de URLs, como se muestra en la siguiente figura:
Para crear el proxy de destino, usa el siguiente comando:
- TARGET_HTTPS_PROXY_NAME es el nombre del proxy HTTP(S) de destino que se va a crear.
- URL_MAP_NAME es el nombre del mapa de URLs 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 ha indicado anteriormente, puedes crear un balanceador de carga 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 de los proxies HTTP deben modificarse para incluir la marca
--target-http-proxy
y el TARGET_HTTP_PROXY_NAME de sus equivalentes HTTP(S).Crea una regla de reenvío para dirigir las solicitudes entrantes al proxy, como se muestra en la siguiente imagen:
Usa el siguiente comando para crear la regla de reenvío, donde:
- HTTPS_FORWARDING_RULE_NAME es el nombre de la regla que se va a 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
Actualizar los registros DNS con la dirección IP del balanceador de carga
Si tienes un dominio personalizado, debes seguir este paso para configurar los ajustes de DNS de tu dominio de forma que apunten a la nueva dirección IP de tu servicio. También es obligatorio si ha creado un balanceador de carga de aplicación externo global con un certificado gestionado 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 de este paso dependen de tu proveedor de DNS.
Para enviar tráfico al balanceador de carga, el registro DNS de tu dominio (en este tutorial, my-app-domain) debe apuntar a las direcciones IP del balanceador de carga.
Para encontrar la dirección IP de tu regla de reenvío global, usa este comando:
gcloud compute forwarding-rules list
Actualiza el registro A o AAAA de DNS de tu dominio para que dirija a la dirección IP del balanceador de carga. De esta forma, el tráfico que se envíe a la URL del dominio personalizado se enrutará a través del balanceador de carga. El DNS puede tardar desde unos segundos hasta varias horas en propagar este cambio al servidor DNS.
Haz una prueba para confirmar que tu pasarela recibe tráfico mediante
curl
o visitando la URL en tu navegador. Por ejemplo:https://my-app-domain
Después de hacer las pruebas, deberías ver la respuesta generada por el servicio de Cloud Run. Por ejemplo, puede ser una página HTML "Hola, mundo" u otra respuesta esperada generada directamente por el servicio backend. Esto significa que tu solicitud está pasando por el balanceador de carga y que el servicio de backend está indicando al balanceador de carga que la envíe a tu pasarela.
Probar la configuración del balanceador de carga
Ahora que has configurado el balanceador de carga, puedes empezar 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 curl para probar la respuesta de varias URLs de tus servicios. Por ejemplo:
curl https://HOST_URL/hello/
curl https://HOST_URL
Puedes usar la consola de Cloud de API Gateway para verificar que las solicitudes llegan a los servicios correctos.
¡Enhorabuena! Has configurado correctamente el balanceador de carga de aplicación externo global para API GatewayPREVIEW.
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en esta guía de inicio rápido, puedes eliminar los recursos de Cloud Load Balancing que has creado. Si estos recursos se crearon en su propio proyecto, puedes eliminar todo el proyecto. De lo contrario, puedes eliminar los recursos de forma individual.
Eliminar el proyecto
Ejecuta el siguiente comando y sustituye PROJECT_ID por el ID de tu proyecto:
gcloud projects delete PROJECT_ID
Eliminar recursos concretos
Elimina cada componente del balanceador de carga:
Elimina las reglas de reenvío:
gcloud compute forwarding-rules delete HTTPS_FORWARDING_RULE_NAME --global
Elimina las direcciones IP externas globales:
gcloud compute addresses delete IP_ADDRESSES --global
Elimina el proxy de destino:
gcloud compute target-https-proxies delete TARGET_HTTP_PROXY_NAME
Elimina el mapa de URLs:
gcloud compute url-maps delete URL_MAP_NAME
Elimina los servicios backend:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
(Opcional) Elimina el certificado SSL:
gcloud compute ssl-certificates delete SSL_CERTIFICATE_NAME
Elimina el NEG sin servidor:
gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME --region=REGION