Private Service Connect – Consumer HTTP(S) Service Controls für globale XLB zu verwalteten Diensten verwenden

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.

bbca972cf488ece.png

3. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

55efc1aaa7a4d3ad.png

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

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

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.