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

ad37cfc003475b7c.png

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

  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 eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

55efc1aaa7a4d3ad.png

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

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