1. Introduction
Private Service Connect permet aux producteurs de services d'exposer des services de manière privée d'un réseau VPC à un autre. Les consommateurs peuvent accéder aux services de producteurs via des points de terminaison PSC ou des backends PSC.
Cet atelier de programmation est consacré aux backend PSC. Les backends PSC sont utilisés avec les équilibreurs de charge proxy Google Cloud (application ou réseau). L'utilisation de backends PSC offre des commandes plus précises côté consommateur, par exemple:
- Observabilité et journalisation plus approfondies
- Intégration de Cloud Armor
- URL personnalisées
- Gestion avancée du trafic
- Certificats TLS personnalisés
Dans cet atelier de programmation, vous allez apprendre à créer un backend Private Service Connect avec l'équilibreur de charge d'application externe global pour accéder de manière privée à un service de producteur dans un autre réseau.
Points abordés
- Créer et configurer un backend PSC associé à l'équilibreur de charge d'application externe global
- Configurer un service Web géré par Apache et l'exposer en tant que service PSC via un Service Attachment
- Créer des certificats SSL pour mettre fin à SSL sur les équilibreurs de charge d'application internes et externes
- Configurer une zone publique Cloud DNS pour accéder au service PSC
Prérequis
- Un projet Google Cloud avec des autorisations de propriétaire
2. Environnement de test
L'environnement que vous allez créer comprendra un VPC client et un VPC producteur. Dans le VPC du producteur, vous allez déployer un groupe d'instances géré à partir d'un modèle d'instance qui crée un service Web Apache Open Source. Vous allez également déployer une VM de test pour vous assurer que le service fonctionne correctement en local. Vous allez exposer le service Apache en tant que service de producteur PSC via un rattachement de service.
Dans le VPC consommateur, vous allez déployer un équilibreur de charge d'application externe global avec un service backend PSC pointant vers le service Apache. Vous allez ensuite configurer une zone DNS publique pour accéder au service PSC sur Internet public.
3. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. 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.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :
Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :
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 effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
4. Avant de commencer
Activer les API
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
Activez tous les services nécessaires.
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. Configuration du VPC du producteur
Créer un réseau VPC
Depuis Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Créer des sous-réseaux
Deux sous-réseaux à usage général seront déployés dans le VPC du producteur. Le sous-réseau de service sera utilisé pour déployer les VM du service Web Apache ainsi que la règle de transfert de l'équilibreur de charge. Le sous-réseau client de test se trouvera dans une autre région et sera utilisé pour déployer une VM afin de tester le service Apache avec l'accès mondial activé.
Depuis Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
Depuis Cloud Shell
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
Nous devons également déployer un sous-réseau proxy réservé à utiliser avec l'équilibreur de charge d'application interne régional.
Depuis Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
Lorsqu'un service PSC est déployé, un sous-réseau NAT PSC correspondant doit être associé au rattachement de service pour chaque service unique. La taille de ce sous-réseau doit être adaptée en fonction du nombre de points de terminaison connectés attendus.
Depuis Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Créer un Cloud NAT
Un Cloud NAT est nécessaire pour installer les packages appropriés pour nos services producteurs.
Depuis Cloud Shell
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
Depuis Cloud Shell
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Créer une stratégie et des règles de pare-feu de réseau
Depuis Cloud Shell
gcloud compute network-firewall-policies create producer-vpc-policy --global gcloud compute network-firewall-policies associations create \ --firewall-policy producer-vpc-policy \ --network producer-vpc \ --name network-producer-vpc \ --global-firewall-policy
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 que 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 qu'IAP utilise pour le transfert TCP.
Depuis Cloud Shell
gcloud compute network-firewall-policies rules create 1000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "SSH with IAP" \ --direction INGRESS \ --src-ip-ranges 35.235.240.0/20 \ --layer4-configs tcp:22 \ --global-firewall-policy
Deux règles de pare-feu supplémentaires sont nécessaires pour autoriser le trafic entrant vers les backends de l'équilibreur de charge provenant du sous-réseau proxy réservé de l'équilibreur de charge (2000), ainsi qu'une règle pour autoriser les vérifications d'état de l'équilibreur de charge sur les instances backend (2001).
Depuis Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. Créer un service Web Apache
Nous allons créer un service Web Apache simple qui affiche "Service PSC".
Créer un modèle d'instance
Depuis Cloud Shell
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
Créer une vérification de l'état pour un MIG
Depuis Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
Créer un groupe d'instances géré
Depuis Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. Créer un certificat autosigné
Pour créer un certificat autosigné, suivez l'étape 1 des instructions ici. Vous pouvez exécuter toutes les commandes dans Cloud Shell. Revenez ici une fois l'étape 1 terminée. VOTRE NOM COMMUN DOIT ÊTRE CONFIGURÉ AVEC EXAMPLE.COM.
Créez une ressource de certificat à associer à votre équilibreur de charge. Remplacez les paramètres de certificat et de clé privée par vos noms de fichiers spécifiques.
Depuis Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. Créer l'équilibreur de charge d'application interne régional
Nous allons ensuite créer les composants de l'équilibreur de charge pour le service. Nous utilisons l'équilibreur de charge d'application interne régional, mais vous pouvez utiliser n'importe quel équilibreur de charge interne Google Cloud. Suivez la documentation appropriée sur l'équilibreur de charge pour la gestion TLS.
Créez l'adresse IP interne qui sera utilisée pour la règle de transfert de votre équilibreur de charge, puis notez l'adresse à utiliser plus tard lorsque vous passerez un appel test au service.
Depuis Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
Créez la vérification de l'état de l'équilibreur de charge.
Depuis Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
Créez le service de backend :
Depuis Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
Créez le mappage d'URL.
Depuis Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
Créez les proxys HTTPS cibles.
Depuis Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
Créez la règle de transfert.
Depuis Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. Créer une VM de test et tester le service en local
Avant de créer le rattachement de service, nous allons créer une VM cliente de test dans une autre région pour vérifier que l'équilibreur de charge est correctement configuré avec l'accès mondial et TLS.
Depuis Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
Attendez environ une minute que le provisionnement se termine, puis connectez-vous en SSH à l'instance.
Depuis Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
Testez le service Apache en vous connectant via le port 443 via l'équilibreur de charge. L'adresse IP interne est celle que vous avez réservée et notée précédemment.
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
RÉSULTAT ATTENDU
PSC Service
Quittez la VM.
À partir de vm-client
exit
10. Créer le rattachement de service
Pour cet exemple, nous allons configurer notre rattachement de service pour n'autoriser que les connexions PSC à partir de ce projet. Vous pouvez configurer cette fonctionnalité pour qu'elle accepte un ou plusieurs projets ou réseaux spécifiques, mais pas les deux. Nous avons défini la limite maximale de connexions sur cinq. Une limite doit être définie pour chaque projet ou réseau.
Depuis Cloud Shell
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
Notez l'URI de l'attachement de service (selfLink), car vous en aurez besoin à l'étape suivante pour la configuration du backend PSC. Pour l'obtenir, exécutez la commande suivante dans Cloud Shell.
Depuis Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \ --region $region
Copiez l'URI à partir de projects.
Exemple:projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. Configuration du VPC du client
Créer un réseau VPC
Depuis Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Créer un sous-réseau
Un sous-réseau est nécessaire côté consommateur, où le groupe de points de terminaison du réseau (NEG) Private Service Connect sera déployé.
Depuis Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. Réserver une adresse IP externe et créer un certificat autosigné côté client
Adresse IP externe
Créez l'adresse IP externe statique qui sera utilisée plus tard pour la règle de transfert de l'équilibreur de charge, puis capturez l'adresse IP dans une variable Cloud Shell.
Depuis Cloud Shell
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
Certificat autosigné pour les consommateurs
Suivez à nouveau l'étape 1 des instructions ici pour créer un certificat autosigné. Vous pouvez exécuter toutes les commandes dans Cloud Shell. Revenez ici une fois l'étape 1 terminée. Nous utiliserons un service DNS générique public open source appelé nip.io au lieu de posséder notre propre zone DNS publique. L'URL publique de votre service PSC utilisera l'adresse IP externe que vous venez de configurer. VOTRE NOM COMMUN DOIT ÊTRE CONFIGURÉ AVEC <VOTRE-ADRESSE-IP-EXTÉRIEUR.nip.io>
Créez une ressource de certificat à associer à votre équilibreur de charge externe. Remplacez les paramètres de certificat et de clé privée par vos noms de fichiers spécifiques.
Depuis Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. Créer les composants de l'équilibreur de charge
Nous allons créer un équilibreur de charge d'application externe global avec un NEG PSC pointant vers notre nouvelle attache de service en tant que service de backend.
Ayez à portée de main l'URI du rattachement de service que vous avez noté à l'étape précédente. Remplacez psc-target-service ci-dessous par votre URI.
Depuis Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
Créez le service de backend.
Depuis Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
Créer le mappage d'URL
Depuis Cloud Shell
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
Créez les proxys HTTPS cibles.
Depuis Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
Créer la règle de transfert
Depuis Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. Créer une zone DNS publique
Depuis Cloud Shell
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
Depuis Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. Tester la connexion PSC du client
Attendez sept à dix minutes avant de procéder aux tests pour laisser le DNS public se propager.
Depuis Cloud Shell
curl https://$externalip.nip.io -k
Vous pouvez également effectuer des tests depuis votre navigateur en saisissant https://<VOTRE-ADRESSE-IP-EXTERNE>.nip.io dans votre navigateur ou dans le terminal de votre ordinateur.
RÉSULTAT ATTENDU
PSC Service
16. Procédure de nettoyage
Supprimer des composants de l'atelier à partir d'un seul terminal Cloud Shell
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -q gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy --name=network-producer-vpc --global-firewall-policy -q gcloud compute network-firewall-policies delete producer-vpc-policy --global -q gcloud compute routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Créer et configurer un backend PSC associé à l'équilibreur de charge d'application externe global
- Configurer un service Web géré par Apache et l'exposer en tant que service PSC via un Service Attachment
- Créer des certificats SSL pour mettre fin à SSL sur les équilibreurs de charge d'application internes et externes
- Configurer une zone publique Cloud DNS pour accéder au service PSC