Explizite Verkettung von GCP L7-Load-Balancern mit PSC

1. Einführung

Network Endpoint Group (NEG) von Private Service Connect unterstützt die Verkettung eines internen HTTPS-Load-Balancers mit einem externen HTTPS-Load-Balancer. So werden verteilte Systemdiagnosen und Datenebenenverkehr an On-Premise-Umgebungen mit benutzerdefinierten Bereichen bereitgestellt. Darüber hinaus werden bei dieser Topologie auch mehrere VPCs unterstützt, die über mehrere regionale InterConnects mit On-Prem verbunden sind.

In diesem Codelab zeigen wir Ihnen, wie Sie diese End-to-End-Konfiguration anhand der folgenden Topologie konfigurieren. Von links nach rechts haben Kunden vor Ort eine VM zur Simulation von HTTP-Diensten, nutzen Hybridkonnektivität (HA-VPN oder InterConnect) und Hybrid-NEG, um sie über einen internen HTTPS-Load-Balancer verfügbar zu machen. PSC verwendet den internen HTTPS-Load-Balancer als Dienstanhang. Die PSC-NEG verwendet die Anhänge als Back-End-Dienst, der für den externen HTTPS-Load-Balancer verfügbar gemacht wird. Internetnutzer können das globale Netzwerk von Google nutzen, um den Zugriff auf On-Premise-HTTP-Dienste zu beschleunigen.

e3f26d8497323a42.png

Abbildung 1. Private Service Connect verwendet Netzwerk-Endpunktgruppen und Dienstanhänge, um externe HTTPS-Load Balancer mit internen HTTPS-Load Balancern zu verbinden und das Backend auf On-Premise-Umgebungen auszuweiten.

Aufgaben in diesem Lab

  • Interner HTTPS-Load Balancer mit Hybrid-NEG und verteilter Systemdiagnose
  • PSC-Dienstanhänge mit internem HTTPS-Load Balancer
  • PSC-Netzwerk-Endpunktgruppe einrichten
  • PSC-NEG mit externem HTTPS-Load-Balancer verfügbar machen

Voraussetzungen

  • Kenntnisse über Hybridkonnektivität, z. B. HA-VPN
  • Kenntnisse im Bereich internes/externes HTTPS-Load Balancing
  • Kenntnisse zu Private Service Connect

2. Hinweis

Hinweis: Das Codelab bietet Konfigurations- und Validierungsschritte basierend auf der dargestellten Topologie. Passen Sie das Verfahren nach Bedarf an die Anforderungen Ihrer Organisation an. IAM-Berechtigungen sind im Codelab nicht enthalten.

Für Codelab wird ein Projekt verwendet, um den gesamten Prozess zu simulieren. Auch mehrere Projekte werden unterstützt.

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
echo $prodproject

3. Lokale Ressourcen erstellen

Im folgenden Abschnitt richten wir ein On-Premise-VPC und VMs ein, um On-Premise-Dienste von Kunden zu simulieren.

VPC-Netzwerk

Aus Cloud Shell

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

Subnetz erstellen

Über Cloud Shell

gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1

Erstellen Sie Firewallregeln.

Interne HTTPS-Load Balancer unterstützen die verteilte Systemdiagnose. In den Firewallregeln muss nur der IP-Bereich des Proxy-Subnetzes zugelassen werden. In diesem Dokument erfahren Sie, wie Sie Ihre Projekte auf die Zulassungsliste setzen.

Erstellen Sie in Cloud Shell eine Firewallregel, um Backend-Systemdiagnosen und Datenebenen-Traffic aus Proxy-Subnetzen zu aktivieren.

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging

Erstellen Sie in Cloud Shell eine Firewallregel, damit IAP eine Verbindung zu Ihren VM-Instanzen herstellen kann:

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

4. On-Premise-VM-Instanzen erstellen

Diese VM simuliert lokale Dienste und muss mit einem internen HTTPS-Load Balancer mit hybrider NEG bereitgestellt werden.

Instanz „www01“ in Cloud Shell erstellen

gcloud compute instances create www01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --metadata=startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install nginx -y
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.nginx-debian.html
sudo systemctl restart nginx'

Im folgenden Abschnitt verwenden wir letsencrypt, um Zertifikate zu generieren und in Nginx zu installieren. Laden Sie die Dateien mit dem öffentlichen und privaten Schlüssel für den nächsten Schritt herunter. Sie müssen TCP-Port 80 vorübergehend mit dem Internet öffnen, um das Zertifikat zu erstellen.

Achten Sie darauf, dass diese VM einen öffentlich aufgelösten Domainnamen hat. Fügen Sie in Cloud DNS beispielsweise den A-Eintrag [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) hinzu und verweisen Sie auf die öffentliche IP-Adresse der VM.

gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"

Folgen Sie in der VM www01-Konsole der Anleitung zum Installieren von Zertifikaten in Nginx und erstellen Sie eine Kopie von „fullchain.pem“ und „private.pem“ für die folgenden Schritte.

sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

5. Producer-VPC-Netzwerk erstellen

Hinweis: Die Hybridnetzwerkkonfiguration ist in dieser Konfiguration NICHT enthalten.

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-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1

Proxy-Subnetz erstellen

Aus Cloud Shell

gcloud compute networks subnets create proxy-subnet-asia-southeast1 \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=asia-southeast1 \
  --network=vpc-demo-producer \
  --range=10.0.3.0/24

Hybridkonnektivität

Folgen Sie der Cloud VPN-Dokumentation, um eine HA-VPN-Verbindung zwischen On-Premises- und Producer-VPC zu implementieren. Behalten Sie die Standardkonfiguration auf dem Cloud Router bei. 130.211.0.0/22, 35.191.0.0/16 muss nicht zu BGP-Advertising hinzugefügt werden.

6. Hybrid-NEG für Produzenten erstellen

Erstellen Sie eine Hybrid-Netzwerk-Endpunktgruppe und fügen Sie der NEG die IP:PORT-Adresse der lokalen VM hinzu.

Aus Cloud Shell

gcloud compute network-endpoint-groups create on-prem-service-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --zone=asia-southeast1-b \
    --network=vpc-demo-producer

gcloud compute network-endpoint-groups update on-prem-service-neg \
    --zone=asia-southeast1-b \
    --add-endpoint="ip=10.0.0.2,port=443"

7. Internen HTTPS-Load Balancer für Produzenten erstellen

Derzeit unterstützt der externe HTTPS-Load Balancer nur das HTTPS-Protokoll für PSC-NEGs (weitere Informationen). Wenn Dienste veröffentlicht werden, müssen Sie den internen HTTPS-Load-Balancer verwenden und den globalen Zugriff für Weiterleitungsregeln aktivieren.

Erstellen Sie in Cloud Shell die regionale Systemdiagnose.

gcloud compute health-checks create https on-prem-service-hc \
    --region=asia-southeast1 \
    --use-serving-port

Erstellen Sie in Cloud Shell den Back-End-Dienst und fügen Sie eine Hybrid-NEG hinzu.

gcloud compute backend-services create on-premise-service-backend \
   --load-balancing-scheme=INTERNAL_MANAGED \
   --protocol=HTTPS \
   --region=asia-southeast1 \
   --health-checks=on-prem-service-hc \
   --health-checks-region=asia-southeast1

gcloud compute backend-services add-backend on-premise-service-backend \
   --network-endpoint-group=on-prem-service-neg \
   --network-endpoint-group-zone=asia-southeast1-b \
   --region=asia-southeast1 \
   --balancing-mode=RATE \
   --max-rate-per-endpoint=100

URL-Zuordnung in Cloud Shell erstellen

gcloud compute url-maps create on-premise-url \
    --default-service on-premise-service-backend \
    --region=asia-southeast1

Erstellen Sie die regionalen SSL-Zertifikate in Cloud Shell. Von der VM werden zwei Zertifikatsdateien heruntergeladen.

gcloud compute ssl-certificates create www01 \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --region=asia-southeast1

In Cloud Shell https-target-proxy erstellen

gcloud compute target-https-proxies create on-premise-httpsproxy \
    --ssl-certificates=www01 \
    --url-map=on-premise-url \
    --url-map-region=asia-southeast1 \
    --region=asia-southeast1

Reservieren Sie in Cloud Shell eine interne statische IP-Adresse und erstellen Sie die Weiterleitungsregel.

gcloud compute addresses create ilbaddress \
  --region=asia-southeast1 \
  --subnet=vpc-demo-asia-southeast1  \
  --addresses=10.0.2.100 

gcloud compute forwarding-rules create https-ilb-psc \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=vpc-demo-producer \
      --subnet=vpc-demo-asia-southeast1  \
      --address=ilbaddress \
      --ports=443 \
      --region=asia-southeast1 \
      --target-https-proxy=on-premise-httpsproxy \
      --target-https-proxy-region=asia-southeast1
      --allow-global-access

8. VM-Instanz für den Produzenten erstellen

Erstellen Sie eine Producer-VM zur Überprüfung.

Über Cloud Shell

gcloud compute instances create test01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

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

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

Rufe über die Konsole der Producer-VM [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) auf und löse die interne IP-Adresse des HTTPS-Load Balancers auf. HTTP 200 gibt an, dass die Konfiguration wie erwartet funktioniert hat.

curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com

* Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache
* Hostname www01.yinghli.demo.altostrat.com was found in DNS cache
*   Trying 10.0.2.100:443...
* Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55865ef982e0)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/7.74.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200 
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:29:38 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google
< 
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

Hinweis: Sie können nicht direkt auf die HTTPS-Dienste der VM 10.0.0.2 zugreifen, da die lokale Firewall nur den Zugriff über das Proxy-Subnetz 10.0.3.0/24 zulässt.

9. PSC-NAT-Subnetz erstellen

Über Cloud Shell

gcloud compute networks subnets create psc-nat-subnet \
--network=vpc-demo-producer \
--region=asia-southeast1 \
--range=10.0.5.0/24 \
--purpose=private-service-connect

10. HTTPS-Dienstanhang erstellen

Erstellen Sie in Cloud Shell den HTTPS-Dienstanhang

gcloud compute service-attachments create ilbserviceattach \
--region=asia-southeast1 \
--producer-forwarding-rule=https-ilb-psc \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=psc-nat-subnet

HTTPS-Dienstanhang validieren

gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1

Name des Dienstanhangs aufzeichnen:

projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach

11. Nutzer-VPC-Netzwerk erstellen

Im folgenden Abschnitt wird die Nutzer-VPC im selben Projekt konfiguriert, es werden aber auch verschiedene Projekte unterstützt. Die Kommunikation zwischen dem Nutzer- und dem Erstellernetzwerk erfolgt über den Dienstanhang, der im Erstellernetzwerk definiert ist.

VPC-Netzwerk

Aus Cloud Shell

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

Subnetz erstellen

Aus Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$prodproject  --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1

12. PSC-Netzwerk-Endpunktgruppe erstellen

PSC-NEG erstellen

Kopieren Sie den Namen des vorherigen https-Dienstes und fügen Sie ihn in die Parameter ein --psc-target-service

Über Cloud Shell

gcloud beta compute network-endpoint-groups create consumerpscneg \
--project=$prodproject \
--region=asia-southeast1 \
--network-endpoint-type=PRIVATE_SERVICE_CONNECT \
--psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \
--network=vpc-demo-consumer \
--subnet=consumer-subnet

Wenn die PSC-NEG erfolgreich eingerichtet wurde, folgen Sie von der Benutzeroberfläche Private Service Connect -> Published Services ->. Beachten Sie, dass die veröffentlichte ilbserviceattach-Verbindung jetzt 1 Weiterleitungsregel anzeigt.

320741b7dedc7984.png

13. Externen HTTPS-Load-Balancer für Nutzer erstellen

Erstellen Sie einen externen HTTPS-Load-Balancer und verwenden Sie die PSC-NEG als Back-End-Dienste( Dokumentation).

Über Cloud Shell

gcloud compute addresses create httpspsclb \
    --ip-version=IPV4 --global

gcloud compute backend-services create consumer-bs \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend consumer-bs \
  --network-endpoint-group=consumerpscneg \
  --network-endpoint-group-region=asia-southeast1 \
  --global

gcloud compute url-maps create consumer-url \
  --default-service=consumer-backend-service \
  --global

gcloud compute ssl-certificates create wwwglobal \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --global

gcloud compute target-https-proxies create consumer-url-target-proxy \
  --url-map=consumer-url \
  --ssl-certificates=wwwglobal

gcloud compute forwarding-rules create consumer-url-forwarding-rule \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --network-tier=PREMIUM \
    --address=httpspsclb \
    --target-https-proxy=consumer-url-target-proxy \
    --ports=443 \
    --global

DNS-Eintrag für www01.yinghli.demo.altostrat.com aktualisieren und auf die öffentliche IP-Adresse des externen HTTPS-Load-Balancers verweisen

gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"

14. Validierung

Rufen Sie auf Ihrem Laptop https://www01.yinghli.demo.altostrat.com mit curl auf.

curl -v https://www01.yinghli.demo.altostrat.com
*   Trying 34.102.178.214:443...
* Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: www01.yinghli.demo.altostrat.com]
* h2h3 [user-agent: curl/8.0.0]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x149019a00)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/8.0.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/2 200
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:48:43 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google, 1.1 google
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

15. Bereinigungsschritte

Schritte zur Bereinigung des Producer-Netzwerks

Hinweis: Bei den Bereinigungsschritten wird nur die Konfiguration des Load-Balancers und des PSC angezeigt. VPC- und Hybridkonnektivität sind nicht enthalten.

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

gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global
gcloud compute target-https-proxies delete consumer-url-target-proxy
gcloud compute ssl-certificates delete wwwglobal --global
gcloud compute url-maps delete consumer-url
gcloud compute backend-services delete consumer-bs --global
gcloud compute addresses delete httpspsclb --global

gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1

gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1
gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1

gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1
gcloud compute addresses delete ilbaddress --region=asia-southeast1
gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1
gcloud compute ssl-certificates delete www01 --region=asia-southeast1
gcloud compute url-maps delete on-premise-url --region=asia-southeast1
gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1
gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1

gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b
gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1

16. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Interner HTTPS-Load-Balancer mit Hybrid-NEG und verteilter Systemdiagnose
  • PSC-Dienstanhänge mit internem HTTPS-Load Balancer
  • PSC-Netzwerk-Endpunktgruppe einrichten
  • PSC-NEG mit externem HTTPS-Load-Balancer verfügbar machen