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