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:
- 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.
- Le client 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, 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
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.
- 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, 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
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 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.
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.
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.
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.
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.
Lorsque vous sélectionnez psc-consumer-1, des détails sont fournis, y compris l'URI du rattachement de service
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).
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.
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.
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.
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 !
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 aux services sur site via une mise en réseau hybride à l'aide de Private Service Connect et d'un équilibreur de charge proxy TCP interne
Complément d'informations et Vidéos
- Présentation de Private Service Connect
- Qu'est-ce que Private Service Connect ?
- Types d'équilibreurs de charge compatibles