1. Introduction
Le groupe de points de terminaison du réseau (NEG) Private Service Connect (PSC) permet d'associer un équilibreur de charge HTTPS interne à un équilibreur de charge HTTPS externe. Cela permet de fournir des vérifications d'état distribuées et du trafic de plan de données sur site à l'aide de plages définies par le client. Cette topologie permet également de connecter plusieurs VPC sur site via plusieurs interconnexions régionales.
Dans cet atelier de programmation, nous allons vous montrer comment configurer cette configuration de bout en bout en fonction de la topologie ci-dessous. De gauche à droite, les clients sur site disposent d'une VM pour simuler les services HTTP, d'une connectivité hybride (HA-VPN ou InterConnect) et d'un NEG hybride pour les exposer via un équilibreur de charge HTTPS interne. PSC utilise un équilibreur de charge HTTPS interne en tant que rattachement de service. Le NEG PSC utilise les rattachements en tant que service de backend, exposé à l'équilibreur de charge HTTPS externe. Les internautes 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 l'équilibreur de charge HTTPS externe à l'é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 de la connectivité hybride, comme le VPN haute disponibilité
- Connaissance de l'équilibrage de charge HTTPS interne/externe
- Connaissances de Private Service Connect
2. Avant de commencer
Remarque: L'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 prises en compte dans cet atelier de programmation.
L'atelier de programmation utilisera un projet pour simuler l'ensemble du processus. Vous pouvez également créer plusieurs projets.
Single Project - Update project to support producer and consumer network
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 sur site et des VM 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éez des règles de pare-feu.
L'équilibreur de charge HTTPS interne est compatible avec la vérification de l'état distribuée. Les règles de pare-feu ne doivent autoriser que la plage d'adresses IP du sous-réseau proxy. Consultez la documentation pour ajouter vos projets à la liste d'autorisation.
Dans 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
Dans 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 l'équilibreur de charge HTTPS interne à l'aide d'un NEG hybride.
Créer une instance www01 depuis Cloud Shell
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 les fichiers de clés publique et privée pour l'étape suivante. Vous devez ouvrir temporairement le port TCP 80 sur Internet pour générer des certificats.
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-le 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"
Dans 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 le réseau VPC des producteurs
Remarque : La configuration de la connectivité 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é VPN haute disponibilité entre le VPC sur site et le VPC de producteur. Conservez la configuration par défaut sur le routeur Cloud Router. Nous n'avons pas besoin d'ajouter 130.211.0.0/22, 35.191.0.0/16 aux annonces BGP.
6. Créer un NEG hybride de producteurs
Créez un groupe de points de terminaison du réseau hybride et ajoutez "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 pour les producteurs
Actuellement, l'équilibreur de charge HTTPS externe n'est compatible qu'avec le protocole HTTPS pour les NEG PSC (documentation). Pour les services publiés, nous devons utiliser un équilibreur de charge HTTPS interne et activer l'accès mondial aux règles de transfert.
Dans 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
Dans 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
Créer le mappage d'URL depuis Cloud Shell
gcloud compute url-maps create on-premise-url \ --default-service on-premise-service-backend \ --region=asia-southeast1
Dans Cloud Shell, créez les certificats SSL régionaux. Deux fichiers de certificat sont téléchargés à partir de la VM.
gcloud compute ssl-certificates create www01 \ --certificate=fullchain.pem \ --private-key=private.pem \ --region=asia-southeast1
Depuis Cloud Shell, créez le proxy cible
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
Réserver une adresse IP statique interne dans Cloud Shell et créer 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 de producteur
Créer une VM de producteur pour la validation
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
Créer l'attachement de service HTTPS dans Cloud Shell
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
Valider 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 le réseau VPC de clients
Dans la section suivante, le VPC client est configuré dans le même projet, mais différents projets sont également acceptés. La communication entre le réseau du client et celui du producteur s'effectue via le rattachement de service défini dans le réseau du 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 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 de la négociation PSC réussie, dans l'UI, après Private Service Connect
-> Published Services
-> Notez que la connexion ilbserviceattach
publiée indique désormais une règle de transfert.
13. Créer un équilibreur de charge HTTPS externe pour le client
Créez un équilibreur de charge HTTPS externe et utilisez le NEG PSC en tant que services 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 faites pointer 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. Étapes de nettoyage
Procédure de nettoyage du réseau du producteur
Remarque: Les étapes de nettoyage n'affichent que la configuration liée à l'équilibreur de charge et à PSC. Le VPC et la connectivité hybride ne sont pas inclus.
Supprimer des composants de l'atelier à partir d'un seul cloud shell dans le terminal
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