Explizite Verkettung von GCP L7-Load-Balancern mit PSC

1. Einführung

Die Private Service Connect-Netzwerk-Endpunktgruppe (NEG) unterstützt die Verkettung eines internen HTTPS-Load-Balancers mit einem externen HTTPS-Load-Balancer. Dadurch werden verteilte Systemdiagnosen und Datenebenen-Traffic für On-Prem-Umgebungen mithilfe von vom Kunden definierten Bereichen bereitgestellt. Außerdem werden mit dieser Topologie auch mehrere VPCs unterstützt, die über mehrere regionale Interconnects mit On-Prem verbunden sind.

In diesem Codelab wird gezeigt, wie Sie diese End-to-End-Lösung basierend auf der Topologie unten konfigurieren. Von links nach rechts haben Kunden vor Ort eine VM, um HTTP-Dienste zu simulieren, Hybridkonnektivität (HA-VPN oder Interconnect) und Hybrid-NEG zu nutzen, um sie über einen internen HTTPS-Load-Balancer verfügbar zu machen. PSC verwendet interne HTTPS-Load-Balancer als Dienstanhänge. Die PSC-NEG verwendet die Anhänge als Back-End-Dienst, der für den externen HTTPS-LB bereitgestellt wird. Internetnutzer können das globale Netzwerk von Google verwenden, um den Zugriff auf lokale HTTP-Dienste zu beschleunigen.

e3f26d8497323a42.png

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

Lerninhalte

  • Interner HTTPS-Load-Balancer mit Hybrid-NEG und verteilter Systemdiagnose
  • PSC-Dienstanhang mit internem HTTPS-Load-Balancer
  • Einrichtung von PSC-Netzwerk-Endpunktgruppen
  • PSC-NEG mit externem HTTPS-Load-Balancer bereitstellen

Voraussetzungen

  • Kenntnisse der Hybridkonnektivität, z. B. HA VPN
  • Kenntnisse des internen/externen HTTPS-Load-Balancing
  • Kenntnisse von Private Service Connect

2. Hinweis

Hinweis: Im Codelab werden Konfigurations- und Validierungsschritte basierend auf der abgebildeten Topologie angeboten. Passen Sie das Verfahren nach Bedarf an die Anforderungen Ihrer Organisation an. IAM-Berechtigungen sind nicht Teil dieses Codelabs.

In diesem Codelab wird ein Projekt verwendet, um den gesamten Prozess zu simulieren. Mehrere Projekte werden ebenfalls unterstützt.

Einzelnes Projekt – Projekt aktualisieren, um Ersteller- und Verbrauchernetzwerk 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]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

3. On-Prem-Ressourcen erstellen

Im folgenden Abschnitt richten wir eine lokale VPC und VMs ein, um die lokalen Dienste des Kunden zu simulieren.

VPC-Netzwerk

Über 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

Firewallregeln erstellen

Der interne HTTPS-Load-Balancer unterstützt verteilte Systemdiagnosen. 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 Backend-Systemdiagnosen und Data-Plane-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-Prem-VM-Instanzen erstellen

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

Instanz www01 über 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 auf Nginx zu installieren. Laden Sie die Datei mit dem öffentlichen und privaten Schlüssel für den nächsten Schritt herunter. Sie müssen TCP-Port 80 vorübergehend für das Internet öffnen, um das Zertifikat zu generieren.

Prüfen Sie, ob für diese VM ein öffentlich auflösbarer Domainname vorhanden ist. Fügen Sie beispielsweise in Cloud DNS einen 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 Konsole von VM www01 der Anleitung, um Zertifikate auf Nginx zu installieren und eine Kopie von fullchain.pem und private.pem für die folgenden Schritte zu erstellen.

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. VPC-Netzwerk für Ersteller erstellen

Hinweis: Die Konfiguration von Hybridnetzwerken ist in dieser Konfiguration NICHT enthalten.

VPC-Netzwerk

Über Cloud Shell

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

Subnetz erstellen

Über 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

Über 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 VPC und der Producer-VPC zu implementieren. Behalten Sie die Standardkonfiguration des Cloud Routers bei. Wir müssen 130.211.0.0/22 und 35.191.0.0/16 nicht in BGP-Advertisements aufnehmen.

6. Hybrid-NEG für Produzenten erstellen

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

Über 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( Dokumentation). Wenn wir veröffentlichte Dienste verwenden, müssen wir den internen HTTPS-Load-Balancer verwenden und den globalen Zugriff auf Weiterleitungsregeln aktivieren.

Erstellen Sie die regionale Systemdiagnose in Cloud Shell.

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

Erstellen Sie den Backend-Dienst in Cloud Shell und fügen Sie die hybride 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 über die 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. Zwei Zertifikatdateien werden von der VM heruntergeladen.

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

HTTPS-Zielproxy über Cloud Shell 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. Producer-VM-Instanz erstellen

Erstellen Sie eine Ersteller-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, erstellen Sie eine Firewallregel, die:

Über 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 in der Konsolen-VM des Producers [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. Der HTTP-Statuscode 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

HTTPS-Dienstanhang über Cloud Shell erstellen

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

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 im Erstellernetzwerk definierten Dienstanhang.

VPC-Netzwerk

Über Cloud Shell

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

Subnetz erstellen

Über 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 der vorherigen https-Dienstanlage und fügen Sie ihn in die Parameter --psc-target-service ein.

Ü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

Nachdem PSC NEG erfolgreich eingerichtet wurde, sehen Sie in der Benutzeroberfläche unter Private Service Connect -> Published Services, dass die veröffentlichte ilbserviceattach-Verbindung jetzt eine Weiterleitungsregel enthält.

320741b7dedc7984.png

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

Erstellen Sie einen externen HTTPS-Load-Balancer und verwenden Sie PSC-NEGs als Backend-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 mit curl auf https://www01.yinghli.demo.altostrat.com zu.

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

Bereinigungsschritte für das Producer-Netzwerk

Hinweis: Die Bereinigungsschritte zeigen nur die Load Balancer- und PSC-bezogene Konfiguration. VPC und Hybridkonnektivität sind nicht enthalten.

Lab-Komponenten über eine einzelne Cloud Shell im Terminal löschen

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 von PSC-Netzwerk-Endpunktgruppen
  • PSC-NEG mit externem HTTPS-Load-Balancer bereitstellen