Private Service Connect mit automatischer DNS-Konfiguration

1. Einführung

Bei Private Service Connect mit automatischer DNS-Konfiguration werden Service Directory und Cloud DNS verwendet, um automatisch DNS-Einträge zu erstellen, die mit den IP-Adressen des Private Service Connect-Endpunkts des Nutzers programmiert sind.

Was Sie erstellen

In diesem Codelab erstellen Sie eine umfassende Private Service Connect-Architektur, die die Verwendung von automatischem DNS veranschaulicht, wie in Abbildung 1 dargestellt.

Automatisches DNS wird durch Folgendes ermöglicht:

  1. Der Dienstanhang des Erstellers initiiert automatisches DNS, indem er beim Erstellen des Private Service Connect-Dienstanhangs eine eigene öffentliche Domain mit dem Flag „–domain-names“ bereitstellt.
  2. Der Nutzer definiert einen Endpunktnamen.
  3. Automatisches DNS erstellt sowohl eine DNS-Zone goog-psc-default-us-central1 als auch einen DNS-Namen cosmopup.net sowie einen Service Directory-Eintrag, der aus dem Endpunktnamen des Nutzers besteht.

Der Vorteil von automatischem DNS wird in (4) veranschaulicht, wo ein Endnutzer über DNS, FQDN stargazer.cosmopup.net, mit dem Endpunkt des Nutzers kommunizieren kann.

Abbildung 1

5e26a358454d1336.png

Lerninhalte

  • Internen HTTP(S)-Load-Balancer erstellen
  • Dienstanhang mit automatischem DNS erstellen
  • Private Service Connect-Dienst des Erstellers einrichten
  • Über automatisches DNS auf einen Endpunkt des Nutzers zugreifen

Voraussetzungen

  • Google Cloud-Projekt
  • Eine öffentliche Domain, deren Inhaber Sie sind

2. Hinweis

Projekt für das Codelab aktualisieren

In diesem Codelab werden $variables verwendet, um die Implementierung der gcloud-Konfiguration in Cloud Shell zu erleichtern.

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

3. Einrichtung des Erstellers

VPC des Erstellers erstellen

Führen Sie in Cloud Shell folgende Schritte aus:

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

Subnetze des Erstellers erstellen

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

IP-Adresse für den internen Load-Balancer reservieren

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=load-balancer-subnet \
    --purpose=GCE_ENDPOINT

Zugewiesene IP-Adresse ansehen

Verwenden Sie den Befehl compute addresses describe, um die zugewiesene IP-Adresse aufzurufen.

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

Regionale Proxy-Subnetze erstellen

Die Proxyzuweisung erfolgt auf VPC-Netzwerkebene, nicht auf Load-Balancer-Ebene. Sie müssen in jeder Region eines virtuellen Netzwerks (VPC), in dem Sie Envoy-basierte Load-Balancer verwenden, ein Nur-Proxy-Subnetz anlegen. Wenn Sie mehrere Load-Balancer in derselben Region und im selben VPC-Netzwerk bereitstellen, nutzen sie dasselbe Nur-Proxy-Subnetz für das Load-Balancing.

  1. Ein Client stellt eine Verbindung zur IP-Adresse und zum Port der Weiterleitungsregel des Load-Balancers her.
  2. Jeder Proxy überwacht die IP-Adresse und den Port, die in der Weiterleitungsregel des entsprechenden Load-Balancers angegeben sind. Einer der Proxys empfängt und beendet die Netzwerkverbindung des Clients.
  3. Der Proxy stellt eine Verbindung zur entsprechenden Back-End-VM her, die durch die URL-Zuordnung und die Back-End-Dienste des Load-Balancers bestimmt wird.

Nur-Proxy-Subnetze müssen unabhängig davon erstellt werden, ob Ihr VPC-Netzwerk im automatischen oder im benutzerdefinierten Modus arbeitet. Ein Nur-Proxy-Subnetz muss mindestens 64 IP-Adressen bereitstellen. Das entspricht einer Präfixlänge von maximal /26. Als Subnetzgröße wird /23 (512 Nur-Proxy-Adressen) empfohlen.

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

Private Service Connect-NAT-Subnetze erstellen

Erstellen Sie ein oder mehrere dedizierte Subnetze für die Verwendung von Private Service Connect. Wenn Sie die Google Cloud Console zum Veröffentlichen eines Dienstes verwenden, können Sie die Subnetze während dieses Verfahrens erstellen. Erstellen Sie das Subnetz in derselben Region wie den Load-Balancer des Dienstes. Sie können ein reguläres Subnetz nicht in ein Private Service Connect-Subnetz umwandeln.

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

Firewallregeln des Erstellers erstellen

Konfigurieren Sie Firewallregeln, um Traffic zwischen dem Private Service Connect-NAT-Subnetz und dem Nur-Proxy-Subnetz des ILB zuzulassen.

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud compute --project=$projectname firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

Erstellen Sie in Cloud Shell die Firewallregel fw-allow-health-check, damit die Google Cloud-Systemdiagnosen den Dienst des Erstellers (Back-End-Dienst) auf dem TCP-Port 80 erreichen können.

gcloud compute firewall-rules create fw-allow-health-check \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp:80

Erstellen Sie eine Firewallregel zum Zulassen von eingehendem Traffic für das Nur-Proxy-Subnetz, damit der Load-Balancer mit Backend-Instanzen auf dem TCP-Port 80 kommunizieren kann.

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

Cloud Router- und NAT-Konfiguration

Cloud NAT wird im Codelab für die Installation von Softwarepaketen verwendet, da die VM-Instanz keine externe IP-Adresse hat.

Erstellen Sie in Cloud Shell den Cloud Router.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

Erstellen Sie in Cloud Shell das NAT-Gateway.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Konfiguration der Instanzgruppe

Im folgenden Abschnitt erstellen Sie die Compute Engine-Instanz und die nicht verwaltete Instanzgruppe. In späteren Schritten wird die Instanzgruppe als Back-End-Dienst des Load-Balancers verwendet.

Erstellen Sie in Cloud Shell die regionale Systemdiagnose, die an den Dienst des Erstellers weitergegeben wird.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

Erstellen Sie in Cloud Shell die nicht verwaltete Instanzgruppe.

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

Load-Balancer konfigurieren

In den folgenden Schritten konfigurieren Sie den internen HTTP Load-Balancer , der in einem späteren Schritt als Dienstanhang veröffentlicht wird.

Erstellen Sie in Cloud Shell die regionale Systemdiagnose.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

Erstellen Sie in Cloud Shell den Back-End-Dienst.

 gcloud compute backend-services create l7-ilb-backend-service \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

Fügen Sie in Cloud Shell dem Back-End-Dienst Back-Ends hinzu.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

Erstellen Sie in Cloud Shell die URL-Zuordnung, um eingehende Anfragen an den Back-End-Dienst weiterzuleiten.

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

Erstellen Sie den HTTP-Zielproxy.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

Erstellen Sie eine Weiterleitungsregel, um eingehende Anfragen an den Proxy weiterzuleiten. Verwenden Sie nicht das Nur-Proxy-Subnetz, um die Weiterleitungsregel zu erstellen.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --target-http-proxy-region=us-central1

4. Load-Balancer validieren

Gehen Sie in der Cloud Console zu Netzwerkdienste → Load-Balancing → Load-Balancer. Beachten Sie die erfolgreiche Systemdiagnose für den Back-End-Dienst.

881567cc11627009.png

Wenn Sie l7-ilb-map auswählen, wird die Frontend-IP-Adresse angezeigt, die mit der IP-Adresse übereinstimmen sollte, die Sie in einem früheren Schritt mit grep abgerufen haben. Außerdem wird der Back-End-Dienst identifiziert.

bab89b0a7b4f95e9.png

5. Private Service Connect-Dienstanhang erstellen

Dienstanhang erstellen

Erstellen Sie in Cloud Shell den Dienstanhang. Achten Sie darauf, am Ende des Domainnamens einen Punkt hinzuzufügen.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

Optional:Wenn Sie eine freigegebene VPC verwenden, erstellen Sie den Dienstanhang im Dienstprojekt.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

Gehen Sie zu Netzwerkdienste → Private Service Connect , um den neu erstellten Dienstanhang aufzurufen.

d27fee9073dbbe2.png

Wenn Sie published-service auswählen, werden weitere Details angezeigt, darunter der URI des Dienstanhangs, der vom Nutzer verwendet wird, um eine Private Service Connect-Verbindung herzustellen, und der Domainname.

503df63730c62df2.png

Details zum Dienstanhang :

projects/<project name>/regions/us-central1/serviceAttachments/published-service

6. Einrichtung des Nutzers

Nutzer-APIs aktivieren

Führen Sie in Cloud Shell folgende Schritte aus:

gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com

VPC-Netzwerk des Nutzers erstellen

Führen Sie in Cloud Shell folgende Schritte aus:

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

Subnetze des Nutzers erstellen

Erstellen Sie in Cloud Shell das Subnetz für die Testinstanz.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

Erstellen Sie in Cloud Shell ein Subnetz für den Endpunkt des Nutzers.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

Endpunkt des Nutzers (Weiterleitungsregel) erstellen

Erstellen Sie in Cloud Shell die statische IP-Adresse, die für den Endpunkt des Nutzers verwendet wird.

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

Wir verwenden den zuvor generierten URI des Dienstanhangs, um den Endpunkt des Nutzers zu erstellen.

Erstellen Sie in Cloud Shell den Endpunkt des Nutzers.

gcloud compute forwarding-rules create stargazer --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$projectname/regions/us-central1/serviceAttachments/published-service

7. Verbindung im VPC-Netzwerk des Nutzers validieren

Prüfen Sie im VPC-Netzwerk des Nutzers, ob die Private Service Connect-Verbindung erfolgreich war. Gehen Sie dazu zu Netzwerkdienste → Private Service Connect → Verbundene Endpunkte. Beachten Sie die erstellte stargazer-Verbindung und die entsprechende IP-Adresse, die wir zuvor erstellt haben.

c60812433c3e1676.png

Wenn Sie psc-consumer-1 auswählen, werden Details einschließlich des URI des Dienstanhangs angezeigt.

14d3e3b1e0aee3c2.png

8. Verbindung im VPC-Netzwerk des Erstellers validieren

Prüfen Sie im VPC-Netzwerk des Erstellers, ob die Private Service Connect-Verbindung erfolgreich war. Gehen Sie dazu zu Netzwerkdienste → Private Service Connect → Veröffentlichter Dienst. Die veröffentlichte Dienstverbindung zeigt jetzt eine Weiterleitungsregel (Verbindungsendpunkt) an.

911dbd7421bcfd3a.png

9. Automatische DNS-Konfiguration validieren

Sehen wir uns die DNS- und Service Directory-Konfiguration an.

Cloud DNS-Konfiguration

Gehen Sie zu Netzwerkdienste → Cloud DNS → Zonen. Die Zone goog-psc-default-us-central & und der DNS-Name cosmopup.net. werden automatisch generiert.

4395e7b33fc42faa.png

DNS- und Service Directory-Konfiguration ansehen

Wenn Sie den Zonennamen auswählen, können Sie sehen, wie Service Directory in Cloud DNS eingebunden ist.

e4fe44d945b20451.png

Service Directory-Konfiguration

Gehen Sie zu Netzwerkdienste → Service Directory.

Erinnern Sie sich an den Endpunktnamen des Nutzers stargazer? Er wird automatisch in Service Directory programmiert, sodass wir den Endpunkt des Nutzers mit dem FQDN stargazer.goog-psc-default–us-central1 erreichen können.

602deab65b5ac315.png

10. Nutzerzugriff auf den Dienst des Erstellers validieren

Im VPC-Netzwerk des Nutzers erstellen wir eine VM, um die Verbindung zum veröffentlichten Dienst zu testen, indem wir auf den Endpunkt des Nutzers stargazer.cosmopup.net zugreifen.

Erstellen Sie in Cloud Shell die Testinstanz in der VPC des Nutzers.

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --no-address

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

  • für alle VM-Instanzen gilt, die über IAP zugänglich sein sollen.
  • eingehenden Traffic aus dem IP-Bereich 35.235.240.0/20 zulässt. Dieser Bereich enthält alle IP-Adressen, die IAP für die TCP-Weiterleitung verwendet.

Erstellen Sie in Cloud Shell die IAP-Firewallregel.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Melden Sie sich in Cloud Shell mit IAP in consumer-vm an, um die Verbindung zum Dienst des Erstellers zu validieren, indem Sie einen curl-Befehl ausführen. Wiederholen Sie den Vorgang, wenn ein Zeitlimit überschritten wird.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

Führen Sie einen curl-Befehl aus, um die Verbindung zum Dienst des Erstellers zu validieren. Nach der Validierung beenden Sie die VM und kehren Sie zur Cloud Shell-Eingabeaufforderung zurück.

Führen Sie in Cloud Shell einen curl-Befehl für Ihre benutzerdefinierte Domain aus, z. B. stargazer.[custom-domain.com]. In der folgenden Ausgabe wird ein curl-Befehl für stargazer.cosmopup.net ausgeführt.

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

Beenden Sie die VM und kehren Sie zur Cloud Shell-Eingabeaufforderung zurück, um die Bereinigungsaufgaben zu starten.

11. Bereinigen

Löschen Sie in Cloud Shell die Codelab-Komponenten.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet 

gcloud compute networks subnets delete consumer-ep-subnet db1-subnet --region=us-central1 --quiet 

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute networks delete consumer-vpc --quiet 

gcloud compute service-attachments delete published-service --region=us-central1 --quiet 

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

12. Glückwunsch

Glückwunsch! Sie haben einen Private Service Connect-Endpunkt mit automatischer DNS-Konfiguration erfolgreich konfiguriert und validiert.

Sie haben die Infrastruktur des Erstellers erstellt und einen Dienstanhang mit Registrierung der öffentlichen Domain hinzugefügt. Sie haben gelernt, wie Sie einen Endpunkt des Nutzers im VPC-Netzwerk des Nutzers erstellen, der die Verbindung zum lokalen Dienst mithilfe von automatisch generiertem DNS ermöglicht.

Cosmopup findet Codelabs toll!

8c2a10eb841f7b01.jpeg

Nächste Schritte

Sehen Sie sich einige dieser Codelabs an:

Weitere Informationen und Videos

Referenzdokumente