Usa un balanceador de cargas híbrido HTTP(S) externo para llegar a un grupo de extremos de red

1. Introducción

Una estrategia híbrida es una solución pragmática para que te adaptes a las demandas cambiantes del mercado y modernices tus aplicaciones de forma incremental. La compatibilidad híbrida con los balanceadores de cargas HTTP(S) externos e internos de Google Cloud extiende el balanceo de cargas en la nube a los backends que residen en las instalaciones y en otras nubes, y es un factor clave para tu estrategia híbrida. Esta puede ser una implementación híbrida temporal para permitir la migración a una solución moderna basada en la nube o un elemento permanente de la infraestructura de TI de tu organización.

3312e69c63b02f73.png

En este lab, aprenderás a crear un grupo de extremos de red (NEG) con dos máquinas virtuales a las que se puede acceder desde un balanceador de cargas externo de HTTP(S) global. Si bien el NEG del lab se encuentra dentro de GCP, se usa el mismo procedimiento para comunicarse con recursos públicos o locales con accesibilidad a la IP.

Qué aprenderás

  • Crea una VPC personalizada
  • Crea dos máquinas virtuales (VM) que se usarán como un grupo de extremos de red (NEG)
  • Crea un balanceador de cargas híbrido, un servicio de backend y verificaciones de estado asociadas
  • Crea una regla de firewall que permita el acceso al balanceador de cargas
  • Se crearán Cloud Router y NAT para permitir las actualizaciones de paquetes desde Internet.
  • Valida la accesibilidad del grupo de extremos de red

Requisitos

  • Conocimiento de los balanceadores de cargas

Configuración del entorno de autoaprendizaje

  1. Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • El nombre del proyecto es tu identificador personal para este proyecto. Siempre que sigas sus convenciones de nomenclatura, puedes usar lo que quieras y actualizarlo en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar una vez que se configura). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (suele identificarse como PROJECT_ID), por lo que, si no te gusta, genera otro aleatorio o puedes probar con uno propio y ver si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.

Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza”, en la que se aconseja cómo cerrar recursos para que no se te facture más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 300.

Inicia Cloud Shell

Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

bce75f34b2c53987.png

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

f6ef2b5f13479f3a.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.

2. Antes de comenzar

En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID
echo $projectid

3. Crea una nueva red de VPC en modo personalizado

En esta tarea, crearás una nube privada virtual (VPC), que es la base de la red.

Red de VPC

Desde Cloud Shell

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

Crear subred

Desde Cloud Shell

gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1

Crea una instancia de Cloud NAT

Si bien no es un requisito para las redes híbridas, la instancia de procesamiento requiere conectividad a Internet para descargar aplicaciones y actualizaciones.

En esta tarea, crearás una instancia de Cloud Router y NAT que permita la conectividad a Internet para las instancias de VM.

Crea un Cloud Router

Desde Cloud Shell

gcloud compute routers create crnat --network hybrid-network-lb --region us-west1

Crea Cloud NAT

Desde Cloud Shell

gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1

4. Crea dos instancias de VM

En esta tarea, crearás dos instancias de VM que ejecuten Apache. Más adelante en el lab, estas instancias de VM se convertirán en un grupo de extremos de red (NEG).

Desde Cloud Shell, crea la primera instancia local, on-prem-neg-1.

gcloud compute instances create on-prem-neg-1 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

Desde Cloud Shell, crea la primera instancia local, on-prem-neg-2.

gcloud compute instances create on-prem-neg-2 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

5. Crea un NEG que te contenga en tu extremo local

Primero, crea un NEG llamado on-prem-neg-1 y on-prem-neg-2. También especificarás que el LB debe considerar que, para fines de enrutamiento y balanceo de cargas, estos extremos se encuentran en la zona us-west1-a de GCP. Recomendamos que la zona configurada corresponda a cualquier zona asociada con la región del adjunto de Interconnect o la puerta de enlace de VPN para las mediciones de balanceo de cargas basadas en la proximidad que se usan para el balanceo de cargas.

Crea on-prem-neg-1 desde Cloud Shell

gcloud compute network-endpoint-groups create on-prem-neg-1 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

Crea on-prem-neg-2 desde Cloud Shell

gcloud compute network-endpoint-groups create on-prem-neg-2 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

En el codelab, el grupo de extremos de red es una instancia de GCE que ejecuta Apache en GCP. Como alternativa, puedes especificar un extremo local o de Internet como tu extremo de red.

Desde Cloud Shell, identifica las direcciones IP de GCE.

gcloud compute instances list | grep -i on-prem

Asocia el grupo de extremos de red a la dirección IP de la instancia de GCE que se identificó anteriormente en el paso anterior; para cada NEG, on-prem-neg-1 & on-prem-neg-2.

Desde Cloud Shell, asocia on-prem-neg-1 y actualiza x.x.x.x con la IP que identificaste.

gcloud compute network-endpoint-groups update on-prem-neg-1 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

Desde Cloud Shell, asocia on-prem-neg-2 y actualiza x.x.x.x con la IP que identificaste.

gcloud compute network-endpoint-groups update on-prem-neg-2 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

6. Crea la verificación de estado HTTP, el servicio de backend y el firewall

En este paso, crearás un servicio de backend global llamado on-prem-backend-service. Este servicio de backend define cómo tu plano de datos enviará tráfico a tu NEG.

Primero, crea una verificación de estado llamada on-prem-health-check para supervisar el estado de cualquier extremo que pertenezca a este NEG (es decir, tu extremo local).

Desde Cloud Shell

gcloud compute health-checks create http on-prem-health-check

Crea un servicio de backend llamado on-prem-backend-service y asócialo a la verificación de estado.

Desde Cloud Shell

gcloud compute backend-services create on-prem-backend-service \
    --global \
    --load-balancing-scheme=EXTERNAL \
    --health-checks on-prem-health-check

El balanceador de cargas y el backend externos de HTTP(S) realizan verificaciones de estado que se originan en las subredes 35.191.0.0/16 y 130.211.0.0/22. Por lo tanto, se requiere una regla de firewall para permitir el enrutamiento del balanceador de cargas al backend.

Desde Cloud Shell

gcloud compute firewall-rules create fw-allow-health-check \
    --network=hybrid-network-lb \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

7. Asocia el NEG y el servicio de backend

Agrega el NEG on-prem-neg-1 a este servicio de backend

Desde Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-1 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

Agrega el NEG on-prem-neg-2 a este servicio de backend

Desde Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-2 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

Reserva una dirección IP estática IPv4 que se use para acceder a tu extremo de red

Desde Cloud Shell

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

Terminamos con la configuración de la CLI. Finalicemos la configuración desde la consola de Cloud.

8. Crea el balanceador de cargas de HTTP externo y asocia el servicio de backend

En la consola de Cloud, navega a Balanceo de cargas y selecciona Crear balanceador de cargas.

Identifica el balanceo de cargas de HTTP(S) y haz clic en "Iniciar configuración".

70ccd168957e89d9.png

Selecciona "De Internet a mis VMs", como se muestra en la siguiente captura de pantalla, que permite el acceso público a tu VM.

a55cd31dbeadfecc.png

Proporciona "xlb" como el nombre del balanceador de cargas y selecciona el servicio de backend creado anteriormente "on-prem-backend-service" y, luego, "ok", según la captura de pantalla proporcionada.

f1589df43bf9e3e8.png

Selecciona Configuración de frontend, actualiza el nombre "xlb-fe" y selecciona la dirección IPv4 estática creada anteriormente. Asegúrate de que coincida con la captura de pantalla proporcionada b47cd48c7c1ccfc3.png.

Selecciona "Revisar y finalizar" para que coincida con la captura de pantalla proporcionada y, luego, selecciona Crear.

bfa39f7dc3ad91e1.png

Validación del estado del backend

En la consola de Cloud, asegúrate de que el backend "xlb" esté en buen estado, en verde según la captura de pantalla proporcionada.

131bbfc955d6166c.png

9. Valida que se pueda acceder al NEG desde Internet

Recuerda que la dirección IP externa estática que se usó durante la creación del balanceador de cargas ahora es la IP de frontend de tus extremos de red. Realicemos una validación de la dirección IP antes de ejecutar nuestra prueba final.

Desde Cloud Shell

gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:

Resultado (tu dirección IP será diferente)

Resultado de Cloud Shell

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

Con la dirección IP de frontend del balanceador de cargas global, puedes acceder al backend del extremo de red. Ten en cuenta que, en el codelab, el extremo es una instancia de GCE, pero podrías usarlo con extremos locales, por ejemplo.

Desde tu estación de trabajo local, inicia una terminal y realiza un curl a la dirección IP del balanceador de cargas.

Desde tu estación de trabajo, ejecuta un comando curl en la dirección IP del frontend. Observa el mensaje 200 OK y los detalles de la página, que incluyen el nombre y la región de la instancia negativa.

myworkstation$ curl -v 34.96.103.132

* Trying 34.96.103.132...

* TCP_NODELAY set

* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)

> GET / HTTP/1.1

> Host: 34.96.103.132

> User-Agent: curl/7.64.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Tue, 10 Aug 2021 01:21:54 GMT

< Server: Apache/2.4.25 (Debian)

< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT

< ETag: "24-5c929ae7384f4"

< Accept-Ranges: bytes

< Content-Length: 36

< Content-Type: text/html

< Via: 1.1 google

<

Page on on-prem-neg-2 in us-west1-a

* Connection #0 to host 34.96.103.132 left intact

* Closing connection 0

Felicitaciones. Implementaste correctamente un balanceador de cargas híbrido de nivel 7 con NEG.

¡Felicitaciones por completar el codelab!

Temas abordados

  • Crea una VPC personalizada
  • Crea dos máquinas virtuales (VM) que se usarán como un grupo de extremos de red (NEG)
  • Crea un balanceador de cargas híbrido, un servicio de backend y verificaciones de estado asociadas
  • Crea una regla de firewall que permita el acceso al balanceador de cargas
  • Valida la accesibilidad del grupo de extremos de red

10. Pasos para la limpieza

En la IU de la consola de Cloud, identifica y marca el balanceador de cargas "xlb" y selecciona la opción para borrarlo en Servicios de red → Balanceo de cargas. Una vez que lo selecciones, marca "on-premise-backend service" y "on-premise-health-check", y, luego, selecciona borrar.

53d7463fe354fe66.png

En la IU de Cloud Console, navega a Compute Engine → Grupos de extremos de red. Una vez que lo hayas seleccionado, marca "on-prem-neg-1" y "on-prem-neg-2", y, luego, selecciona Borrar.

4d8f04264b44d03c.png

Borra los componentes del lab desde Cloud Shell

gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet

gcloud compute routers delete crnat  --region us-west1 --quiet

gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet

gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet

gcloud compute firewall-rules delete fw-allow-health-check --quiet

gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet

gcloud compute networks delete hybrid-network-lb --quiet

gcloud compute addresses delete hybrid-lb-ip --global --quiet