Private Service Connect avec configuration DNS automatique

1. Introduction

Private Service Connect avec configuration DNS automatique utilise l'Annuaire des services et Cloud DNS pour créer automatiquement des enregistrements DNS programmés avec les adresses IP du point de terminaison Private Service Connect du client.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez créer une architecture Private Service Connect complète qui illustre l'utilisation du DNS automatique, comme illustré dans la figure 1.

Le DNS automatique est rendu possible par ce qui suit:

  1. Le rattachement du service de producteur génère le DNS automatique en fournissant à un domaine public détenu le nom de domaine "– domaine-names" lors de la création du rattachement de service Private Service Connect.
  2. Le client définit un nom de point de terminaison.
  3. Le DNS automatique crée une zone DNS goog-psc-default-us-central1 et un nom DNS cosmopup.net, ainsi qu'une entrée de l'annuaire des services composée du nom du point de terminaison du client.

L'avantage du DNS automatique est illustré dans la section (4), où un utilisateur final peut communiquer avec le point de terminaison consommateur via le DNS, le nom de domaine complet stargazer.cosmopup.net.

Figure 1

5e26a358454d1336.png

Points abordés

  • Créer un équilibreur de charge HTTP(S) interne
  • Créer un rattachement de service avec DNS automatique
  • Créer un service Private Service Connect Producer
  • Accéder au point de terminaison d'un client à l'aide du DNS automatique

Prérequis

  • Projet Google Cloud
  • Un domaine public dont vous êtes propriétaire

2. Avant de commencer

Mettre à jour le projet pour qu'il soit compatible avec l'atelier de programmation

Cet atelier de programmation utilise $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3. Configuration du producteur

Créer le VPC de producteur

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom

Créer les sous-réseaux du producteur

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

Réserver une adresse IP pour l'équilibreur de charge interne

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=load-balancer-subnet \
    --purpose=GCE_ENDPOINT

Afficher l'adresse IP allouée

Utilisez la commande compute addresses describe pour afficher l'adresse IP allouée.

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

Créer les sous-réseaux proxy régionaux

L'allocation du proxy s'effectue au niveau du réseau VPC, et non au niveau de l'équilibreur de charge. Vous devez créer un sous-réseau proxy réservé dans chaque région d'un réseau virtuel (VPC) dans lequel vous utilisez des équilibreurs de charge basés sur Envoy. Si vous déployez plusieurs équilibreurs de charge dans la même région et le même réseau VPC, ils partagent le même sous-réseau proxy réservé pour l'équilibrage de charge.

  1. Un client établit une connexion avec l'adresse IP et le port de la règle de transfert de l'équilibreur de charge.
  2. Chaque proxy écoute l'adresse IP et le port spécifiés par la règle de transfert de l'équilibreur de charge correspondant. L'un des proxys reçoit la connexion réseau du client et y met fin.
  3. Le proxy établit une connexion à la VM de backend appropriée, déterminée par le mappage d'URL et les services de backend de l'équilibreur de charge.

Vous devez créer des sous-réseaux proxy réservés, que votre réseau VPC soit en mode automatique ou en mode personnalisé. Un sous-réseau proxy réservé doit fournir au moins 64 adresses IP. Cela correspond à une longueur de préfixe inférieure ou égale à /26. La taille de sous-réseau recommandée est de /23 (512 adresses proxy réservées).

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

Créer les sous-réseaux NAT Private Service Connect

Créez un ou plusieurs sous-réseaux dédiés à utiliser avec Private Service Connect. Si vous utilisez la console Google Cloud pour publier un service, vous pouvez créer les sous-réseaux au cours de cette procédure. Créez le sous-réseau dans la même région que l'équilibreur de charge du service. Vous ne pouvez pas convertir un sous-réseau standard en sous-réseau Private Service Connect.

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

Créer les règles de pare-feu du producteur

Configurez des règles de pare-feu pour autoriser le trafic entre le sous-réseau NAT Private Service Connect et le sous-réseau proxy ILB uniquement.

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

Dans Cloud Shell, créez la règle de pare-feu fw-allow-health-check pour permettre aux vérifications d'état de Google Cloud d'atteindre le service producteur (service de backend) sur le port TCP 80.

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

Créez une règle de pare-feu autorisant les entrées pour le sous-réseau proxy réservé afin de permettre à l'équilibreur de charge de communiquer avec les instances backend sur le port TCP 80.

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

Configuration Cloud Router et NAT

Dans cet atelier de programmation, Cloud NAT est utilisé pour installer des packages logiciels, car l'instance de VM ne possède pas d'adresse IP externe.

Dans Cloud Shell, créez le routeur cloud.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

Dans Cloud Shell, créez la passerelle NAT.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Configuration du groupe d'instances

Dans la section suivante, vous allez créer l'instance Compute Engine et un groupe d'instances non géré. Dans les étapes suivantes, le groupe d'instances sera utilisé comme service de backend de l'équilibreur de charge.

Dans Cloud Shell, créez la vérification d'état régionale transmise au service producteur.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

Dans Cloud Shell, créez le groupe d'instances non géré.

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

Configurer l'équilibreur de charge

Dans les étapes suivantes, vous allez configurer l' équilibreur de charge HTTP interne qui sera publié en tant que rattachement de service lors d'une prochaine étape

Dans Cloud Shell, créez la vérification d'état régionale.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

Dans Cloud Shell, créez le service de backend.

 gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

Dans Cloud Shell, ajoutez des backends au service de backend.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

Dans Cloud Shell, créez le mappage d'URL pour acheminer les requêtes entrantes vers le service de backend.

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

Créez le proxy HTTP cible.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy. N'utilisez pas le sous-réseau proxy réservé pour créer la règle de transfert.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-central1

4. Valider l'équilibreur de charge

Dans la console Cloud, accédez à Services réseau → Équilibrage de charge → Équilibreurs de charge. Notez la réussite de la vérification d'état auprès du service de backend.

881567cc11627009.png

Si vous sélectionnez l7-ilb-map, vous obtenez l'adresse IP de l'interface, qui doit correspondre à l'adresse IP que vous avez saisie précédemment, et identifie le service de backend.

bab89b0a7b4f95e9.png

5. Créer le rattachement de service Private Service Connect

Créer le rattachement de service

Dans Cloud Shell, créez le rattachement de service. Veillez à ajouter le caractère "." à la fin du nom de domaine.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

Facultatif:Si vous utilisez un VPC partagé, créez le rattachement de service dans le projet de service.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

Accédez à Services réseau → Private Service Connect pour afficher le rattachement de service que vous venez d'établir.

d27fee9073dbbe2.png

La sélection de published-service permet d'obtenir plus de détails, y compris l'URI du rattachement de service utilisé par le client pour établir une connexion de service privé et le nom de domaine.

503df63730c62df2.png

Détails du rattachement de service:

projects/<nom du projet>/regions/us-central1/serviceAttachments/critiques-service

6. Configuration client

Activer les API grand public

Dans Cloud, Shell effectue les opérations suivantes:

gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com

Créer le réseau VPC du client

Dans Cloud Shell, effectuez les opérations suivantes:

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

Créer les sous-réseaux du client

Dans Cloud Shell, créez le sous-réseau pour l'instance de test.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

Dans Cloud Shell, créez un sous-réseau pour le point de terminaison du client.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

Créer le point de terminaison du client (règle de transfert)

Dans Cloud Shell, créez l'adresse IP statique qui sera utilisée pour le point de terminaison du client.

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

Nous utilisons l'URI du rattachement de service généré précédemment pour créer le point de terminaison du client.

Dans Cloud Shell, créez le point de terminaison du client.

gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service

7. Valider la connexion dans le réseau VPC du client

À partir du réseau VPC du client, vérifiez que la connexion au service privé a bien été établie en accédant à Services réseau → Private Service Connect → Points de terminaison connectés. Notez la connexion à l'astronomie établie et l'adresse IP correspondante que nous avons créée précédemment.

c60812433c3e1676.png

Lorsque vous sélectionnez psc-consumer-1, des détails sont fournis, y compris l'URI du rattachement de service

14d3e3b1e0aee3c2.png

8. Valider la connexion dans le réseau VPC du producteur

À partir du réseau VPC du producteur, vérifiez que la connexion au service privé a bien été établie en accédant à Services réseau → Private Service Connect → Service publié. Notez que la connexion de service publiée indique désormais une règle de transfert (point de terminaison de la connexion).

911dbd7421bcfd3a.png

9. Valider la configuration DNS automatique

Évaluons la configuration du DNS et de l'annuaire des services.

Configuration de Cloud DNS

Accédez à Services réseau → Cloud DNS → Zones. Le nom DNS de la zone goog-psc-default-us-central et cosmopup.net est généré automatiquement.

4395e7b33fc42faa.png

Afficher la configuration du DNS et de l'annuaire des services

Le fait de sélectionner le nom de la zone nous permet de voir comment l'Annuaire des services est intégré à Cloud DNS.

e4fe44d945b20451.png

Configuration de l'Annuaire des services

Accédez à Services réseau → Annuaire des services

Vous souvenez-vous du nom du point de terminaison du consommateur stargazer ? Il est programmé automatiquement dans l'Annuaire des services, ce qui nous permet d'atteindre le point de terminaison du client à l'aide du nom de domaine complet stargazer.goog-psc-default–us-central1.

602deab65b5ac315.png

10. Valider l'accès du client au service Producer

À partir du réseau VPC du client, nous allons créer une VM pour tester la connectivité du service publié en accédant au point de terminaison du client stargazer.cosmopup.net.

Dans Cloud Shell, créez l'instance de test dans le VPC du client.

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --no-address

Pour autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui:

  • S'applique à toutes les instances de VM auxquelles vous souhaitez rendre accessibles à l'aide d'IAP.
  • Autorise le trafic entrant provenant de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP utilisées par IAP pour le transfert TCP.

Dans Cloud Shell, créez la règle de pare-feu IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Connectez-vous à l'instance consumer-vm à l'aide d'IAP dans Cloud Shell pour valider la connectivité au service producteur en exécutant une commande curl. Réessayez en cas d'expiration du délai.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

Effectuer une requête curl pour valider la connectivité au service producteur. Une fois la sortie validée de la VM, retour à l'invite Cloud Shell

Dans Cloud Shell, exécutez une requête curl sur votre domaine personnalisé, par exemple stargazer.[custom-domain.com]. Dans le résultat ci-dessous, une requête curl est exécutée sur stargazer.cosmopup.net.

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

Quittez la VM et revenez à l'invite Cloud Shell pour démarrer les tâches de nettoyage.

11. Effectuer un nettoyage

Dans Cloud Shell, supprimez les composants de l'atelier de programmation.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet 

gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet 

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute networks delete consumer-vpc --quiet 

gcloud compute service-attachments delete published-service --region=us-central1 --quiet 

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

12. Félicitations

Félicitations ! Vous avez correctement configuré et validé un point de terminaison Private Service Connect avec configuration DNS automatique.

Vous avez créé l'infrastructure du producteur et ajouté un rattachement de service avec un enregistrement de domaine public. Vous avez appris à créer un point de terminaison consommateur dans le réseau VPC consommateur qui a autorisé la connectivité au service sur site à l'aide d'un DNS généré automatiquement.

Cosmopup trouve les ateliers de programmation géniaux !

8c2a10eb841f7b01.jpeg

Et ensuite ?

Découvrez quelques-uns des ateliers de programmation...

Complément d'informations et Vidéos

Documents de référence