1. Einführung
Mit Private Service Connect kann ein Dienstersteller einem Dienstnutzer Dienste anbieten. Ein VPC-Netzwerk des Diensterstellers kann mehrere Dienstnutzer unterstützen.
Es gibt zwei Arten von Private Service Connect-Endpunkten, die eine Verbindung zu einem veröffentlichten Dienst herstellen können:
- Private Service Connect-Endpunkt (basierend auf einer Weiterleitungsregel)
Bei diesem Endpunkttyp stellen Nutzer eine Verbindung zu einer von ihnen definierten internen IP-Adresse her. Private Service Connect führt Network Address Translation (NAT) aus, um die Anfrage an den Dienstersteller weiterzuleiten.
- Private Service Connect-Endpunkt mit HTTP(S)-Dienststeuerung für Nutzer (basierend auf einem globalen externen HTTP(S)-Load-Balancer)
Bei diesem Endpunkttyp stellen Nutzer eine Verbindung zu einer externen IP-Adresse her. Private Service Connect verwendet eine Netzwerk-Endpunktgruppe, um die Anfrage an den Dienstersteller weiterzuleiten.
Die Verwendung eines globalen externen HTTP(S)-Load-Balancers zur Durchsetzung von Richtlinien bietet folgende Vorteile:
- Sie können Dienste umbenennen und sie URLs Ihrer Wahl zuordnen.
- Sie können den Load-Balancer so konfigurieren, dass alle Anfragen in Cloud Logging protokolliert werden.
- Sie können vom Kunden verwaltete TLS-Zertifikate verwenden. oder von Google verwaltete Zertifikate.
In diesem Codelab erfahren Sie, wie Sie mithilfe des globalen XLB eine Consumer-HTTP(S)-Servicekontrolle für den Private Service Connect-Endpunkt erstellen, um privat auf einen Dienst in einem anderen Netzwerk zuzugreifen. Dieses PSC-Muster kann mit einem einzelnen Projekt oder separaten Projekten ausgeführt werden. Für dieses Lab verwenden wir ein einzelnes Projekt mit zwei separaten VPCs.
Lerninhalte
- Private Service Connect-Endpunkt mit Consumer HTTP(S) Service Controls mithilfe des globalen XLB erstellen
- Konfigurieren Sie einen verwalteten Dienst, der über einen Dienstanhang verfügbar gemacht wird, um L7-XLB-Verbindungen zu akzeptieren.
- Erstellen Sie ein SSL-Zertifikat und konfigurieren Sie einen Apache-Webserver so, dass er TLS beendet und Traffic auf Port 443 akzeptiert.
- Erstellen Sie eine PSC-NEG.
Voraussetzungen
- Ein Google Cloud-Projekt
- Kenntnisse der Bereitstellung von Instanzen und der Konfiguration von Netzwerkkomponenten
2. Testumgebung
Die Umgebung, die Sie erstellen, besteht aus einem externen HTTP(S)-Load-Balancer und einer PSC-NEG in einer Nutzer-VPC. Die Producer-VPC hostet einen einfachen Apache-Webdienst, der mit HTTPS konfiguriert ist. Sie erstellen einen Backend-Dienst aus dem Apache-Webdienst und stellen diesem Backend-Dienst einen internen TCP-Load-Balancer vor, der mit einem PSC-Dienstanhang konfiguriert ist.
3. Einrichtung und Anforderungen
Umgebung für das selbstbestimmte Lernen einrichten
- Melden Sie sich in der Google 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.
- Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
- Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als
PROJECT_ID
identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde. - Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. 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 Google Cloud Console rechts oben 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.
4. 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-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
Alle erforderlichen Dienste aktivieren
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com
5. Producer-VPC, Subnetz und Firewallregeln einrichten
VPC-Netzwerk
Aus Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Subnetze erstellen
Auf der Produzentenseite ist ein Subnetz erforderlich, um die Network Address Translation (NAT) für PSC durchzuführen. Der Zweck ist PRIVATE_SERVICE_CONNECT. Dies bedeutet, dass dieses Subnetz nicht zum Bereitstellen von Arbeitslasten verwendet werden kann.
Aus Cloud Shell
gcloud compute networks subnets create producer-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Wir werden zwei Subnetze in der Producer-VPC bereitstellen. Der erste, der den Producer-Dienst bereitstellt, und eine weitere Person in einer anderen Region, um eine Client-VM bereitzustellen, um die Konnektivität zum Dienst über den globalen Zugriff auf dem internen TCP-Load-Balancer zu testen.
Aus Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/24 \ --region=$region
Aus Cloud Shell
gcloud compute networks subnets create client-subnet \ --network=producer-vpc \ --range=10.0.1.0/24 \ --region=us-east4
Cloud NAT erstellen
Ein Cloud NAT ist erforderlich, um die richtigen Pakete für unsere Producer-Dienste zu installieren.
Aus Cloud Shell
gcloud compute routers create service-cr \ --region=$region --network=producer-vpc \ --asn=65501
Aus Cloud Shell
gcloud compute routers nats create service-nat-gw \ --router=service-cr \ --router-region=$region \ --nat-custom-subnet-ip-ranges=service-subnet \ --auto-allocate-nat-external-ips
Firewallregeln erstellen
In diesem Lab stellen Sie mit IAP eine Verbindung zu den von Ihnen erstellten Instanzen her. Mit der folgenden Firewallregel können Sie über IAP eine Verbindung zu Instanzen herstellen. Wenn Sie IAP lieber nicht verwenden möchten, können Sie diesen Schritt überspringen. Stattdessen müssen Sie der Instanz öffentliche IP-Adressen hinzufügen und eine Firewallregel erstellen, die eingehenden Traffic über TCP-Port 22 von 0.0.0.0/0 zulässt.
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 allow-ssh-iap \ --network producer-vpc \ --allow tcp:22 \ --source-ranges=35.235.240.0/20
Der Client-Traffic stammt vom globalen externen HTTP(S)-Load-Balancer. Daher muss eine Firewallregel erstellt werden, die diesen Traffic zu den getaggten Zielservern zulässt, auf denen unser Webdienst gehostet wird. Außerdem wird zu Testzwecken die Firewallregel aus dem client-subnet geöffnet.
Aus Cloud Shell
gcloud compute firewall-rules create allow-xlb-client \ --network=producer-vpc \ --direction=ingress \ --allow=tcp:443 \ --target-tags=psc-service \ --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24
Apache-Webdienst erstellen
Wir erstellen einen einfachen Apache-Webdienst, auf dem „PSC-Dienst“ angezeigt wird
Instanzvorlage erstellen
Aus Cloud Shell
gcloud compute instance-templates create producer-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --image-family=debian-10 \ --image-project=debian-cloud \ --tags=psc-service \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
Systemdiagnose für MIG erstellen
Aus Cloud Shell
gcloud compute health-checks create https psc-service-mig-healthcheck \ --port=443 \ --global
Verwaltete Instanzgruppe erstellen
Aus Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=producer-service-template \ --health-check=psc-service-mig-healthcheck
SSL auf Apache-Webservern konfigurieren
Als Nächstes müssen wir auf jedem der Apache-Webserver SSL konfigurieren. Dazu generieren wir ein Zertifikat und fügen es der Apache-Konfiguration hinzu.
Für die Back-End-Dienste muss die SSL-Terminierung konfiguriert werden, da ein interner TCP/UDP-Load-Balancer (L4) für dieses PSC-Muster vor den Dienst gestellt werden muss. Der interne TCP/UDP-Load-Balancer beendet SSL nicht auf der Ebene des Load-Balancers.
Stellen Sie zuerst eine SSH-Verbindung zur ersten VM in Ihrer MIG her. VM-Zone und VM-Name werden pro Umgebung dynamisch zugewiesen. Gehen Sie in der Console zu Compute Engine > VM-Instanzen, um den Namen und die Zone Ihrer Instanzen zu ermitteln.
Aus Cloud Shell
gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>" --tunnel-through-iap --project $project
Als Nächstes erstellen wir das Zertifikat über OpenSSL. Sie werden aufgefordert, folgende Informationen anzugeben: Land, Bundesland/Bundesstaat, Ort, Organisation, Name der Organisationseinheit, Klarname und E-Mail-Adresse. Die einzigen Informationen, die Sie ausfüllen müssen, sollten der Common Name sein, bei dem es sich um einen internen FQDN Ihrer Wahl handeln sollte. Für dieses Lab sollten Sie example.com auswählen.
Aus Cloud Shell
sudo openssl genrsa -out private-key-file.pem 2048
Aus Cloud Shell
cat <<'EOF' >config.txt [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements [extension_requirements] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @sans_list [dn_requirements] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (e.g. server FQDN or YOUR name) emailAddress = Email Address [sans_list] DNS.1 = example.com EOF
Aus Cloud Shell
sudo openssl req -new -key private-key-file.pem \ -out csr.pem \ -config config.txt
Aus Cloud Shell
sudo openssl x509 -req \ -signkey private-key-file.pem \ -in csr.pem \ -out cert.cert \ -extfile config.txt \ -extensions extension_requirements \ -days 10
Jetzt aktualisieren wir die Apache-Konfigurationsinformationen mit den neuen Zertifikatdetails.
sudo vi /etc/apache2/sites-enabled/default-ssl.conf
Fügen Sie unter ServerAdmin eine Zeile hinzu, die lautet:
ServerName example.com
Aktualisieren Sie „SSLCertificateFile“ und „SSLCertificateKeyFile“ den Speicherort der Datei „cert.cert“ und die Speicherorte „private-key-file.pem“ auf Ihrer VM. Hier ein Beispiel: Vergiss nicht, <profile> zu aktualisieren durch Ihren Verzeichnisnamen.
SSLCertificateFile /home/<profile>/cert.cert SSLCertificateKeyFile /home/<profile>/private-key-file.pem
Schließen Sie den Editor und starten Sie Apache neu.
sudo a2enmod ssl sudo systemctl restart apache2
Beenden Sie die Instanz und wiederholen Sie dieselben Schritte für die andere Instanz in der verwalteten Instanzgruppe.
6. Producer-Dienst erstellen
Als Nächstes erstellen wir die Load-Balancer-Komponenten für den Dienst.
Erstellen Sie die Systemdiagnose für den Load-Balancer.
Aus Cloud Shell
gcloud compute health-checks create https service-lb-healthcheck \ --port=443 \ --region=$region
Erstellen Sie den Back-End-Dienst.
Aus Cloud Shell
gcloud compute backend-services create psc-backend-service \ --load-balancing-scheme=internal \ --protocol=TCP \ --region=$region \ --health-checks=service-lb-healthcheck \ --health-checks-region=$region gcloud compute backend-services add-backend psc-backend-service \ --region=$region \ --instance-group=psc-service-mig
Erstellen Sie die Weiterleitungsregel. Beachten Sie, dass die Weiterleitungsregel auf Port 443 und mit globalem Zugriff konfiguriert sein muss. Dies ist erforderlich, damit dieses PSC-Muster funktioniert.
Aus Cloud Shell
gcloud compute forwarding-rules create producer-fr \ --region=$region \ --load-balancing-scheme=internal \ --network=producer-vpc \ --subnet=service-subnet \ --address=10.0.0.100 \ --ip-protocol=TCP \ --ports=443 \ --backend-service=psc-backend-service \ --backend-service-region=$region \ --allow-global-access
7. Dienst testen
Bevor wir den Dienstanhang erstellen, erstellen wir einen Client in einer anderen Region, um den mit globalen Zugriff konfigurierten Load-Balancer und den Apache-Dienst zu testen, der für die Beendigung von TLS konfiguriert ist.
Aus Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=client-subnet \ --no-address
SSH-Verbindung mit der Instanz herstellen
Aus Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
Testen Sie den Apache-Dienst, indem Sie über den Load-Balancer eine Verbindung über 443 herstellen.
curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443
ERWARTETES ERGEBNIS
PSC Service
8. Dienstanhang erstellen
Aus Cloud Shell
gcloud compute service-attachments create pscservice \ --region=$region \ --producer-forwarding-rule=producer-fr \ --connection-preference=ACCEPT-AUTOMATIC \ --nat-subnets=producer-nat-subnet
Notieren Sie sich den URI des Dienstanhangs, da Sie ihn im nächsten Schritt für die Endpunktkonfiguration benötigen. Sie können sie abrufen, indem Sie Folgendes in Cloud Shell ausführen:
Aus Cloud Shell
gcloud compute service-attachments describe pscservice --region $region
Kopieren Sie den URI ab /projects.
Beispiel: /projects/<IHRE_PROJEKT-ID>/regions/us-central1/serviceAttachments/pscservice
9. Einrichtung von VPC und Subnetz des Nutzers
VPC-Netzwerk
Aus Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Subnetz erstellen
Auf der Nutzerseite ist ein Subnetz erforderlich, in dem die Private Service Connect-Netzwerk-Endpunktgruppe (NEG) bereitgestellt wird.
Aus Cloud Shell
gcloud compute networks subnets create psc-neg-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.100.200.0/24 \ --purpose=private
10. Private Service Connect-Endpunkt erstellen und Verbindung testen
Wir erstellen nun eine PSC-NEG, die mit dem gerade erstellten Dienstanhang verknüpft wird, hängen die PSC-NEG an einen Back-End-Dienst an und verknüpfen den Back-End-Dienst mit einer Weiterleitungsregel.
Halten Sie den URI des Dienstanhangs bereit, den Sie im letzten Schritt notiert haben. Ersetzen Sie die URL unten durch Ihren URI.
Aus Cloud Shell
gcloud beta compute network-endpoint-groups create xlb-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \ --region=$region \ --network=consumer-vpc \ --subnet=psc-neg-subnet
Erstellen Sie die öffentliche XLB-IP-Adresse und rufen Sie die tatsächliche zugewiesene IP-Adresse für spätere Tests ab.
Aus Cloud Shell
gcloud compute addresses create xlb-psc-address \ --ip-version=IPv4 --global gcloud compute addresses describe xlb-psc-address --format="get(address)" --global
Als Nächstes erstellen wir den PSC-Endpunkt – in diesem Fall in einem externen Load Balancer.
Aus Cloud Shell
gcloud beta compute backend-services create pscneg-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global
Aus Cloud Shell
gcloud beta compute backend-services add-backend pscneg-backend-service \ --network-endpoint-group=xlb-psc-neg \ --network-endpoint-group-region=$region \ --global
Aus Cloud Shell
gcloud beta compute url-maps create xlb-psc-map \ --default-service=pscneg-backend-service \ --global
Aus Cloud Shell
gcloud beta compute target-http-proxies create psc-http-proxy \ --url-map=xlb-psc-map
Aus Cloud Shell
gcloud beta compute forwarding-rules create xlb-psc-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=xlb-psc-address \ --target-http-proxy=psc-http-proxy \ --ports=80 \ --global
Warten Sie 5 bis 7 Minuten und geben Sie dann die mit xlb-psc-address verknüpfte IP-Adresse in die Adressleiste Ihres Browsers ein.
Wenn „PSC-Dienst“ angezeigt wird, haben Sie die Lösung richtig konfiguriert.
11. Bereinigungsschritte
Löschen Sie die Lab-Komponenten in einem einzelnen Cloud Shell-Terminal.
gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet gcloud beta compute target-http-proxies delete psc-http-proxy --quiet gcloud beta compute url-maps delete xlb-psc-map --global --quiet gcloud beta compute backend-services delete pscneg-backend-service --global --quiet gcloud compute addresses delete xlb-psc-address --global --quiet gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet gcloud compute networks delete consumer-vpc --quiet gcloud compute service-attachments delete pscservice --region $region --quiet gcloud compute instances delete vm-client --zone=us-east4-a --quiet gcloud compute forwarding-rules delete producer-fr --region $region --quiet gcloud compute backend-services delete psc-backend-service --region $region --quiet gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet gcloud compute instance-templates delete producer-service-template --quiet gcloud compute firewall-rules delete allow-xlb-client --quiet gcloud compute firewall-rules delete allow-ssh-iap --quiet gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet gcloud compute routers delete service-cr --region $region --quiet gcloud compute networks subnets delete client-subnet --quiet gcloud compute networks subnets delete service-subnet --quiet gcloud compute networks subnets delete producer-nat-subnet --quiet gcloud compute networks delete producer-vpc --quiet
12. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs.
Behandelte Themen
- Private Service Connect-Endpunkt mit Consumer HTTP(S) Service Controls mithilfe des globalen XLB erstellen
- Konfigurieren Sie einen verwalteten Dienst, der über einen Dienstanhang verfügbar gemacht wird, um L7-XLB-Verbindungen zu akzeptieren.
- Erstellen Sie ein SSL-Zertifikat und konfigurieren Sie einen Apache-Webserver so, dass er TLS beendet und Traffic auf Port 443 akzeptiert.
- Erstellen Sie eine PSC-NEG.