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 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 :

  1. 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.
  2. Le consommateur 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, 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

5e26a358454d1336.png

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.

  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, 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.

881567cc11627009.png

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.

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 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.

d27fee9073dbbe2.png

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.

503df63730c62df2.png

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.

c60812433c3e1676.png

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

14d3e3b1e0aee3c2.png

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).

911dbd7421bcfd3a.png

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.

4395e7b33fc42faa.png

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.

e4fe44d945b20451.png

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.

602deab65b5ac315.png

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 !

8c2a10eb841f7b01.jpeg

Et ensuite ?

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

Lectures et vidéos complémentaires

Documents de référence