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 des points de terminaison Private Service Connect des consommateurs.
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é à la figure 1.
Le DNS automatique est possible grâce aux éléments suivants :
- Le rattachement de service du producteur génère un DNS automatique en fournissant un domaine public lui appartenant avec l'indicateur "– domain-names" lors de la création du rattachement de service Private Service Connect.
- Le consommateur définit un nom de point de terminaison.
- Le DNS automatique crée une zone DNS goog-psc-default-us-central1 et un nom DNS cosmopup.net, en plus d'une entrée dans l'Annuaire des services composée du nom du point de terminaison du consommateur.
L'avantage du DNS automatique est illustré dans (4), où un utilisateur final peut communiquer avec le point de terminaison consommateur via le DNS, FQDN stargazer.cosmopup.net.
Figure 1

Points abordés
- Créer un équilibreur de charge HTTP(S) interne
- Créer un rattachement de service avec le DNS automatique
- Établir un service producteur Private Service Connect
- Accéder à un point de terminaison consommateur à l'aide du DNS automatique
Prérequis
- Projet Google Cloud
- Un domaine public qui vous appartient
2. Avant de commencer
Mettre à jour le projet pour qu'il soit compatible avec l'atelier de programmation
Cet atelier de programmation utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.
Dans Cloud Shell, procédez comme suit :
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname
3. Configuration de Producer
Créer le VPC du producteur
Dans Cloud Shell, procédez comme suit :
gcloud compute networks create producer-vpc --project=$projectname --subnet-mode=custom
Créer les sous-réseaux du producteur
Dans Cloud Shell, procédez comme suit :
gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1
Dans Cloud Shell, procédez comme suit :
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, procédez comme suit :
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 de proxy régionaux
Le proxy est alloué 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) où 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.
- Un client établit une connexion avec l'adresse IP et le port de la règle de transfert de l'équilibreur de charge.
- 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.
- Le proxy établit une connexion à la VM de backend appropriée, telle que déterminée par les services de backend et le mappage d'URL 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 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 /23 (512 adresses proxy réservées).
Dans Cloud Shell, procédez comme suit :
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 pendant 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, procédez comme suit :
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, procédez comme suit :
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 autoriser les vérifications d'état Google Cloud à atteindre le service de production (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 le trafic entrant 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 de Cloud Router et de NAT
Cloud NAT est utilisé dans l'atelier de programmation pour l'installation de 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 des groupes d'instances
Dans la section suivante, vous allez créer l'instance Compute Engine et le 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 de 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 étape ultérieure.
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 que la vérification de l'état du service de backend a réussi.

La sélection de l7-ilb-map génère l'adresse IP du frontend, qui doit correspondre à l'adresse IP que vous avez recherchée à l'aide de grep lors d'une étape précédente, et identifie le service de backend.

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 point à 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 nouvellement établi.

Si vous sélectionnez published-service, vous obtiendrez plus de détails, y compris l'URI du rattachement de service utilisé par le consommateur pour établir une connexion Private Service et le nom de domaine.

Détails du rattachement de service :
projects/<project name>/regions/us-central1/serviceAttachments/published-service
6. Configuration du client
Activer les API grand public
Dans Cloud Shell, procédez comme suit :
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
Créer le réseau VPC consommateur
Dans Cloud Shell, procédez comme suit :
gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom
Créer les sous-réseaux consommateurs
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 consommateur.
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 consommateur (règle de transfert)
Dans Cloud Shell, créez l'adresse IP statique qui sera utilisée pour le point de terminaison 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 consommateur.
Dans Cloud Shell, créez le point de terminaison du consommateur.
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 consommateur
Dans le réseau VPC consommateur, vérifiez que la connexion Private Service Connect a réussi en accédant à Services réseau → Private Service Connect → Points de terminaison connectés. Notez la connexion stargazer établie et l'adresse IP correspondante que nous avons créées précédemment.

Lorsque vous sélectionnez psc-consumer-1, des informations sont fournies, y compris l'URI du rattachement de service.

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

9. Valider la configuration DNS automatique
Évaluons la configuration DNS et de l'annuaire des services.
Configuration de Cloud DNS
Accédez à Services réseau → Cloud DNS → Zones. La zone goog-psc-default-us-central et le nom DNS cosmopup.net sont générés automatiquement.

Afficher la configuration DNS et de l'annuaire des services
En sélectionnant le nom de la zone, nous pouvons voir comment l'annuaire des services est intégré à Cloud DNS.

Configuration de l'annuaire des services
Accédez à Services réseau → Annuaire des services.
Vous vous souvenez du nom du point de terminaison du consommateur, stargazer ? Il est programmé automatiquement dans l'Annuaire des services, ce qui nous permet d'accéder au point de terminaison du consommateur à l'aide du nom de domaine complet stargazer.goog-psc-default–us-central1.

10. Valider l'accès des consommateurs au service des producteurs
À partir du réseau VPC du consommateur, nous allons créer une VM pour tester la connectivité du service publié en accédant au point de terminaison du consommateur stargazer.cosmopup.net.
Dans Cloud Shell, créez l'instance de test dans le VPC du consommateur.
gcloud compute instances create db1 \
--zone=us-central1-a \
--image-family=debian-10 \
--image-project=debian-cloud \
--subnet=db1-subnet \
--no-address
Pour permettre à IAP de 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 être accessible à l'aide d'IAP.
- Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise 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 à consumer-vm à l'aide d'IAP dans Cloud Shell pour valider la connectivité au service producteur en effectuant une requête curl. Réessayez en cas de délai d'expiration.
gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap
Effectuez un curl pour valider la connectivité au service de producteur. Une fois la validation effectuée, quittez la VM pour revenir à l'invite Cloud Shell.
Dans Cloud Shell, effectuez 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 lancer 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 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, ce qui permettait la connectivité au service sur site à l'aide du DNS généré automatiquement.
Cosmopup pense que les ateliers de programmation sont géniaux !

Et ensuite ?
Découvrez quelques-uns des ateliers de programmation...
- Publier et consommer des services avec GKE à l'aide de Private Service Connect
- Publier et consommer des services à l'aide de Private Service Connect
- Se connecter à des services sur site via un réseau hybride à l'aide de Private Service Connect et d'un équilibreur de charge proxy TCP interne
Lectures et vidéos complémentaires
- Présentation de Private Service Connect
- Qu'est-ce que Private Service Connect ?
- Types d'équilibreur de charge compatibles