Utiliser un équilibreur de charge hybride HTTP(S) externe pour atteindre un groupe de points de terminaison du réseau

1. Introduction

Une stratégie hybride est une solution pragmatique qui vous permet de vous adapter à l'évolution de la demande du marché et de moderniser progressivement vos applications. La compatibilité hybride avec les équilibreurs de charge HTTP(S) internes et externes de Google Cloud étend l'équilibrage de charge cloud aux backends hébergés sur site et dans d'autres clouds. C'est un atout essentiel pour votre stratégie hybride. Cela peut être temporaire pour permettre la migration vers une solution cloud moderne ou un dispositif permanent de l'infrastructure informatique de votre organisation.

3312e69c63b02f73.png

Dans cet atelier, vous allez apprendre à créer un groupe de points de terminaison du réseau (NEG) à l'aide de deux machines virtuelles accessibles depuis un équilibreur de charge global HTTP(S) externe. Bien que le NEG de l'atelier se trouve dans GCP, la même procédure est utilisée pour communiquer avec des ressources publiques ou sur site avec une joignabilité IP.

Points abordés

  • Créer un VPC personnalisé
  • Créer deux machines virtuelles (VM) utilisées comme groupe de points de terminaison du réseau (NEG)
  • Créer un équilibreur de charge hybride, un service de backend et les vérifications d'état associées
  • Créer une règle de pare-feu qui autorise l'accès à l'équilibreur de charge
  • Cloud Router et NAT seront créés pour autoriser les mises à jour de packages depuis Internet
  • Valider la joignabilité du groupe de points de terminaison du réseau

Prérequis

  • Avoir des connaissances sur les équilibreurs de charge

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Le nom du projet est votre identifiant personnel pour ce projet. Tant que vous respectez ses conventions d'attribution de noms, vous pouvez utiliser ce que vous voulez et la mettre à jour à tout moment.
  • L'ID du projet doit être unique parmi tous les projets Google Cloud et ne peut pas être modifié une fois qu'il est défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme PROJECT_ID). Si cela ne vous convient pas, générez-en un autre au hasard ou essayez le vôtre pour voir s'il est disponible. Ensuite, il est « gelé » une fois le projet créé.
  1. Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.

L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.

2. Avant de commencer

Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.

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

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

3. Créer un réseau VPC en mode personnalisé

Dans cette tâche, vous allez créer un cloud privé virtuel (VPC) qui constitue la base du réseau.

Réseau VPC

Depuis Cloud Shell

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

Créer un sous-réseau

Depuis Cloud Shell

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

Créer une instance Cloud NAT

Bien que cela ne soit pas obligatoire pour la mise en réseau hybride, l'instance de calcul a besoin d'une connexion Internet pour télécharger des applications et des mises à jour.

Dans cette tâche, vous allez créer un routeur Cloud Router et une instance NAT qui permettent d'établir une connexion Internet aux instances de VM.

Créer un routeur cloud

Depuis Cloud Shell

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

Créer Cloud NAT

Depuis 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. Créer deux instances de VM

Dans cette tâche, vous allez créer deux instances de VM exécutant Apache. Plus tard dans l'atelier, ces instances de VM deviendront un groupe de points de terminaison du réseau (NEG).

Depuis Cloud Shell, créez la première instance sur site, 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'

Depuis Cloud Shell, créez la première instance sur site, 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. Créer un NEG incluant votre point de terminaison sur site

Commencez par créer un NEG nommé on-prem-neg-1 et on-prem-neg-2. Vous spécifierez également que l'équilibreur de charge doit tenir compte du fait que ces points de terminaison se trouvent dans la zone GCP us-west1-a à des fins de routage et d'équilibrage de charge. Pour les mesures de l'équilibrage de charge basé sur la proximité utilisées pour l'équilibrage de charge, nous vous recommandons de faire correspondre la zone configurée à n'importe quelle zone associée à la région du rattachement d'interconnexion ou de la passerelle VPN.

Depuis Cloud Shell, créez 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

Depuis Cloud Shell, créez 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

Dans l'atelier de programmation, le groupe de points de terminaison du réseau est une instance GCE exécutant Apache dans GCP. Vous pouvez également spécifier un point de terminaison sur site ou Internet comme point de terminaison du réseau

Depuis Cloud Shell, identifiez les adresses IP GCE.

gcloud compute instances list | grep -i on-prem

Associez le groupe de points de terminaison du réseau à l'adresse IP de l'instance GCE identifiée précédemment à l'étape précédente. pour chaque élément négatif, on-prem-neg-1 & on-prem-neg-2..

Dans l'associé Cloud Shell on-prem-neg-1, mettez à jour x.x.x.x avec votre adresse IP identifiée.

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

Dans l'associé Cloud Shell on-prem-neg-2, mettez à jour x.x.x.x avec l'adresse IP que vous avez identifiée.

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

6. Créer la vérification de l'état HTTP, le service de backend et pare-feu

Au cours de cette étape, vous allez créer un service de backend global nommé on-prem-backend-service. Ce service de backend définit la manière dont votre plan de données enverra du trafic à votre NEG.

Commencez par créer une vérification d'état nommée "on-prem-health-check" pour surveiller l'état de tous les points de terminaison appartenant à ce NEG (c'est-à-dire votre point de terminaison sur site).

Depuis Cloud Shell

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

Créez un service de backend nommé on-prem-backend-service et associez-le à la vérification de l'état.

Depuis Cloud Shell

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

L'équilibreur de charge et le backend HTTP(S) externes effectuent des vérifications de l'état depuis les sous-réseaux 35.191.0.0/16 et 130.211.0.0/22. Par conséquent, une règle de pare-feu est requise pour autoriser le routage de l'équilibreur de charge au backend.

Depuis 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. Associer le NEG et le service de backend

Ajouter le NEG on-prem-neg-1 à ce service de backend

Depuis 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

Ajouter le NEG on-prem-neg-2 à ce service de backend

Depuis 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

Réserver une adresse IP statique IPv4 utilisée pour accéder au point de terminaison du réseau

Depuis Cloud Shell

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

La configuration de la CLI est terminée. Terminons la configuration depuis la console Cloud.

8. Créer l'équilibreur de charge HTTP externe associer le service de backend

Dans la console Cloud, accédez à "Équilibrage de charge" et sélectionnez "Créer un équilibreur de charge".

Identifiez l'équilibrage de charge HTTP(S) et cliquez sur "Démarrer la configuration".

70ccd168957e89d9.png

Sélectionnez "D'Internet vers mes VM". conformément à la capture d'écran ci-dessous, qui autorise l'accès public à votre VM

a55cd31dbeadfecc.png

Fournir "xlb" comme nom de l'équilibreur de charge, puis sélectionnez le service de backend "on-prem-backend-service" créé précédemment puis sur "OK" conformément à la capture d'écran fournie

f1589df43bf9e3e8.png

Sélectionnez "Configuration du frontend" et modifiez le nom "xlb-fe". et sélectionnez l'adresse IPv4 statique précédemment créée, veillez à mettre en miroir la capture d'écran fournie. b47cd48c7c1ccfc3.png

Sélectionnez "Vérifier et finaliser". correspondant à la capture d'écran fournie et sélectionnez "Créer".

bfa39f7dc3ad91e1.png

Validation de l'état des backends

Dans la console Cloud, vérifiez que le backend "xlb" est opérationnel (vert, conformément à la capture d'écran fournie)

131bbfc955d6166c.png

9. Vérifier que le NEG est accessible depuis Internet

Rappelez-vous que l'adresse IP statique externe utilisée lors de la création de l'équilibreur de charge est désormais l'adresse IP de frontend de vos points de terminaison réseau. Nous allons valider l'adresse IP avant d'exécuter notre test final.

Depuis Cloud Shell

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

Résultat (votre adresse IP sera différente)

Résultat de Cloud Shell

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

Vous pouvez accéder au backend du point de terminaison du réseau à l'aide de l'adresse IP de l'interface de l'équilibreur de charge global. Notez que dans l'atelier de programmation, le point de terminaison est une instance GCE, mais vous pouvez l'utiliser avec des points de terminaison sur site, par exemple.

Depuis votre poste de travail local, lancez un terminal et exécutez une commande curl sur l'adresse IP de l'équilibreur de charge.

Depuis votre poste de travail, exécutez une requête curl sur l'adresse IP de l'interface. Observez le code 200 OK ainsi que les détails de la page comprenant le nom d'instance à exclure et la région.

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

Félicitations, vous avez réussi à déployer un équilibreur de charge hybride L7 avec des NEG

Félicitations, vous avez terminé l'atelier de programmation.

Points abordés

  • Créer un VPC personnalisé
  • Créer deux machines virtuelles (VM) utilisées comme groupe de points de terminaison du réseau (NEG)
  • Créer un équilibreur de charge hybride, un service de backend et les vérifications d'état associées
  • Créer une règle de pare-feu qui autorise l'accès à l'équilibreur de charge
  • Valider la joignabilité du groupe de points de terminaison du réseau

10. Étapes de nettoyage

Dans l'UI de la console Cloud, identifiez et cochez la case "xlb" et sélectionnez "Supprimer" via Services réseau → Équilibrage de charge. Cochez la case "on-prem-backend service". &amp; ‘on-premise-health-check&#39; puis sélectionnez "Supprimer"

53d7463fe354fe66.png

Dans l'interface utilisateur de la console Cloud, accédez à Compute Engine > Groupes de points de terminaison du réseau. Cochez la case "on-prem-neg-1". &amp; ‘on-prem-neg-2&#39; puis sélectionnez "Supprimer"

4d8f04264b44d03c.png

Supprimer les composants de l'atelier depuis 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