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 gradualmente tus aplicaciones. La compatibilidad híbrida con los balanceadores de cargas HTTP(s) internos y externos de Google Cloud extiende el balanceo de cargas en la nube a los backends que se encuentran en el entorno local y en otras nubes, y es un habilitador clave para tu estrategia híbrida. Esto puede ser temporal para habilitar 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 global HTTP(S) externo. Aunque el NEG del lab está dentro de GCP, se usa el mismo procedimiento para comunicarse con recursos públicos o locales con accesibilidad de IP.

Qué aprenderás

  • Crea una VPC personalizada
  • Crear dos máquinas virtuales (VMs) que se usarán como un grupo de extremos de red (NEG)
  • Crear un balanceador de cargas híbrido, un servicio de backend y las 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 sobre 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 y cuando sigas sus convenciones de nomenclatura, puedes usar lo que desees 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 te importa qué es. En la mayoría de los codelabs, deberás hacer referencia al ID del proyecto (que suele identificarse como PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio, o bien puedes probar el tuyo y ver si está disponible. Luego, se “congela” una vez creado el proyecto.
  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 no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de$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 el 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), 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

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

En esta tarea, crearás un Cloud Router y una instancia de NAT que permitirá la conectividad a Internet de 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 ejecutan Apache. Más adelante en el lab, estas instancias de VM se convertirán en un grupo de extremos de red (NEG).

En 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'

En 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 un extremo local.

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

En Cloud Shell, crea on-prem-neg-1.

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

En Cloud Shell, crea on-prem-neg-2.

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. De forma alternativa, puedes especificar un extremo local o de Internet como tu extremo de red

En Cloud Shell, identifica las direcciones IP de GCE

gcloud compute instances list | grep -i on-prem

Asociar el grupo de extremos de red a la dirección IP de la instancia de GCE identificada con anterioridad en el paso anterior para cada respuesta negativa, on-prem-neg-1 & on-prem-neg-2.

Desde el asociado de Cloud Shell on-prem-neg-1, actualiza x.x.x.x con tu IP identificada

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

Desde el asociado de Cloud Shell on-prem-neg-2, actualiza x.x.x.x con tu IP identificada

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 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 los extremos que pertenezcan 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 con 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 HTTP(S) externo y el backend realizan verificaciones de estado que se originan en las subredes 35.191.0.0/16 y 130.211.0.0/22. por lo que se necesita una regla de firewall para permitir al balanceador de cargas enrutar el 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 usa para acceder al extremo de red

Desde Cloud Shell

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

Ya terminamos con la configuración de la CLI. Finalicemos la configuración en la consola de Cloud.

8. Crear el balanceador de cargas de HTTP externo y asociar 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 HTTP(S) y haz clic en “Start configuration”.

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 seleccionar el servicio de backend creado anteriormente “on-prem-backend-service” luego "ok" según la captura de pantalla que proporcionaste

f1589df43bf9e3e8.png

Selecciona la configuración de frontend y actualiza el nombre "xlb-fe" y selecciona la dirección IPv4 estática que creaste antes, asegúrate de duplicar la captura de pantalla proporcionada b47cd48c7c1ccfc3.png

Selecciona "Revisar y finalizar". que coincida con la captura de pantalla proporcionada y seleccionen

bfa39f7dc3ad91e1.png

Validación del estado del backend

En la consola de Cloud, asegúrate de que el backend “xlb” está en buen estado, verde según la captura de pantalla proporcionada

131bbfc955d6166c.png

9. Valida que el NEG sea accesible 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 del frontend de los extremos de red. Realicemos una validación de la dirección IP antes de ejecutar la 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 cloudshell

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

Con la dirección IP del 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; sin embargo, lo usarías 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, realiza un curl en la dirección IP de frontend. Observa el 200 OK y los detalles de la página que consisten en el nombre y la región de la instancia NEG.

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 L7 con NEG.

¡Felicitaciones por completar el codelab!

Temas abordados

  • Crea una VPC personalizada
  • Crear dos máquinas virtuales (VMs) que se usarán como un grupo de extremos de red (NEG)
  • Crear un balanceador de cargas híbrido, un servicio de backend y las 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 de limpieza

En la IU de la consola de Cloud, identifica y marca el “xlb” balanceador de cargas y selecciona Borrar a través de Servicios de red → Balanceo de cargas. Una vez seleccionado, marca “on-premises-backend service” &amp; ‘on-premise-health-check&#39; luego, selecciona Borrar

53d7463fe354fe66.png

En la IU de la consola de Cloud, navega a Compute Engine → Grupos de extremos de red. Una vez seleccionada, marca “on-prem-neg-1” &amp; ‘on-prem-neg-2&#39; 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