Mappage de port Private Service Connect pour les producteurs de services

1. Introduction

Avec Private Service Connect, les producteurs de services peuvent exposer des services dans un environnement VPC via un rattachement de service et permettre aux consommateurs d'un autre environnement VPC d'accéder à ces services via un point de terminaison Private Service Connect. Parfois, ces services de production sont conçus comme des clusters de VM, chaque VM exposant les mêmes services sur des numéros de port identiques. Auparavant, ces conceptions de service nécessitaient le déploiement de plusieurs points de terminaison Private Service Connect côté consommateur ou l'utilisation du transfert d'adresse IP côté producteur pour s'assurer que la VM de producteur appropriée était ciblée.

Private Service Connect peut désormais cibler de manière native la bonne destination à l'aide du mappage de port. Dans cet atelier, vous allez découvrir les cas d'utilisation dans lesquels cette fonctionnalité est requise et comment déployer un NEG de mappage de port dans une charge de travail Private Service Connect.

Points abordés

  • Cas d'utilisation du mappage de port Private Service Connect
  • Principaux avantages du mappage des ports PSC
  • Configuration réseau requise
  • Créez un service producteur Private Service Connect à l'aide du mappage de port.
  • Créer un point de terminaison Private Service Connect
  • Effectuer des appels via un point de terminaison Private Service Connect vers un service producteur

Prérequis

  • Projet Google Cloud avec des autorisations de propriétaire

2. Cas d'utilisation du mappage de port Private Service Connect

La fonctionnalité de mappage de port utilise un NEG (groupe de points de terminaison du réseau) de mappage de port spécifique aux cas d'utilisation PSC.

Les types de producteurs les plus courants qui peuvent bénéficier du mappage de ports sont les producteurs de bases de données NoSQL et les producteurs Kafka. Toutefois, tout producteur nécessitant un cluster de VM exposant les mêmes services sur des ports identiques avec des exigences spécifiques de mappage de VM peut utiliser cette fonctionnalité.

Le producteur définit le mappage entre un port client et une VM de producteur + un port de destination. Le producteur doit ensuite partager ces informations avec le consommateur. Le consommateur utilise les ports prédéfinis pour identifier de manière unique la VM de producteur et le port de destination qu'il doit atteindre. Le port utilisé par le consommateur est différent de celui utilisé par le producteur.

Principaux avantages du mappage de ports PSC

  • Simple : les producteurs déploient des composants PSC avec un mappage de ports, et les consommateurs déploient un point de terminaison PSC. PSC gère automatiquement la traduction d'adresses réseau.
  • Rentable : elle ne nécessite aucune ressource PSC ni aucun cycle de processeur de VM producteur supplémentaires. La tarification est la même que pour les autres types de déploiements PSC.
  • Hautes performances : le mappage de ports offre le même débit à pleine vitesse et la même faible latence que les autres modes PSC.
  • Scalable et efficace en termes d'adresses IP : une adresse IP du VPC consommateur peut accéder à un maximum de 1 000 VM productrices et 1 000 mappages de ports.

3. Configuration réseau requise

  • Le mappage de ports nécessite l'utilisation d'un équilibreur de charge réseau passthrough interne comme équilibreur de charge du producteur.
  • Seuls les points de terminaison PSC peuvent être utilisés avec le mappage de ports (et non les backends ou l'interface PSC).
  • Les NEG de mappage de port sont des constructions régionales.
  • Les NEG de mappage de port ne peuvent être utilisés que via une connexion PSC. Elles ne fonctionneront pas si la VM cliente appelle directement la règle de transfert de l'équilibreur de charge du producteur. Cela se reflète dans la façon dont le service de production est testé dans cet atelier de programmation.
  • Le point de terminaison PSC et la pile de services du producteur doivent se trouver dans des VPC différents.

4. Topologie de l'atelier de programmation

ad37cfc003475b7c.png

Dans le VPC producteur, deux VM seront créées pour exécuter chacune deux serveurs Web, l'un sur le port 1000 et l'autre sur le port 2000. Nous allons tester chaque service avant de configurer le NEG Portmap, l'équilibreur de charge réseau passthrough interne et l'association de service.

Dans le VPC consommateur, nous allons configurer un point de terminaison PSC et tester la connectivité au service producteur à partir d'une VM cliente.

5. Préparation

Configuration de l'environnement au rythme de chacun

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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 :

55efc1aaa7a4d3ad.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

7ffe5cbb04455448.png

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.

6. 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-ID]
project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

Activez tous les services nécessaires.

gcloud services enable compute.googleapis.com

7. Créer un réseau VPC de producteur

Réseau VPC

Depuis Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

Créer des sous-réseaux

Depuis Cloud Shell

gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access

gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT

Le sous-réseau PSC sera associé au rattachement de service PSC à des fins de traduction d'adresse réseau. Pour les cas d'utilisation en production, ce sous-réseau doit être dimensionné de manière appropriée pour prendre en charge le volume de trafic entrant de tous les points de terminaison PSC associés. Pour en savoir plus, consultez la documentation sur le dimensionnement des sous-réseaux NAT PSC.

Créer une stratégie de pare-feu réseau et des règles de pare-feu

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

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

La règle de pare-feu suivante autorise le trafic sur les ports TCP 1000 à 2000 du sous-réseau PSC vers toutes les instances du réseau. Dans un environnement de production, cette règle de pare-feu ne doit être appliquée qu'aux instances associées au service de producteur spécifique.

Depuis Cloud Shell

gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

La règle de pare-feu suivante autorise tout le trafic au sein du sous-réseau de services sur les ports TCP 1000 à 2000. Cette règle sera utilisée pour vérifier que notre service de production fonctionne correctement.

Depuis Cloud Shell

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

Créer et configurer des VM de producteur

Créer des VM

Depuis Cloud Shell

gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address

Dans la section suivante, démarrez le serveur HTTP sur les ports 1000 et 2000 sur chaque VM producteur.

Configurer des VM

Depuis Cloud Shell

gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project

Dans Cloud Shell à partir de la session portmap-vm1

mkdir 1000
cd 1000
echo "portmap-vm1 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm1 2000">index.html
sudo python3 -m http.server 2000 &

Ouvrez une nouvelle fenêtre Cloud Shell.

Commencez par réinitialiser les variables. Dans Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project

Dans Cloud Shell à partir de la session portmap-vm2

mkdir 1000
cd 1000
echo "portmap-vm2 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm2 2000">index.html
sudo python3 -m http.server 2000 &

8. Tester le service producteur

Tout d'abord, nous devons obtenir les adresses IP des instances portmap. Notez ces deux adresses IP.

Ouvrez une nouvelle fenêtre Cloud Shell.

Commencez par réinitialiser les variables. Dans Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute instances describe portmap-vm1 \
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

gcloud compute instances describe portmap-vm2\
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

Connectez-vous à l'instance de test. Dans Cloud Shell

gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project

curl [portmap-vm1 IP]:1000

Résultat attendu

portmap-vm1 1000

Dans Cloud Shell

curl [portmap-vm1 IP]:2000

Résultat attendu

portmap-vm1 2000

Dans Cloud Shell

curl [portmap-vm2 IP]:1000

Résultat attendu

portmap-vm2 1000

Dans Cloud Shell

curl [portmap-vm2 IP]:2000

Résultat attendu

portmap-vm2 2000

Quitter test-client-vm

9. Créer un service de producteur avec un NEG de mappage de port

Créer des composants pour l'équilibreur de charge

Depuis Cloud Shell

gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP

Ajoutez des points de terminaison au NEG Portmap pour créer le mappage du port client au port du producteur. Le producteur crée ce mappage et dispose de sa propre méthode pour communiquer ces informations aux consommateurs. Le mappage de ports spécifique n'est pas partagé via PSC.

Dans Cloud Shell

gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000

Terminez la création de l'équilibreur de charge.

Dans Cloud Shell

gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc

gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region

gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes

Créer un rattachement de service

Depuis Cloud Shell

gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet

Ensuite, récupérez et notez l'URI du rattachement de service pour configurer le point de terminaison PSC dans l'environnement consommateur.

Dans Cloud Shell

gcloud compute service-attachments describe portmap-service-attachment --region=$region

Exemple de résultat attendu

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-07-19T10:02:29.432-07:00'
description: ''
enableProxyProtocol: false
fingerprint: LI8D6JNQsLA=
id: '6207474793859982026'
kind: compute#serviceAttachment
name: portmap-service-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: '94288091358954472'
  low: '6207474793859982026'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr

10. Créer un réseau VPC consommateur

Réseau VPC

Depuis Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

Créer un sous-réseau

Depuis Cloud Shell

gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access

Créer une stratégie de pare-feu réseau et des règles de pare-feu

Depuis Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

Seul l'accès SSH depuis IAP est nécessaire pour le réseau consommateur.

11. Créer une VM, un point de terminaison PSC et tester la connectivité

À ce stade, trois fenêtres Cloud Shell devraient être ouvertes. Une session doit être ouverte avec portmap-vm1. L'une doit être une session ouverte avec portmap-vm2 et l'autre doit être la session de travail.

Créez une VM de test.

Depuis Cloud Shell

gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address

Créer un point de terminaison PSC

Depuis Cloud Shell

gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10

gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]

Tester la connectivité

Depuis Cloud Shell

gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project

curl 10.0.0.10:1001

Résultat attendu

portmap-vm1 1000

Depuis Cloud Shell

curl 10.0.0.10:1002

Résultat attendu

portmap-vm1 2000

Depuis Cloud Shell

curl 10.0.0.10:1003

Résultat attendu

portmap-vm2 1000

Depuis Cloud Shell

curl 10.0.0.10:1004

Résultat attendu

portmap-vm2 2000

12. Étapes de nettoyage

Quittez l'instance de VM (toutes les fenêtres).

exit

Supprimer les composants de l'atelier à partir d'un seul terminal Cloud Shell

gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client-vm --zone=$zone -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-client-subnet  --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete portmap-service-attachment --region=$region -q

gcloud compute forwarding-rules delete portmap-fr --region=$region -q

gcloud compute backend-services delete portmap-bes --region=$region -q

gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q

gcloud compute instances delete test-client-vm --zone=$zone -q

gcloud compute instances delete portmap-vm2 --zone=$zone -q

gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q

gcloud compute networks subnets delete producer-service-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

13. Félicitations !

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Cas d'utilisation du mappage de port Private Service Connect
  • Principaux avantages du mappage des ports PSC
  • Configuration réseau requise
  • Créez un service producteur Private Service Connect à l'aide du mappage de port.
  • Créer un point de terminaison Private Service Connect
  • Effectuer des appels via un point de terminaison Private Service Connect vers un service producteur