Private Service Connect zum Veröffentlichen und Nutzen von Diensten verwenden

1. Einführung

Mit Private Service Connect kann ein Dienstersteller einem Dienstnutzer Dienste privat anbieten. Private Service Connect bietet die folgenden Vorteile:

  • Ein VPC-Netzwerk des Diensterstellers kann mehr als einen Dienstnutzer unterstützen.
  • Jeder Nutzer stellt eine Verbindung zu einer von ihm definierten internen IP-Adresse her. Private Service Connect führt Network Address Translation (NAT) aus, um die Anfrage an den Dienstersteller weiterzuleiten.

45b90d50690dd111.png

Abbildung 2: Private Service Connect verwendet Endpunkte und Dienstanhänge, damit Dienstnutzer Traffic vom VPC-Netzwerk des Nutzers an Dienste im VPC-Netzwerk des Diensterstellers senden können (zum Vergrößern klicken).

Aufgaben in diesem Lab

  • Vorteile von Private Service Connect
  • Schlüsselkonzepte für Dienstnutzer
  • Schlüsselkonzepte für Dienstersteller
  • Produzentenumgebung erstellen
  • Dienst (Produzentenumgebung) über einen Dienstanhang freigeben
  • Kundenumgebung erstellen
  • Weiterleitungsregel im Nutzernetzwerk erstellen
  • TCP-Nutzerzugriff validieren
  • Aktivieren & Proxy-Protokoll validieren
  • Zugriffssteuerung für Richtlinien aktivieren

Voraussetzungen

  • Kenntnisse zu internen Load-Balancern
  • Möglichkeit, VPCs in zwei Projekten zu erstellen

2. Vorteile von Private Service Connect

PSC bietet gegenüber VPC-Peering mehrere Vorteile:

Bessere Kontrolle über den privaten IP-Bereich

  • Als Dienstnutzer können Sie die private IP-Adresse steuern, die für die Verbindung mit dem verwalteten Dienst verwendet wird, auf den Sie zugreifen möchten.
  • Als Dienstnutzer müssen Sie sich keine Gedanken über die Reservierung privater IP-Adressbereiche für Back-End-Dienste machen, die in Ihrer VPC genutzt werden. Sie müssen nur eine IP-Adresse aus Ihrem eigenen Subnetz auswählen, um eine Verbindung zu den Producer-Diensten herzustellen.
  • Als Dienstersteller können Sie ein mehrmandantenfähiges Modell bereitstellen, bei dem Ihre VPC Dienste enthält, die mehrere Nutzer-VPCs bereitstellen. Die Nutzer mit sich überschneidenden Subnetzbereichen sind kein Problem mehr.
  • Als Dienstanbieter können Sie Ihren Dienst auf beliebig viele VM-Instanzen skalieren, ohne weitere IP-Adressen von Ihrem Nutzer anfordern zu müssen.

Verbesserte Sicherheit und Isolation

  • Als Dienstnutzer können nur Sie die Kommunikation mit dem Dienstersteller initiieren. Diese unidirektionale Konnektivität vereinfacht die Firewallkonfiguration erheblich, reduziert aber auch das Risiko von hohem Traffic, der vom Dienstersteller kommt.
  • Als Dienstersteller müssen Sie Ihre Firewallregeln basierend auf den Subnetzbereichen in der VPC des Nutzers nicht ändern. Sie können einfach Firewallregeln für den NAT-IP-Adressbereich erstellen, der für Ihren Dienst konfiguriert ist.

Bessere Skalierbarkeit

  • PSC ermöglicht ein hoch skalierbares Design durch Unterstützung Tausender von Nutzern und ermöglicht es Diensterstellern, hoch skalierbare Multi-Tenant- oder Single-Tenant-Dienste anzubieten.
  • Als Dienstnutzer mit einer privaten Dienstverbindung können Sie nach Bedarf Ressourcen in Ihrer VPC erstellen. Der Umfang dieser Ressourcen wird nicht von der Anzahl der Ressourcen beeinflusst, die in der Producer-VPC erstellt werden.

3. Schlüsselkonzepte für Dienstnutzer

Sie können Private Service Connect-Endpunkte verwenden, um Dienste außerhalb Ihres VPC-Netzwerks zu nutzen. Dienstnutzer erstellen Private Service Connect-Endpunkte, die eine Verbindung zu einem Zieldienst herstellen.

Endpoints

Sie verwenden Private Service Connect-Endpunkte, um eine Verbindung zu einem Zieldienst herzustellen. Endpunkte haben eine interne IP-Adresse in Ihrem VPC-Netzwerk und basieren auf der Ressource der Weiterleitungsregel.

Sie senden Traffic an den Endpunkt, der ihn an Ziele außerhalb Ihres VPC-Netzwerks weiterleitet.

Ziele

Private Service Connect-Endpunkte haben ein Ziel. Dies ist der Dienst, mit dem Sie eine Verbindung herstellen möchten:

  • Ein API-Bundle:
  • Alle APIs: die meisten Google APIs
  • VPC-SC: von VPC Service Controls unterstützte APIs
  • Ein veröffentlichter Dienst in einem anderen VPC-Netzwerk. Dieser Dienst kann von Ihrer eigenen Organisation oder von einem Drittanbieter verwaltet werden.

Veröffentlichter Dienst

Sie benötigen den Dienstanhang für den Dienst, um Ihren Endpunkt mit dem Dienst eines Diensterstellers zu verbinden. Der URI des Dienstanhangs hat folgendes Format: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. Schlüsselkonzepte für Dienstersteller

Um einen Dienst für Nutzer verfügbar zu machen, erstellen Sie ein oder mehrere dedizierte Subnetze für die Network Address Translation (NAT) von Nutzer-IP-Adressen. Anschließend erstellen Sie einen Dienstanhang, der auf diese Subnetze verweist.

Private Service Connect-Subnetze

Um einen Dienst freizugeben, erstellt der Dienstersteller zuerst ein oder mehrere Subnetze mit dem Zweck Private Service Connect.

Wenn eine Anfrage von einem Nutzer-VPC-Netzwerk gesendet wird, wird die Quell-IP-Adresse des Nutzers mithilfe von Quell-NAT (SNAT) in eine IP-Adresse übersetzt, die aus einem der Private Service Connect-Subnetze ausgewählt wird.

Wenn Sie die IP-Adressinformationen der Nutzerverbindung beibehalten möchten, finden Sie weitere Informationen unter Verbindungsinformationen für Nutzer ansehen.

Diese Subnetze können nicht für Ressourcen wie VM-Instanzen oder Weiterleitungsregeln verwendet werden. Die Subnetze werden nur verwendet, um IP-Adressen für SNAT eingehender Nutzerverbindungen bereitzustellen.

Das Private Service Connect-Subnetz muss mindestens eine IP-Adresse pro 63 Nutzer-VMs enthalten,sodass jeder Nutzer-VM 1.024 Quelltupel für die Netzwerkadressübersetzung zugewiesen werden.

Die Mindestgröße für ein Private Service Connect-Subnetz ist /24.

Dienstanhänge

Dienstersteller stellen ihre Dienste über einen Dienstanhang bereit.

  • Um einen Dienst freizugeben, erstellt ein Dienstersteller einen Dienstanhang, der auf die Weiterleitungsregel des Load-Balancers des Dienstes verweist.
  • Für den Zugriff auf einen Dienst erstellt ein Dienstnutzer einen Endpunkt, der auf den Dienstanhang verweist.

Verbindungseinstellungen

Wenn Sie einen Dienst erstellen, legen Sie fest, wie Sie ihn verfügbar machen möchten. Dazu stehen die beiden folgenden Optionen zur Auswahl:

  • Verbindungen für alle Projekte automatisch akzeptieren – jeder Dienstnutzer kann einen Endpunkt konfigurieren und automatisch eine Verbindung zum Dienst herstellen.
  • Verbindungen für ausgewählte Projekte akzeptieren: Dienstnutzer konfigurieren einen Endpunkt, um eine Verbindung zum Dienst herzustellen, und der Dienstersteller nimmt die Verbindungsanfragen an oder lehnt sie ab.

5. Testumgebung

Das Nutzernetzwerk besteht aus einer statischen TCP-IP-Adresse, über die Anfragen an den Dienstersteller gesendet werden, sowie aus dem Zieldienstanhang, der dem Dienstanhang des Erstellers (veröffentlichter Dienst) zugeordnet ist.

Sehen wir uns jetzt das Producers-Netzwerk an. Beachten Sie, dass das Produzentennetzwerk keine Zuordnung zum Nutzernetzwerk hat. Stattdessen enthält das Produzentennetzwerk einen Dienstanhang (veröffentlichter Dienst), der vom Nutzer für Dienste verwendet wird. Der Dienstanhang des Erstellers in unserem Lab ist ein interner Layer-4-Load-Balancer (Producer-Weiterleitungsregel), der einem Back-End-Dienst zugeordnet ist, der eine TCP-Anwendung unterstützt.

Das NAT-Subnetz und die zugehörigen Firewallregeln ermöglichen die Kommunikation mit der Erstelleranwendung.

28b09284a99eb60b.png

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

Notieren Sie sich die Projekt-ID, also den projektübergreifend nur einmal vorkommenden Namen eines Google Cloud-Projekts. Der oben angegebene Name ist bereits vergeben und kann leider nicht mehr verwendet werden. Sie wird in diesem Codelab später als PROJECT_ID bezeichnet.

  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Google Cloud-Ressourcen nutzen zu können.

Dieses Codelab sollte ohne großen Aufwand betrieben werden. Folgen Sie der Anleitung im Abschnitt „Bereinigen“, . Hier erfahren Sie, wie Sie Ressourcen herunterfahren, damit Ihnen über dieses Tutorial hinaus keine Kosten entstehen. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

bce75f34b2c53987.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

f6ef2b5f13479f3a.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

6. Hinweis

Für Codelab sind zwei Projekte erforderlich, für PSC jedoch nicht. Beachten Sie die Verweise, um einzelne oder mehrere Projekte zu unterstützen.

Einzelnes Projekt – Projekt zur Unterstützung des Ersteller- und Nutzernetzwerks aktualisieren

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
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Mehrere Projekte – Projekt zur Unterstützung des Producer-Netzwerks aktualisieren

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

7. Producer-VPC-Netzwerk erstellen

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

VPC-Netzwerk

Aus Cloud Shell

gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom

Subnetz erstellen

Aus Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2

Cloud NAT-Instanz erstellen

Cloud NAT ist nicht dasselbe für PSC verwendete NAT. Cloud NAT wird explizit für den Internetzugriff zum Herunterladen von Anwendungspaketen verwendet.

Cloud Router erstellen

Aus Cloud Shell

gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2

Cloud NAT erstellen

Aus Cloud Shell

gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

8. Compute-Instanzen erstellen

Erstellen Sie in Cloud Shell die Instanz www-01.

gcloud compute instances create www-01 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
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.html
systemctl restart apache2
iperf3 -s -p 5050'

Erstellen Sie in Cloud Shell die Instanz www-02.

gcloud compute instances create www-02 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=vpc-demo-us-west2 --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install tcpdump -y
apt-get install apache2 -y
a2ensite default-ssl
apt-get install iperf3 -y
a2enmod ssl
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.html
systemctl restart apache2
iperf3 -s -p 5050'

9. Nicht verwaltete Instanzgruppe erstellen

Nicht verwaltete Instanzgruppe erstellen, bestehend aus www-01 & www-02

Aus Cloud Shell

gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a

gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02

gcloud compute health-checks create http hc-http-80 --port=80

10. TCP-Back-End-Dienste, Weiterleitungsregel und Firewall

Back-End-Dienst in Cloud Shell erstellen

gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80

gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a

Weiterleitungsregel in Cloud Shell erstellen

gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2

Erstellen Sie in Cloud Shell eine Firewallregel, um Back-End-Systemdiagnosen zu aktivieren

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging

Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, müssen Sie eine Firewallregel erstellen, die:

  • Gilt für alle VM-Instanzen, die mit 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.

Aus 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

11. TCP-NAT-Subnetz erstellen

Aus Cloud Shell

gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect

12. TCP-Dienstanhang und Firewallregeln erstellen

TCP-Dienstanhang in Cloud Shell erstellen

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp

TCP-Dienstanhang validieren

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2

Erstellen Sie in Cloud Shell die Firewallregel, die den TCP-NAT-Subnetzzugriff auf das ILB-Back-End zulässt

gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging

13. Nutzer-VPC-Netzwerk erstellen

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

Im folgenden Abschnitt wird die Nutzer-VPC in einem separaten Projekt konfiguriert. Die Kommunikation zwischen dem Nutzer- und dem Produzentennetzwerk erfolgt über den Dienstanhang, der im Nutzernetzwerk definiert ist.

VPC-Netzwerk

Für Codelab sind zwei Projekte erforderlich, für PSC jedoch nicht. Beachten Sie die Verweise, um einzelne oder mehrere Projekte zu unterstützen.

Einzelnes Projekt – Projekt zur Unterstützung des Ersteller- und Nutzernetzwerks aktualisieren

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Mehrere Projekte – Projekt aktualisieren, um Nutzer eines Netzwerks 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]
consumerproject=YOUR-PROJECT-NAME
echo $consumerproject

Aus Cloud Shell

gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom

Subnetz für PSC erstellen

Aus Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2

Statische IP-Adresse für TCP-Anwendungen erstellen

Aus Cloud Shell

gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100

Firewallregeln erstellen

Damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann, müssen Sie eine Firewallregel erstellen, die:

  • Gilt für alle VM-Instanzen, die mit 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.

Aus Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Obwohl dies für PSC nicht erforderlich ist, erstellen Sie eine Firewallregel für ausgehenden Traffic, um den PSC-Nutzertraffic zum Producers-Dienstanhang zu überwachen

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

Cloud NAT-Instanz erstellen

Cloud NAT ist nicht dasselbe für PSC verwendete NAT. Cloud NAT wird explizit für den Internetzugriff zum Herunterladen von Anwendungspaketen verwendet

Cloud Router erstellen

Aus Cloud Shell

gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2

Cloud NAT erstellen

Aus Cloud Shell

gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2

14. Testinstanz-VM erstellen

Aus Cloud Shell

gcloud compute instances create test-instance-1 \
    --zone=us-west2-a \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=consumer-subnet --no-address \
    --metadata=startup-script='#! /bin/bash
apt-get update
apt-get install iperf3 -y
apt-get install tcpdump -y'

15. TCP-Dienstanhang erstellen

Aus Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

16. Validierung

Wir verwenden CURL, TCPDUMP und Firewalllogs zur Validierung der Nutzer- und Produzentenkommunikation.

Innerhalb des Nutzerprojekts werden die statischen IP-Adressen für die Kommunikation mit dem Producer verwendet. Diese Zuordnung der statischen IP-Adresse zur Weiterleitungsregel für Nutzer wird durch Ausführen der folgenden Syntax validiert.

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

Identifizieren Sie in der Cloud Shell der Nutzer-VPCs die TCP-Weiterleitungsregel und die statische IP-Adresse.

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2

Ausgabe:

IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T13:34:23.359-07:00'
id: '2768158450402915488'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
<snip>

17. TCP-Validierung

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

Identifizieren Sie im Producer Project „www-01“. &amp; „www-02“ und eine SSH-Sitzung pro Instanz starten.

6d0bb8c5cb115876.png

Von "www-01" TCPDUMP zur Überwachung von NAT ausführen

sudo tcpdump -i any net 192.168.0.0/16 -n

Von "www-02" TCPDUMP zur Überwachung von NAT ausführen

sudo tcpdump -i any net 192.168.0.0/16 -n

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

Identifizieren Sie im Nutzerprojekt „test-instance-1“. und zwei Sitzungen starten.

Von „test-instance-1“ Sitzung 1 führt TCPDUMP aus, um den Nutzer zu überwachen

sudo tcpdump -i any host 10.0.60.100 -n

Von „test-instance-1“ Sitzung 2 für TCP-Validierung

curl -v 10.0.60.100 

18. Beobachtungen – Verbraucher

Von „test-instance-1“ CURL in Sitzung 2 erfolgreich und liefert 200 OK.

@test-instance-1:~$ curl -v 10.0.60.100 
* Rebuilt URL to: 10.0.60.100/
*   Trying 10.0.60.100...
* TCP_NODELAY set
* Connected to 10.0.60.100 (10.0.60.100) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.60.100
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Wed, 14 Jul 2021 21:20:22 GMT
< Server: Apache/2.4.25 (Debian)
< Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT
< ETag: "1d-5c71aed5edabd"
< Accept-Ranges: bytes
< Content-Length: 29
< Content-Type: text/html
< 
Page on www-01 in us-west2-a
* Curl_http_done: called premature == 0
* Connection #0 to host 10.0.60.100 left intact

Von „test-instance-1“ Sitzung 1, TCPDUMP identifiziert VM-Instanz → Statische TCP-IP-Kommunikation und ‐Antwort

21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

Firewall-Logging

Firewallregel „vpc-consumner-psc“ mit dem Log-Explorer validieren erfasst den Datenfluss zwischen VM-Instanz und statischer IP-Adresse.

  1. In der Cloud Console: Vorgangs-Logging identifizieren → Log-Explorer
  2. Aktualisieren Sie im Feld Query (Abfrage) den unten stehenden Eintrag mit „yourconsumerproject“ und wählen Sie „Run Query“ (Abfrage ausführen) aus.

logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. Die Abfrageergebnisse enthalten pro Screenshot Folgendes:

b573c878a8d6d01f.png

  1. Maximieren Sie das Log und identifizieren Sie die unten dargestellte Ausgabe. Beachten Sie Folgendes: 10.0.60.100 ist die STATIC TCP IP und src_ip: 10.0.60.2 ist die IP-Adresse der VM-Instanz.

1b4f46b3e61f6f12.png

19. Beobachtungen – Produzent

Von der Back-End-Instanz "www-01" oder „www-02“ wird die folgende Kommunikation zwischen dem TCP-NAT-Subnetz und dem TCP-ILB beobachtet.

21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1

21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK

20. Firewall-Logging

Firewallregel „vpc-demo-allowpsc-tcp“ mit dem Log-Explorer validieren ist das Erfassen von TCP-NAT und TCP-ILB-Ablauf, indem Sie die folgenden Schritte ausführen:

  1. In der Cloud Console: Vorgangs-Logging identifizieren → Log-Explorer
  2. Aktualisieren Sie im Feld Query (Abfrage) den Eintrag unten mit yourprodproject und wählen Sie „Run Query“ (Abfrage ausführen) aus.

logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")

  1. Die Abfrageergebnisse enthalten pro Screenshot Folgendes:

8ce6b0d17d76ad6d.png

  1. Maximieren Sie das Log und identifizieren Sie die unten dargestellte Ausgabe. Notieren Sie sich Folgendes: TCP ILB dest_ip: 10.0.2.10 und NAT TCP source_range (192.168.0.0/24) & Die entsprechende src_ip: 192.168.0.2.

e157a7af8cb667e.png

21. Proxy-Protokoll aktivieren

Standardmäßig übersetzt Private Service Connect die Quell-IP-Adresse des Nutzers in eine Adresse in einem der Private Service Connect-Subnetze im VPC-Netzwerk des Diensterstellers. Wenn Sie stattdessen die ursprüngliche Quell-IP-Adresse des Nutzers sehen möchten, können Sie das PROXY-Protokoll aktivieren. Wenn das PROXY-Protokoll aktiviert ist, können Sie die Quell-IP-Adresse des Nutzers und die PSC-Verbindungs-ID aus dem PROXY-Protokoll-Header abrufen.

e9d1c49971b10ed0.png

Referenz zur Dokumentation

Veröffentlichte Producer-Dienste löschen

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

TCP-Dienstanhänge in Cloud Shell löschen

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

Validieren, dass Dienstanhänge in Cloud Shell gelöscht wurden (0 Elemente aufgeführt)

gcloud compute service-attachments list

TCP-Dienstanhang mit aktiviertem Proxyprotokoll erstellen

gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \
--producer-forwarding-rule=vpc-demo-www-ilb-tcp \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=vpc-demo-us-west2-psc-tcp \
--enable-proxy-protocol

Validieren Sie in Cloud Shell, dass Dienstanhänge mit aktiviertem Proxyprotokoll erstellt wurden (true).

gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

TCP-Weiterleitungsregeln in Cloud Shell löschen

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

Erstellen Sie die TCP-Weiterleitungsregeln neu, die mit dem zuvor erstellten Dienstanhang (Ersteller) verknüpft werden sollen

TCP-Weiterleitungsregel in Cloud Shell erstellen

gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \
--region=us-west2 --network=vpc-demo-consumer \
--address=vpc-consumer-psc-tcp \
--target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp

Proxyprotokollüberprüfung

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

Identifizieren Sie im Producer Project „www-01“. &amp; „www-02“ und starten eine Sitzung pro Instanz.

6d0bb8c5cb115876.png

Von "www-01" TCPDUMP zur Überwachung von NAT ausführen

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

Von "www-02" TCPDUMP zur Überwachung von NAT ausführen

sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

Identifizieren Sie im Nutzerprojekt „test-instance-1“. und starten Sie eine Sitzung,

Von „test-instance-1“ Sitzung, führ einen curl durch

curl 10.0.60.100 

Beobachtungen – Verbraucher

Wenn das PROXY-Protokoll v2 aktiviert ist, die Anwendung es aber nicht unterstützt, wird beim Herstellen einer Verbindung über den Client wie im nachfolgenden Beispiel eine Fehlermeldung angezeigt. Apache-Updates sind erforderlich, um den zusätzlichen Proxy-v2-Header und die im Codelab nicht behandelt werden.

Von „test-instance-1“ CURL der Sitzung führt voraussichtlich 400 fehlerhafte Anfragen aus, obwohl die Back-End-Abfrage erfolgreich ist.

@test-instance-1:~$ curl 10.0.60.100 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>

Beobachtungen – Verbraucher

Von der Back-End-Instanz "www-01" oder „www-02“ Die folgende Kommunikation zwischen dem TCP-NAT-Subnetz und dem TCP-ILB wird mit dem in die Erfassung eingebetteten Proxyprotokoll beobachtet.

In den meisten Fällen enthält das dritte Paket in „tcpdump“ die relevanten Proxy-Protokollinformationselemente (IE). Optional können Sie das Paket mit 39 Byte identifizieren, das das Proxyprotokoll IE enthält.

192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP
        0x0000:  4500 004f 0000 4000 4006 6df4 c0a8 0003  E..O..@.@.m.....
        0x0010:  0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b  .......P..+<N%..
        0x0020:  5018 6e00 b617 0000 0d0a 0d0a 000d 0a51  P.n............Q
        0x0030:  5549 540a 2111 0017 0a00 3c02 0a00 3c64  UIT.!.....<...<d
        0x0040:  8138 0050 e000 0800 9b34 d70a 003c 64    .8.P.....4...<d

Identifizieren Sie die PROXY-Protokollsignatur: 0d0a0d0a000d0a515549540a in der Paketerfassung.

Durch Identifizieren der PROXY-Protokollsignatur können Sie sie aufschlüsseln und die Felder wie folgt decodieren:

PROXY-Protokollsignatur: 0d0a0d0a000d0a515549540a

Weitere Felder für das PROXY-Protokoll: 21 11 00 17

IP-Adressen und Ports: 0a003c02 0a003c64 8138 0050

TLV-Typ: e0

TLV-Länge: 00 08

pscConnection-ID: 009b34d70a003c64

Hex

Dezimalzahl / IP

PROXY-Protokollsignatur

0d0a0d0a000d0a515549540a

Version, Protokoll, Länge

21 11 0017

Src-IP-Adresse

0a003c02

10.0.60.2

DST-IP

0a003c64

10.0.60.100

Src-Anschluss

8138

33080

DST-Anschluss

0050

80

TLV-Typ (PP2_TYPE_GCP)

e0

TLV-Länge

0008

pscConnectionId

00004dde290a003c64

43686719580552292

Die pscConnectionId kann auch validiert werden, indem Sie die Weiterleitungsregel für Nutzer wie unten beschrieben beschreiben und sicherstellen, dass sie übereinstimmt:

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

TCP-Weiterleitungsregeln in Cloud Shell beschreiben

gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2

Ausgabe, die die pscConnectionID beschreibt

$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
IPAddress: 10.0.60.100
IPProtocol: TCP
creationTimestamp: '2021-07-14T16:50:31.766-07:00'
id: '4443494505307621032'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr-tcp
network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '43686719580552292'
pscConnectionStatus: ACCEPTED

22. Verbindungsrichtlinie

Sie können für einen veröffentlichten Dienst zwischen der automatischen und expliziten Projektakzeptanz wechseln.

Der Wechsel von der automatischen Annahme zu der expliziten Annahme hat keine Auswirkungen auf Nutzerendpunkte, die vor dieser Änderung mit dem Dienst verbunden waren. Vorhandene Nutzerendpunkte können eine Verbindung zum veröffentlichten Dienst herstellen, bis der Dienstanhang gelöscht wird. Neue Nutzerendpunkte müssen akzeptiert werden, bevor sie eine Verbindung zum Dienst herstellen können. Weitere Informationen finden Sie unter Anfragen für den Zugriff auf einen veröffentlichten Dienst verwalten.

In diesem Abschnitt des Labs ändern Sie die Verbindungsrichtlinie des Erstellers, um den Dienstanhang des Nutzers explizit zu genehmigen.

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

Aktualisieren Sie in der Cloud Shell des Producers-Dienstes die Richtlinie für die Verbindungseinstellung von „Akzeptieren“ automatisch zu Manuell akzeptieren.

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL

Den Endpunktstatus finden Sie unter „Netzwerkdienste“ → „Private Service Connect“ → „Veröffentlichte Dienste“ → vpc-demo-psc-west2-tcp → „Verbundene Projekte“

e1d90d1563e10731.png

Hinweis: Nutzerprojekt wurde in „Ausstehend“ geändert Status unter "Verbundene Projekte".

Akzeptieren Sie das Nutzerprojekt, indem Sie Folgendes in Cloud Shell ausführen. Achten Sie darauf, dass Sie das Projekt mit dem entsprechenden Projektnamen aktualisieren.

gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20

Den Endpunktstatus finden Sie unter „Netzwerkdienste“ → „Private Service Connect“ → „Veröffentlichte Dienste“ → vpc-demo-psc-west2-tcp → „Verbundene Projekte“

35cba9ac640594a2.png

Hinweis: Nutzerprojekt wurde in „Akzeptiert“ geändert Status unter "Verbundene Projekte".

23. Bereinigungsschritte

Schritte zur Bereinigung des Producer-Netzwerks

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Producer-Dienst enthält.

Löschen Sie die Lab-Komponenten in einer einzelnen Cloud Shell im Producer-Projektterminal.

gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet

gcloud compute routers delete crnatprod --region=us-west2 --quiet

gcloud compute instances delete www-01 --zone=us-west2-a --quiet

gcloud compute instances delete www-02 --zone=us-west2-a --quiet

gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet

gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet

gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet

gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet

gcloud compute health-checks delete hc-http-80 --quiet

gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet

gcloud compute firewall-rules delete vpc-demo-health-checks --quiet

gcloud compute firewall-rules delete psclab-iap-prod --quiet

gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet

gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet

gcloud compute networks delete vpc-demo-producer --quiet

Hinweis: Führen Sie im folgenden Abschnitt die Konfigurationsaktualisierungen in dem Projekt aus, das Ihren Nutzerdienst enthält.

Schritte zur Bereinigung des Nutzernetzwerks

Löschen Sie die Lab-Komponenten in einer einzelnen Cloud Shell im Producer-Projektterminal.

gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet

gcloud compute routers delete crnatconsumer --region=us-west2 --quiet

gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet

gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet

gcloud compute firewall-rules delete psclab-iap-consumer --quiet

gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

24. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Vorteile von Private Service Connect
  • Schlüsselkonzepte für Dienstnutzer
  • Schlüsselkonzepte für Dienstersteller
  • Produzentenumgebung erstellen
  • Dienst (Produzentenumgebung) über einen Dienstanhang freigeben
  • Kundenumgebung erstellen
  • Weiterleitungsregel im Nutzernetzwerk erstellen
  • TCP-Nutzerzugriff validieren
  • Aktivieren & Proxy-Protokoll validieren
  • Zugriffssteuerung für Richtlinien aktivieren