1. Einführung
Die Private Service Connect-Netzwerk-Endpunktgruppe (NEG) unterstützt die Verkettung eines internen HTTPS-Load-Balancers mit einem externen HTTPS-Load-Balancer. Dadurch werden verteilte Systemdiagnosen und Datenebenen-Traffic für On-Prem-Umgebungen mithilfe von vom Kunden definierten Bereichen bereitgestellt. Außerdem werden mit dieser Topologie auch mehrere VPCs unterstützt, die über mehrere regionale Interconnects mit On-Prem verbunden sind.
In diesem Codelab wird gezeigt, wie Sie diese End-to-End-Lösung basierend auf der Topologie unten konfigurieren. Von links nach rechts haben Kunden vor Ort eine VM, um HTTP-Dienste zu simulieren, Hybridkonnektivität (HA-VPN oder Interconnect) und Hybrid-NEG zu nutzen, um sie über einen internen HTTPS-Load-Balancer verfügbar zu machen. PSC verwendet interne HTTPS-Load-Balancer als Dienstanhänge. Die PSC-NEG verwendet die Anhänge als Back-End-Dienst, der für den externen HTTPS-LB bereitgestellt wird. Internetnutzer können das globale Netzwerk von Google verwenden, um den Zugriff auf lokale HTTP-Dienste zu beschleunigen.

Abbildung 1. Private Service Connect verwendet Netzwerkendpunktgruppen und Dienstanhänge, um externe HTTPS-Load-Balancer mit internen HTTPS-Load-Balancern zu verbinden und das Backend auf On-Premise-Umgebungen auszuweiten.
Lerninhalte
- Interner HTTPS-Load-Balancer mit Hybrid-NEG und verteilter Systemdiagnose
- PSC-Dienstanhang mit internem HTTPS-Load-Balancer
- Einrichtung von PSC-Netzwerk-Endpunktgruppen
- PSC-NEG mit externem HTTPS-Load-Balancer bereitstellen
Voraussetzungen
- Kenntnisse der Hybridkonnektivität, z. B. HA VPN
- Kenntnisse des internen/externen HTTPS-Load-Balancing
- Kenntnisse von Private Service Connect
2. Hinweis
Hinweis: Im Codelab werden Konfigurations- und Validierungsschritte basierend auf der abgebildeten Topologie angeboten. Passen Sie das Verfahren nach Bedarf an die Anforderungen Ihrer Organisation an. IAM-Berechtigungen sind nicht Teil dieses Codelabs.
In diesem Codelab wird ein Projekt verwendet, um den gesamten Prozess zu simulieren. Mehrere Projekte werden ebenfalls unterstützt.
Einzelnes Projekt – Projekt aktualisieren, um Ersteller- und Verbrauchernetzwerk zu unterstützen
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. On-Prem-Ressourcen erstellen
Im folgenden Abschnitt richten wir eine lokale VPC und VMs ein, um die lokalen Dienste des Kunden zu simulieren.
VPC-Netzwerk
Über Cloud Shell
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
Subnetz erstellen
Über 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
Firewallregeln erstellen
Der interne HTTPS-Load-Balancer unterstützt verteilte Systemdiagnosen. Firewallregeln müssen nur den IP-Bereich des Proxy-Subnetzes zulassen. Folgen Sie dieser Anleitung, um Ihre Projekte auf die Zulassungsliste zu setzen.
Erstellen Sie in Cloud Shell eine Firewallregel, um Backend-Systemdiagnosen und Data-Plane-Traffic aus Proxy-Subnetzen zu aktivieren.
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
Erstellen Sie in Cloud Shell eine Firewallregel, damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann.
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. On-Prem-VM-Instanzen erstellen
Diese VM simuliert lokale Dienste und muss mit einem internen HTTPS-Load-Balancer über ein Hybrid-NEG verfügbar gemacht werden.
Instanz www01 über Cloud Shell erstellen
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'
Im folgenden Abschnitt verwenden wir letsencrypt, um Zertifikate zu generieren und auf Nginx zu installieren. Laden Sie die Datei mit dem öffentlichen und privaten Schlüssel für den nächsten Schritt herunter. Sie müssen TCP-Port 80 vorübergehend für das Internet öffnen, um das Zertifikat zu generieren.
Prüfen Sie, ob für diese VM ein öffentlich auflösbarer Domainname vorhanden ist. Fügen Sie beispielsweise in Cloud DNS einen A-Eintrag [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) hinzu und verweisen Sie auf die öffentliche IP-Adresse der 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"
Folgen Sie in der Konsole von VM www01 der Anleitung, um Zertifikate auf Nginx zu installieren und eine Kopie von fullchain.pem und private.pem für die folgenden Schritte zu erstellen.
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. VPC-Netzwerk für Ersteller erstellen
Hinweis: Die Konfiguration von Hybridnetzwerken ist in dieser Konfiguration NICHT enthalten.
VPC-Netzwerk
Über Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Subnetz erstellen
Über 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
Proxy-Subnetz erstellen
Über 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
Hybridkonnektivität
Folgen Sie der Cloud VPN-Dokumentation, um eine HA VPN-Verbindung zwischen der lokalen VPC und der Producer-VPC zu implementieren. Behalten Sie die Standardkonfiguration des Cloud Routers bei. Wir müssen 130.211.0.0/22 und 35.191.0.0/16 nicht in BGP-Advertisements aufnehmen.
6. Hybrid-NEG für Produzenten erstellen
Erstellen Sie eine Hybrid-Netzwerk-Endpunktgruppe und fügen Sie die IP:PORT-Adresse der lokalen VM in die NEG ein.
Über 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. Internen HTTPS-Load-Balancer für Produzenten erstellen
Derzeit unterstützt der externe HTTPS-Load-Balancer nur das HTTPS-Protokoll für PSC-NEGs( Dokumentation). Wenn wir veröffentlichte Dienste verwenden, müssen wir den internen HTTPS-Load-Balancer verwenden und den globalen Zugriff auf Weiterleitungsregeln aktivieren.
Erstellen Sie die regionale Systemdiagnose in Cloud Shell.
gcloud compute health-checks create https on-prem-service-hc \
--region=asia-southeast1 \
--use-serving-port
Erstellen Sie den Backend-Dienst in Cloud Shell und fügen Sie die hybride NEG hinzu.
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
URL-Zuordnung über die Cloud Shell erstellen
gcloud compute url-maps create on-premise-url \
--default-service on-premise-service-backend \
--region=asia-southeast1
Erstellen Sie die regionalen SSL-Zertifikate in Cloud Shell. Zwei Zertifikatdateien werden von der VM heruntergeladen.
gcloud compute ssl-certificates create www01 \
--certificate=fullchain.pem \
--private-key=private.pem \
--region=asia-southeast1
HTTPS-Zielproxy über Cloud Shell erstellen
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
Reservieren Sie in Cloud Shell eine interne statische IP-Adresse und erstellen Sie die Weiterleitungsregel.
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. Producer-VM-Instanz erstellen
Erstellen Sie eine Ersteller-VM zur Überprüfung.
Über 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
Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, erstellen Sie eine Firewallregel, die:
Über 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
Rufen Sie in der Konsolen-VM des Producers [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) auf und lösen Sie die IP-Adresse des internen HTTPS-Load-Balancers auf. Der HTTP-Statuscode 200 gibt an, dass die Konfiguration wie erwartet funktioniert hat.
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
Hinweis: Sie können nicht direkt auf die HTTPS-Dienste der VM 10.0.0.2 zugreifen, da die lokale Firewall nur den Zugriff über das Proxy-Subnetz 10.0.3.0/24 zulässt.
9. PSC-NAT-Subnetz erstellen
Über 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. HTTPS-Dienstanhang erstellen
HTTPS-Dienstanhang über Cloud Shell erstellen
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
HTTPS-Dienstanhang validieren
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
Name des Dienstanhangs notieren:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Nutzer-VPC-Netzwerk erstellen
Im folgenden Abschnitt wird die Nutzer-VPC im selben Projekt konfiguriert. Es werden aber auch verschiedene Projekte unterstützt. Die Kommunikation zwischen dem Nutzer- und dem Erstellernetzwerk erfolgt über den im Erstellernetzwerk definierten Dienstanhang.
VPC-Netzwerk
Über Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
Subnetz erstellen
Über 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. PSC-Netzwerk-Endpunktgruppe erstellen
PSC-NEG erstellen
Kopieren Sie den Namen der vorherigen https-Dienstanlage und fügen Sie ihn in die Parameter --psc-target-service ein.
Über 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
Nachdem PSC NEG erfolgreich eingerichtet wurde, sehen Sie in der Benutzeroberfläche unter Private Service Connect -> Published Services, dass die veröffentlichte ilbserviceattach-Verbindung jetzt eine Weiterleitungsregel enthält.

13. Externen HTTPS-Load-Balancer für Consumer erstellen
Erstellen Sie einen externen HTTPS-Load-Balancer und verwenden Sie PSC-NEGs als Backend-Dienste( Dokumentation).
Über 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
DNS-Eintrag für www01.yinghli.demo.altostrat.com aktualisieren und auf die öffentliche IP-Adresse des externen HTTPS-Load-Balancers verweisen
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. Validierung
Rufen Sie auf Ihrem Laptop mit curl auf https://www01.yinghli.demo.altostrat.com zu.
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. Bereinigungsschritte
Bereinigungsschritte für das Producer-Netzwerk
Hinweis: Die Bereinigungsschritte zeigen nur die Load Balancer- und PSC-bezogene Konfiguration. VPC und Hybridkonnektivität sind nicht enthalten.
Lab-Komponenten über eine einzelne Cloud Shell im Terminal löschen
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. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Behandelte Themen
- Interner HTTPS-Load-Balancer mit Hybrid-NEG und verteilter Systemdiagnose
- PSC-Dienstanhang mit internem HTTPS-Load-Balancer
- Einrichtung von PSC-Netzwerk-Endpunktgruppen
- PSC-NEG mit externem HTTPS-Load-Balancer bereitstellen