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. Dadurch werden verteilte Systemdiagnosen und Traffic auf der Datenebene zur lokalen Umgebung über benutzerdefinierte Bereiche 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 dieses End-to-End-System basierend auf 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 hybride 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 Google-Netzwerk verwenden, um den Zugriff auf lokale HTTP-Dienste zu beschleunigen.

e3f26d8497323a42.png

Abbildung 1. Private Service Connect verwendet Netzwerkendpunktgruppen und Dienstanhänge, um den externen HTTPS-Load-Balancer mit dem internen HTTPS-Load-Balancer zu verbinden und das Backend auf On-Prem zu erweitern.

Aufgaben in diesem Lab

  • Interner HTTPS-Load-Balancer mit Hybrid-NEG und verteilter Systemdiagnose
  • PSC-Dienstanhang mit internem HTTPS-Load-Balancer
  • Einrichtung einer PSC-Netzwerk-Endpunktgruppe
  • PSC-NEG mit externem HTTPS-Load-Balancer verfügbar machen

Voraussetzungen

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

2. Hinweis

Hinweis: Codelab bietet Konfigurations- und Validierungsschritte, die auf der dargestellten Topologie basieren. Ändern Sie das Verfahren nach Bedarf, um die Anforderungen Ihres Unternehmens zu erfüllen. IAM-Berechtigungen sind im Codelab nicht enthalten.

Für Codelab wird ein Projekt verwendet, um den gesamten Prozess zu simulieren. Es werden auch mehrere Projekte 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 eine lokale VPC und VMs ein, um lokale Dienste für Kunden zu simulieren.

VPC-Netzwerk

Von Cloud Shell

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

Subnetz erstellen

Von 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

Firewallregeln erstellen.

Der interne HTTPS-Load-Balancer unterstützt die verteilte Systemdiagnose. Firewallregeln müssen nur den IP-Bereich des Proxy-Subnetzes zulassen. Folgen Sie dieser Anleitung, um Ihre Projekte auf die Zulassungsliste zu setzen.

Erstellen Sie in Cloud Shell eine Firewallregel, um Back-End-Systemdiagnosen und Datenebenen-Traffic von 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. Lokale VM-Instanzen erstellen

Diese VM simuliert lokale Dienste und muss mit dem internen HTTPS-Load-Balancer über eine Hybrid-NEG verfügbar gemacht werden.

Erstellen Sie in Cloud Shell die Instanz www01.

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 auf Nginx zu installieren. Laden Sie die öffentliche und die private Schlüsseldatei 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 auf Nginx und erstellen Sie für die folgenden Schritte eine Kopie von „fullchain.pem“ und „private.pem“.

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

Von Cloud Shell

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

Subnetz erstellen

Von 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

Von 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 der lokalen und der 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. Producer-Hybrid-NEG erstellen

Erstellen Sie eine Hybridnetzwerk-Endpunktgruppe und fügen Sie der NEG die lokale VM-IP:PORT hinzu.

Von 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 Producer erstellen

Derzeit unterstützt der externe HTTPS-Load-Balancer nur das HTTPS-Protokoll zur PSC-NEG( Dokumentation). 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 in Cloud Shell die regionalen SSL-Zertifikate. 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

In Cloud Shell eine interne statische IP-Adresse reservieren und die Weiterleitungsregel erstellen

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. Producer-VM-Instanz erstellen

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

Von 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:

Von 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

Rufen Sie von der Producer-VM-Konsole aus [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) auf und lösen Sie die IP-Adresse des internen HTTPS-Load-Balancers auf. HTTP 200 hat angezeigt, 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

Von 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 Produzentennetzwerk erfolgt über den Dienstanhang, der im Produzentennetzwerk definiert ist.

VPC-Netzwerk

Von Cloud Shell

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

Subnetz erstellen

Von 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-Dienstanhangs und fügen Sie die Parameter --psc-target-service ein

Von 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

Nach erfolgreicher Einrichtung der PSC-NEG über die UI, gefolgt von Private Service Connect -> Published Services -> Beachten Sie, dass die veröffentlichte ilbserviceattach-Verbindung jetzt mit 1 Weiterleitungsregel angegeben wird.

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

Von 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-Dienstanhang mit internem HTTPS-Load-Balancer
  • Einrichtung einer PSC-Netzwerk-Endpunktgruppe
  • PSC-NEG mit externem HTTPS-Load-Balancer verfügbar machen