1. Introduction
Le groupe de points de terminaison du réseau (NEG) Private Service Connect (PSC) permet d'enchaîner un équilibreur de charge HTTPS interne avec un équilibreur de charge HTTPS externe. Cela permet de distribuer les vérifications d'état et le trafic du plan de données sur site à l'aide de plages définies par le client. De plus, cette topologie est compatible avec plusieurs VPC se connectant sur site via plusieurs interconnexions régionales.
Dans cet atelier de programmation, nous allons vous montrer comment configurer cette solution de bout en bout en fonction de la topologie ci-dessous. De gauche à droite, les clients sur site disposent d'une VM pour simuler des services HTTP, tirer parti de la connectivité hybride (HA-VPN ou Interconnect) et d'un NEG hybride pour exposer via un équilibreur de charge HTTPS interne. PSC utilise l'équilibreur de charge HTTPS interne comme rattachement de service. Le NEG PSC consomme les rattachements en tant que service de backend, exposé à l'équilibreur de charge HTTPS externe. Les utilisateurs d'Internet peuvent utiliser le réseau mondial de Google pour accélérer l'accès aux services HTTP sur site.

Figure 1. Private Service Connect utilise un groupe de points de terminaison du réseau et des rattachements de service pour connecter un équilibreur de charge HTTPS externe à un équilibreur de charge HTTPS interne, et étendre le backend sur site.
Points abordés
- Équilibreur de charge HTTPS interne avec NEG hybride et vérification d'état distribuée
- Rattachement de service PSC avec équilibreur de charge HTTPS interne
- Configuration du groupe de points de terminaison du réseau PSC
- Exposer le NEG PSC avec un équilibreur de charge HTTPS externe
Prérequis
- Connaissances en connectivité hybride, comme HA-VPN
- Connaissances en équilibrage de charge HTTPS interne/externe
- Connaissances en Private Service Connect
2. Avant de commencer
Remarque : Cet atelier de programmation propose des étapes de configuration et de validation basées sur la topologie illustrée. Modifiez la procédure si nécessaire pour répondre aux exigences de votre organisation. Les autorisations IAM ne sont pas abordées dans cet atelier de programmation.
Cet atelier de programmation utilise un seul projet pour simuler l'ensemble du processus. Plusieurs projets sont également compatibles.
Projet unique : mettre à jour le projet pour qu'il soit compatible avec le réseau producteur et consommateur
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Créer des ressources sur site
Dans la section suivante, nous allons configurer un VPC et des VM sur site pour simuler les services sur site du client.
Réseau VPC
Depuis Cloud Shell
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
Créer un sous-réseau
Depuis Cloud Shell
gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1
Créer des règles de pare-feu
L'équilibreur de charge HTTPS interne est compatible avec la vérification d'état distribuée. Les règles de pare-feu n'ont besoin d'autoriser que la plage d'adresses IP du sous-réseau proxy. Suivez ce document pour ajouter vos projets à la liste d'autorisation.
Depuis Cloud Shell, créez une règle de pare-feu pour activer les vérifications d'état du backend et le trafic du plan de données à partir des sous-réseaux proxy.
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging
Depuis Cloud Shell, créez une règle de pare-feu pour autoriser IAP à se connecter à vos instances de VM.
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
4. Créer des instances de VM sur site
Cette VM simule des services sur site et doit être exposée avec un équilibreur de charge HTTPS interne à l'aide d'un NEG hybride.
Depuis Cloud Shell, créez l'instance www01.
gcloud compute instances create www01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring \
--metadata=startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install nginx -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.nginx-debian.html
sudo systemctl restart nginx'
Dans la section suivante, nous allons utiliser letsencrypt pour générer des certificats et les installer sur Nginx. Téléchargez le fichier de clé publique et privée pour l'étape suivante. Vous devez ouvrir temporairement le port TCP 80 sur Internet pour générer le certificat.
Assurez-vous que cette VM dispose d'un nom de domaine résolu publiquement. Par exemple, dans Cloud DNS, ajoutez un enregistrement A [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) et pointez vers l'adresse IP publique de la VM.
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
Depuis la console de la VM www01, suivez les instructions pour installer les certificats sur Nginx et créez une copie de fullchain.pem et private.pem pour les étapes suivantes.
sudo apt install snapd sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx
5. Créer un réseau VPC producteur
Remarque : La configuration du réseau hybride N'EST PAS incluse dans cette configuration.
Réseau VPC
Depuis Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Créer un sous-réseau
Depuis Cloud Shell
gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1
Créer un sous-réseau proxy
Depuis Cloud Shell
gcloud compute networks subnets create proxy-subnet-asia-southeast1 \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-southeast1 \ --network=vpc-demo-producer \ --range=10.0.3.0/24
Connectivité hybride
Suivez la documentation Cloud VPN pour implémenter la connectivité HA-VPN entre le VPC sur site et le VPC producteur. Conservez la configuration par défaut sur le Cloud Router. Nous n'avons pas besoin d'ajouter 130.211.0.0/22, 35.191.0.0/16 dans les annonces BGP.
6. Créer un NEG hybride producteur
Créez un groupe de points de terminaison du réseau hybride et ajoutez l'adresse IP:PORT de la VM sur site au NEG.
Depuis Cloud Shell
gcloud compute network-endpoint-groups create on-prem-service-neg \
--network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
--zone=asia-southeast1-b \
--network=vpc-demo-producer
gcloud compute network-endpoint-groups update on-prem-service-neg \
--zone=asia-southeast1-b \
--add-endpoint="ip=10.0.0.2,port=443"
7. Créer un équilibreur de charge HTTPS interne producteur
Actuellement, l'équilibreur de charge HTTPS externe n'est compatible qu'avec le protocole HTTPS pour le NEG PSC( documentation). Lorsque nous publions des services, nous devons utiliser un équilibreur de charge HTTPS interne et activer l'accès global aux règles de transfert.
Depuis Cloud Shell, créez la vérification d'état régionale.
gcloud compute health-checks create https on-prem-service-hc \
--region=asia-southeast1 \
--use-serving-port
Depuis Cloud Shell, créez le service de backend et ajoutez le NEG hybride.
gcloud compute backend-services create on-premise-service-backend \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --region=asia-southeast1 \ --health-checks=on-prem-service-hc \ --health-checks-region=asia-southeast1 gcloud compute backend-services add-backend on-premise-service-backend \ --network-endpoint-group=on-prem-service-neg \ --network-endpoint-group-zone=asia-southeast1-b \ --region=asia-southeast1 \ --balancing-mode=RATE \ --max-rate-per-endpoint=100
Depuis Cloud Shell, créez le mappage d'URL.
gcloud compute url-maps create on-premise-url \
--default-service on-premise-service-backend \
--region=asia-southeast1
Depuis Cloud Shell, créez les certificats SSL régionaux. Deux fichiers de certificat sont téléchargés depuis la VM.
gcloud compute ssl-certificates create www01 \
--certificate=fullchain.pem \
--private-key=private.pem \
--region=asia-southeast1
Depuis Cloud Shell, créez https-target-proxy.
gcloud compute target-https-proxies create on-premise-httpsproxy \
--ssl-certificates=www01 \
--url-map=on-premise-url \
--url-map-region=asia-southeast1 \
--region=asia-southeast1
Depuis Cloud Shell, réservez une adresse IP statique interne et créez la règle de transfert.
gcloud compute addresses create ilbaddress \
--region=asia-southeast1 \
--subnet=vpc-demo-asia-southeast1 \
--addresses=10.0.2.100
gcloud compute forwarding-rules create https-ilb-psc \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=vpc-demo-producer \
--subnet=vpc-demo-asia-southeast1 \
--address=ilbaddress \
--ports=443 \
--region=asia-southeast1 \
--target-https-proxy=on-premise-httpsproxy \
--target-https-proxy-region=asia-southeast1
--allow-global-access
8. Créer une instance de VM producteur
Créez une VM producteur à des fins de vérification.
Depuis Cloud Shell
gcloud compute instances create test01 \
--zone=asia-southeast1-b \
--image-family=debian-11 \
--image-project=debian-cloud \
--network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \
--shielded-secure-boot \
--shielded-vtpm \
--shielded-integrity-monitoring
Pour autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui :
Depuis Cloud Shell
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Depuis la console de la VM producteur, accédez à [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) et résolvez l'adresse IP de l'équilibreur de charge HTTPS interne. Le code HTTP 200 indique que la configuration a fonctionné comme prévu.
curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com * Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache * Hostname www01.yinghli.demo.altostrat.com was found in DNS cache * Trying 10.0.2.100:443... * Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Using Stream ID: 1 (easy handle 0x55865ef982e0) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/7.74.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * Connection state changed (MAX_CONCURRENT_STREAMS == 100)! < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:29:38 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
Remarque : Vous ne pouvez pas accéder directement aux services HTTPS de la VM 10.0.0.2, car le pare-feu sur site n'autorise l'accès qu'au sous-réseau proxy 10.0.3.0/24.
9. Créer un sous-réseau NAT PSC
Depuis Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=vpc-demo-producer \ --region=asia-southeast1 \ --range=10.0.5.0/24 \ --purpose=private-service-connect
10. Créer un rattachement de service HTTPS
Depuis Cloud Shell, créez le rattachement de service HTTPS.
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
Validez le rattachement de service HTTPS.
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
Enregistrez le nom du rattachement de service :
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Créer un réseau VPC consommateur
Dans la section suivante, le VPC consommateur est configuré dans le même projet, mais d'autres projets sont également compatibles. La communication entre le réseau consommateur et le réseau producteur s'effectue via le rattachement de service défini dans le réseau producteur.
Réseau VPC
Depuis Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
Créer un sous-réseau
Depuis Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$prodproject --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1
12. Créer un groupe de points de terminaison du réseau PSC
Créer un NEG PSC
Copiez le nom du rattachement de service HTTPS précédent et collez-le dans les paramètres --psc-target-service.
Depuis Cloud Shell
gcloud beta compute network-endpoint-groups create consumerpscneg \ --project=$prodproject \ --region=asia-southeast1 \ --network-endpoint-type=PRIVATE_SERVICE_CONNECT \ --psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \ --network=vpc-demo-consumer \ --subnet=consumer-subnet
Une fois la configuration du NEG PSC terminée, dans l'interface utilisateur, accédez à Private Service Connect > Published Services (Services publiés). Notez que la connexion ilbserviceattach publiée indique désormais une règle de transfert.

13. Créer un équilibreur de charge HTTPS externe consommateur
Créez un équilibreur de charge HTTPS externe et utilisez le NEG PSC comme service de backend( documentation).
Depuis Cloud Shell
gcloud compute addresses create httpspsclb \
--ip-version=IPV4 --global
gcloud compute backend-services create consumer-bs \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global
gcloud compute backend-services add-backend consumer-bs \
--network-endpoint-group=consumerpscneg \
--network-endpoint-group-region=asia-southeast1 \
--global
gcloud compute url-maps create consumer-url \
--default-service=consumer-backend-service \
--global
gcloud compute ssl-certificates create wwwglobal \
--certificate=fullchain.pem \
--private-key=private.pem \
--global
gcloud compute target-https-proxies create consumer-url-target-proxy \
--url-map=consumer-url \
--ssl-certificates=wwwglobal
gcloud compute forwarding-rules create consumer-url-forwarding-rule \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=httpspsclb \
--target-https-proxy=consumer-url-target-proxy \
--ports=443 \
--global
Mettez à jour l'enregistrement DNS pour www01.yinghli.demo.altostrat.com et pointez vers l'adresse IP publique de l'équilibreur de charge HTTPS externe.
gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"
14. Validation
Depuis votre ordinateur portable, accédez à https://www01.yinghli.demo.altostrat.com avec curl.
curl -v https://www01.yinghli.demo.altostrat.com * Trying 34.102.178.214:443... * Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0) * ALPN: offers h2,http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN: server accepted h2 * Server certificate: * subject: CN=www01.yinghli.demo.altostrat.com * start date: Jun 4 10:36:43 2023 GMT * expire date: Sep 2 10:36:42 2023 GMT * subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com" * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok. * using HTTP/2 * h2h3 [:method: GET] * h2h3 [:path: /] * h2h3 [:scheme: https] * h2h3 [:authority: www01.yinghli.demo.altostrat.com] * h2h3 [user-agent: curl/8.0.0] * h2h3 [accept: */*] * Using Stream ID: 1 (easy handle 0x149019a00) > GET / HTTP/2 > Host: www01.yinghli.demo.altostrat.com > user-agent: curl/8.0.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing < HTTP/2 200 < server: nginx/1.18.0 < date: Mon, 05 Jun 2023 02:48:43 GMT < content-type: text/html < content-length: 35 < last-modified: Sun, 04 Jun 2023 09:02:16 GMT < etag: "647c5318-23" < accept-ranges: bytes < via: 1.1 google, 1.1 google < alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 < Page on www01 in asia-southeast1-b * Connection #0 to host www01.yinghli.demo.altostrat.com left intact
15. Procédure de nettoyage
Procédure de nettoyage du réseau producteur
Remarque : La procédure de nettoyage n'affiche que la configuration associée à l'équilibreur de charge et au PSC. Le VPC et la connectivité hybride ne sont pas inclus.
Depuis une seule interface Cloud Shell dans le terminal, supprimez les composants de l'atelier.
gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global gcloud compute target-https-proxies delete consumer-url-target-proxy gcloud compute ssl-certificates delete wwwglobal --global gcloud compute url-maps delete consumer-url gcloud compute backend-services delete consumer-bs --global gcloud compute addresses delete httpspsclb --global gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1 gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1 gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1 gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1 gcloud compute addresses delete ilbaddress --region=asia-southeast1 gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1 gcloud compute ssl-certificates delete www01 --region=asia-southeast1 gcloud compute url-maps delete on-premise-url --region=asia-southeast1 gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1 gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1 gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1
16. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Équilibreur de charge HTTPS interne avec NEG hybride et vérification d'état distribuée
- Rattachement de service PSC avec équilibreur de charge HTTPS interne
- Configuration du groupe de points de terminaison du réseau PSC
- Exposer le NEG PSC avec un équilibreur de charge HTTPS externe