1. Einführung
Mit Private Service Connect können Dienstersteller Dienste in einer VPC-Umgebung über einen Dienstanhang veröffentlichen und Nutzern in einer anderen VPC-Umgebung den Zugriff auf diese Dienste über einen Private Service Connect-Endpunkt ermöglichen. Manchmal sind diese Erstellerdienste als Cluster von VMs konzipiert, wobei jede VM dieselben Dienste an denselben Portnummern bereitstellt. Bisher erforderten diese Dienstdesigns entweder die Bereitstellung mehrerer Private Service Connect-Endpunkte auf der Nutzerseite oder die Verwendung der IP-Weiterleitung auf der Erstellerseite, um sicherzustellen, dass die richtige VM des Erstellers anvisiert wurde.
Private Service Connect kann jetzt mithilfe der Portzuordnung nativ auf das richtige Ziel ausgerichtet werden. In diesem Lab erfahren Sie, in welchen Anwendungsfällen diese Funktion erforderlich ist und wie Sie eine NEG für die Portzuordnung in einer Private Service Connect-Arbeitslast bereitstellen.
Aufgaben in diesem Lab
- Anwendungsfälle für die Portzuordnung für Private Service Connect
- Die wichtigsten Vorteile der PSC-Portzuordnung
- Netzwerkanforderungen
- Erstellen Sie einen Private Service Connect-Producer-Dienst mit Portzuordnung.
- Private Service Connect-Endpunkt erstellen
- Aufrufe über einen Private Service Connect-Endpunkt an einen Dienstersteller ausführen
Voraussetzungen
- Google Cloud-Projekt mit Inhaberberechtigungen
2. Anwendungsfälle für die Portzuordnung für Private Service Connect
Die Portzuordnungsfunktion verwendet eine Portzuordnungs-NEG (Netzwerk-Endpunktgruppe), die für PSC-Anwendungsfälle spezifisch ist.
Die gängigsten Arten von Produzenten, die von der Portzuordnung profitieren können, sind NoSQL-Datenbank- und Kafka-Produzenten. Diese Funktion kann jedoch von allen Produzenten verwendet werden, die einen Cluster von VMs benötigen, die dieselben Dienste an identischen Ports mit bestimmten VM-Zuordnungsanforderungen bereitstellen.
Der Ersteller definiert die Zuordnung zwischen einem Clientport und einer Ersteller-VM + Zielport. Der Ersteller muss diese Informationen dann an den Verbraucher weitergeben. Der Nutzer verwendet die vordefinierten Ports, um eindeutig zu identifizieren, welche Ersteller-VM und welchen Zielport er erreichen muss. Der vom Verbraucher verwendete Port ist ein anderer als der vom Ersteller verwendete.
Wichtige Vorteile 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 dieselben wie für andere Arten von PSC-Bereitstellungen.
- Hohe Leistung: Portzuordnung bietet denselben Durchsatz bei der Leitungsrate und die gleiche geringe Latenz wie andere PSC-Modi.
- Skalierbar und IP-effizient: Eine IP-Adresse aus der Verbraucher-VPC kann auf bis zu 1.000 Produzenten-VMs und 1.000 Portzuordnungen zugreifen.
3. Netzwerkanforderungen
- Für die Portzuordnung ist ein interner Network Passthrough Load Balancer als Produzenten-Load Balancer erforderlich.
- Nur PSC-Endpunkte können für die Portzuordnung verwendet werden, nicht PSC-Backends oder PSC-Schnittstellen.
- NEGs für die Portzuordnung sind regionale Konstrukte.
- NEGs für die Portzuordnung können nur über eine PSC-Verbindung verwendet werden. Sie funktionieren nicht, wenn die Client-VM die Weiterleitungsregel des Load Balancers des Produzenten direkt aufruft. Das spiegelt sich auch in der Art und Weise wider, wie der Diensterstellerdienst in diesem Codelab getestet wird.
- Der PSC-Endpunkt und der Erstellerdienst-Stack müssen sich in verschiedenen VPCs befinden.
4. Codelab-Topologie
In der VPC des Erstellers 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 Network Passthrough Load Balancer und die Dienstverknüpfung 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
Einrichtung der Umgebung im eigenen Tempo
- 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 ein Konto erstellen.
- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es ist ein Zeichenstring, der von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und kann nach der Festlegung nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. In der Regel spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (normalerweise als
PROJECT_ID
gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Konto ausprobieren und prüfen, ob es 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 finden Sie in der Dokumentation.
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs verwenden zu können. Die Durchführung dieses Codelabs ist kostenlos oder kostet nur sehr wenig. Wenn Sie die Ressourcen deaktivieren möchten, um Kosten nach Abschluss dieser Anleitung zu vermeiden, können Sie die von Ihnen erstellten Ressourcen oder das Projekt löschen. Neuen Google Cloud-Nutzern steht das kostenlose Testprogramm mit einem Guthaben von 300$ zur Verfügung.
Cloud Shell starten
Sie können Google Cloud zwar per Fernzugriff von Ihrem Laptop aus nutzen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, 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 Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:
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 auf Google Cloud. Dadurch werden 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 dem PSC-Dienstanhang zum Zweck der Network Address Translation zugeordnet. Für Produktionsanwendungen muss dieses Subnetz entsprechend dimensioniert sein, um die Menge des eingehenden Traffics von allen angehängten PSC-Endpunkten zu unterstützen. Weitere Informationen finden Sie in der Dokumentation zur PSC-NAT-Subnetzgröße.
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 erlaubt Traffic auf den TCP-Ports 1000–2000 vom PSC-Subnetz zu allen Instanzen im Netzwerk. In einer Produktionsumgebung sollte diese Firewallregel nur auf die Instanzen beschränkt sein, die mit dem jeweiligen Erstellerdienst verknüpft 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 erlaubt allen Traffic innerhalb des Dienste-Subnetzes auf den TCP-Ports 1000–2000. Mit dieser Regel wird getestet, ob unser Produzentendienst 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
Im folgenden Abschnitt starten Sie 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 in der Sitzung „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 &
Neues Cloud Shell-Fenster öffnen
Beginnen Sie damit, die Variablen zurückzusetzen. 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 in der Sitzung „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. Test-Dienstersteller
Zuerst müssen wir die IP-Adressen der Portmap-Instanzen abrufen. Notieren Sie sich beide IP-Adressen.
Neues Cloud Shell-Fenster öffnen
Beginnen Sie damit, die Variablen zurückzusetzen. 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 in 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
Test-Client-VM beenden
9. Erstellen Sie einen Dienstanbieter mit Portmap-NEG.
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 Portmap-NEG Endpunkte hinzu, um die Zuordnung vom Clientport zum Producerport zu erstellen. Der Ersteller erstellt diese Zuordnung und hat eine eigene Methode, um diese Informationen an die Verbraucher weiterzugeben. Die spezifische Portzuordnung wird nicht über PSC freigegeben.
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
Dienstanhänge 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 sich diesen, um den PSC-Endpunkt in der Verbraucherumgebung zu konfigurieren.
In Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
Beispiel für eine 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 Kundennetzwerk ist nur SSH über IAP-Zugriff erforderlich.
11. VM, PSC-Endpunkt erstellen und Verbindung testen
Jetzt sollten drei Cloud Shell-Fenster geöffnet sein. Es sollte eine offene Sitzung mit portmap-vm1 vorhanden sein. Eine Sitzung sollte mit portmap-vm2 geöffnet sein und eine sollte die laufende Sitzung 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. Schritte zur Bereinigung
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
- Erstellen Sie einen Private Service Connect-Producer-Dienst mit Portzuordnung.
- Private Service Connect-Endpunkt erstellen
- Aufrufe über einen Private Service Connect-Endpunkt an einen Dienstersteller ausführen