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) durch, um die Anfrage an den Dienstersteller weiterzuleiten.
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.
Umgebung für das selbstbestimmte Lernen einrichten
- 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.
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.
- 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:
Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:
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“. & „www-02“ und eine SSH-Sitzung pro Instanz starten.
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.
- In der Cloud Console: Vorgangs-Logging identifizieren → Log-Explorer
- 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")
- Die Abfrageergebnisse enthalten pro Screenshot Folgendes:
- 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.
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:
- In der Cloud Console: Vorgangs-Logging identifizieren → Log-Explorer
- 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")
- Die Abfrageergebnisse enthalten pro Screenshot Folgendes:
- 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.
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.
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“. & „www-02“ und starten eine Sitzung pro Instanz.
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 |
| ||
Version, Protokoll, Länge |
| ||
Src-IP-Adresse |
|
| |
DST-IP |
|
| |
Src-Anschluss |
|
| |
DST-Anschluss |
|
| |
TLV-Typ (PP2_TYPE_GCP) |
| ||
TLV-Länge |
| ||
pscConnectionId |
|
|
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“
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“
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