1. Einführung
Mit Private Service Connect können Dienstersteller Dienste in einer VPC-Umgebung über einen Dienstanhang bereitstellen und Nutzern in einer anderen VPC-Umgebung den Zugriff auf diese Dienste über einen Private Service Connect-Endpunkt ermöglichen. Manchmal sind diese Producer-Dienste als Cluster von VMs konzipiert, wobei jede VM dieselben Dienste an identischen Portnummern bereitstellt. Bisher waren für diese Dienstdesigns entweder mehrere Private Service Connect-Endpunkte auf der Nutzerseite oder die Verwendung von IP-Weiterleitung auf der Erstellerseite erforderlich, um sicherzustellen, dass die richtige Ersteller-VM angesprochen wurde.
Mit der Portzuordnung kann Private Service Connect jetzt nativ das richtige Ziel ansteuern. In diesem Lab erfahren Sie, in welchen Anwendungsfällen diese Funktion erforderlich ist und wie Sie eine NEG mit Portzuordnung in einer Private Service Connect-Arbeitslast bereitstellen.
Lerninhalte
- Anwendungsfälle für die Portzuordnung für Private Service Connect
- Die wichtigsten Vorteile der PSC-Portzuordnung
- Netzwerkanforderungen
- Private Service Connect-Producer-Dienst mit Portzuordnung erstellen
- Private Service Connect-Endpunkt erstellen
- Aufrufe über einen Private Service Connect-Endpunkt an einen Herstellerdienst senden
Voraussetzungen
- Google Cloud-Projekt mit Inhaberberechtigungen
2. Anwendungsfälle für die Portzuordnung für Private Service Connect
Für die Portzuordnung wird eine Portzuordnungs-NEG (Netzwerk-Endpunktgruppe) verwendet, die speziell für PSC-Anwendungsfälle vorgesehen ist.
Die gängigsten Arten von Erstellern, die von der Portzuordnung profitieren können, sind NoSQL-Datenbank-Ersteller und Kafka-Ersteller. Diese Funktion kann jedoch von jedem Producer verwendet werden, der einen Cluster von VMs benötigt, die dieselben Dienste auf identischen Ports mit bestimmten VM-Mapping-Anforderungen bereitstellen.
Der Ersteller definiert die Zuordnung zwischen einem Clientport und einer Ersteller-VM + Zielport. Der Ersteller muss diese Informationen dann mit dem Nutzer teilen. Der Nutzer verwendet die vordefinierten Ports, um eindeutig zu identifizieren, welche Ersteller-VM und welcher Zielport erreicht werden müssen. Der vom Consumer verwendete Port ist ein anderer als der vom Producer verwendete Port.
Hauptvorteile der PSC-Portzuordnung
- Einfach:Ersteller stellen PSC-Komponenten mit einer Portzuordnung bereit und Nutzer stellen einen PSC-Endpunkt bereit. PSC übernimmt die Netzwerkadressübersetzung automatisch.
- Kostengünstig:Es sind keine zusätzlichen PSC-Ressourcen oder CPU-Zyklen der Producer-VM erforderlich. Die Preise sind die gleichen wie bei anderen Arten von PSC-Bereitstellungen.
- Hohe Leistung:Die Portzuordnung bietet denselben Durchsatz und dieselbe niedrige Latenz wie andere PSC-Modi.
- Skalierbar und IP-effizient:Über eine IP-Adresse aus der Consumer-VPC kann auf bis zu 1.000 Producer-VMs und 1.000 Portzuordnungen zugegriffen werden.
3. Netzwerkanforderungen
- Für die Portzuordnung ist ein interner Passthrough-Network Load Balancer als Producer-Load-Balancer erforderlich.
- Nur PSC-Endpunkte können mit der Portzuordnung verwendet werden (nicht PSC-Backends oder PSC-Schnittstellen).
- NEGs für Portzuordnung sind regionale Konstrukte.
- Portzuordnungs-NEGs können nur über eine PSC-Verbindung verwendet werden. Sie funktionieren nicht, wenn die Client-VM die Weiterleitungsregel des Producer-Load-Balancers direkt aufruft. Dies spiegelt sich in der Art und Weise wider, wie der Producer-Dienst in diesem Codelab getestet wird.
- Der PSC-Endpunkt und der Erstellerdienst-Stack müssen sich in verschiedenen VPCs befinden.
4. Codelab-Topologie

In der Producer-VPC werden zwei VMs erstellt, auf denen jeweils zwei Webserver ausgeführt werden, einer auf Port 1000 und einer auf Port 2000. Wir testen jeden Dienst, bevor wir die Portmap-NEG, den internen Passthrough-Network-Load-Balancer und die Dienstanhänge einrichten.
In der VPC des Nutzers richten wir einen PSC-Endpunkt ein und testen die Verbindung zum Dienst des Erstellers von einer Client-VM aus.
5. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.
Cloud Shell starten
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.
6. Hinweis
APIs aktivieren
Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist.
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
Alle erforderlichen Dienste aktivieren
gcloud services enable compute.googleapis.com
7. Ersteller-VPC-Netzwerk erstellen
VPC-Netzwerk
Über Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Subnetze erstellen
Über 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
Das PSC-Subnetz wird zum Zweck der Network Address Translation dem PSC-Dienstanhang zugeordnet. Für Produktionsanwendungsfälle muss dieses Subnetz so dimensioniert sein, dass es die Menge an eingehendem Traffic von allen angehängten PSC-Endpunkten unterstützt. Weitere Informationen finden Sie in der Dokumentation zur Größenanpassung von PSC-NAT-Subnetzen.
Netzwerk-Firewallrichtlinie und Firewallregeln erstellen
Über 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
Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, erstellen Sie eine Firewallregel, die:
- Gilt für alle VM-Instanzen, die über IAP zugänglich sein sollen.
- Lässt eingehenden Traffic aus dem IP-Bereich 35.235.240.0/20 zu. Dieser Bereich enthält alle IP-Adressen, die IAP für die TCP-Weiterleitung verwendet.
Über 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
Die folgende Firewallregel lässt Traffic auf den TCP-Ports 1000–2000 vom PSC-Subnetz zu allen Instanzen im Netzwerk zu. In einer Produktionsumgebung sollte diese Firewallregel auf die Instanzen beschränkt werden, die dem jeweiligen Erstellerdienst zugeordnet sind.
Über 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
Die folgende Firewallregel lässt den gesamten Traffic innerhalb des Dienstesubnetzes auf den TCP-Ports 1000–2000 zu. Mit dieser Regel wird getestet, ob unser Dienst für Ersteller ordnungsgemäß funktioniert.
Über 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
Producer-VMs erstellen und konfigurieren
VMs erstellen
Über 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
Starten Sie im folgenden Abschnitt den HTTP-Server auf Port 1000 und 2000 auf jeder Producer-VM.
VMs konfigurieren
Über Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
In Cloud Shell über die portmap-vm1-Sitzung
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 &
Neues Cloud Shell-Fenster öffnen
Beginnen Sie mit dem Zurücksetzen von Variablen. In 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
In Cloud Shell über die portmap-vm2-Sitzung
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. Producer-Dienst testen
Zuerst müssen wir die IP-Adressen der Portmap-Instanzen abrufen. Notieren Sie sich beide IP-Adressen.
Neues Cloud Shell-Fenster öffnen
Beginnen Sie mit dem Zurücksetzen von Variablen. In 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
Melden Sie sich bei der Testinstanz an. In Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
Erwartete Ausgabe
portmap-vm1 1000
In Cloud Shell
curl [portmap-vm1 IP]:2000
Erwartete Ausgabe
portmap-vm1 2000
In Cloud Shell
curl [portmap-vm2 IP]:1000
Erwartete Ausgabe
portmap-vm2 1000
In Cloud Shell
curl [portmap-vm2 IP]:2000
Erwartete Ausgabe
portmap-vm2 2000
Testclient-VM beenden
9. Producer-Dienst mit Portmap-NEG erstellen
Load Balancer-Komponenten erstellen
Über 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
Fügen Sie der Portzuordnungs-NEG Endpunkte hinzu, um die Zuordnung vom Clientport zum Erstellerport zu erstellen. Der Ersteller erstellt diese Zuordnung und hat eine eigene Methode, um diese Informationen an die Nutzer weiterzugeben. Die spezifische Portzuordnung wird nicht über PSC geteilt.
In 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
Schließen Sie die Einrichtung des Load-Balancers ab.
In 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
Dienstanhang erstellen
Über 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
Rufen Sie als Nächstes den URI des Dienstanhangs ab und notieren Sie ihn, um den PSC-Endpunkt in der Consumer-Umgebung zu konfigurieren.
In Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
Beispiel für erwartete Ausgabe
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. Nutzer-VPC-Netzwerk erstellen
VPC-Netzwerk
Über Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Subnetz erstellen
Über 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
Netzwerk-Firewallrichtlinie und Firewallregeln erstellen
Über 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
Für das Verbrauchernetzwerk ist nur SSH-Zugriff über IAP erforderlich.
11. VM und PSC-Endpunkt erstellen und Konnektivität testen
Es sollten nun drei Cloud Shell-Fenster geöffnet sein. Sie sollten eine offene Sitzung mit portmap-vm1 haben. Eine Sitzung sollte mit portmap-vm2 geöffnet sein und eine sollte die Arbeitssitzung sein.
Test-VM erstellen
Über Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
PSC-Endpunkt erstellen
Über 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]
Konnektivität testen
Über Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
Erwartete Ausgabe
portmap-vm1 1000
Über Cloud Shell
curl 10.0.0.10:1002
Erwartete Ausgabe
portmap-vm1 2000
Über Cloud Shell
curl 10.0.0.10:1003
Erwartete Ausgabe
portmap-vm2 1000
Über Cloud Shell
curl 10.0.0.10:1004
Erwartete Ausgabe
portmap-vm2 2000
12. Bereinigungsschritte
VM-Instanz beenden (alle Fenster)
exit
Lab-Komponenten über ein einzelnes Cloud Shell-Terminal löschen
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. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Behandelte Themen
- Anwendungsfälle für die Portzuordnung für Private Service Connect
- Die wichtigsten Vorteile der PSC-Portzuordnung
- Netzwerkanforderungen
- Private Service Connect-Producer-Dienst mit Portzuordnung erstellen
- Private Service Connect-Endpunkt erstellen
- Aufrufe über einen Private Service Connect-Endpunkt an einen Herstellerdienst senden