Private Service Connect-Portzuordnung für Dienstersteller

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

ad37cfc003475b7c.png

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

  1. 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.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 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.
  1. 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:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:

7ffe5cbb04455448.png

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