Beispiel: Private Verbindung für eine MySQL-Instanz

Auf dieser Seite wird anhand eines Beispiels erläutert, wie Sie mit Private Service Connect (PSC) eine Verbindung zwischen Ihrem MySQL-Back-End-System, das sich in einem privaten Netzwerk befindet, und der Integration Connectors-Laufzeit herstellen.

Hinweise

Beachten Sie beim Erstellen eines PSC-Dienstanhangs die folgenden wichtigen Punkte:

  • Der PSC-Dienstanhang und der Load-Balancer sollten sich in verschiedenen Subnetzen innerhalb derselben VPC befinden. Insbesondere sollte sich der Dienstanhang in einem NAT-Subnetz befinden.
  • Software, die auf Ihren Back-End-VMs ausgeführt wird, muss sowohl auf Traffic mit Load-Balancing als auch auf Systemdiagnoseprüfungen reagieren, die an die IP-Adresse jeder Weiterleitungsregel gesendet werden. Die Software muss 0.0.0.0:<port> und nicht eine bestimmte IP-Adresse überwachen, die einer Netzwerkschnittstelle zugewiesen ist. Weitere Informationen finden Sie unter Systemdiagnose.
  • Konfigurieren Sie die Firewallregeln, um den Trafficfluss zu erleichtern.

    Regeln für eingehenden Traffic

    • Traffic aus dem Subnetz des PSC-Dienstanhangs sollte das Subnetz des ILB erreichen.
    • Im Subnetz des internen Load-Balancers sollte dieser Traffic an Ihr Back-End-System senden können.
    • Die Systemdiagnoseprüfung sollte auf Ihr Back-End-System zugreifen können. Die Google Cloud-Systemdiagnoseprüfungen haben einen festen IP-Bereich (35.191.0.0/16, 130.211.0.0/22). Diese IP-Adressen können also Traffic an Ihren Backend-Server senden.

    Regeln für ausgehenden Traffic

    Ausgehender Traffic ist in einem Google Cloud-Projekt standardmäßig aktiviert, sofern keine bestimmten Ablehnungsregeln konfiguriert sind.

  • Alle Google Cloud-Komponenten wie der PSC-Dienstanhang und der Load-Balancer sollten sich in derselben Region befinden.
  • Ihr Backend-System sollte nicht für das öffentliche Netzwerk zugänglich sein, da dies ein Sicherheitsproblem darstellen kann. Achten Sie jedoch in den folgenden Szenarien darauf, dass Ihr Back-End-System Traffic akzeptiert:
    • Passthrough-Load-Balancer (L4-TCP/UDP-ILB): Anfragen von den NAT-IP-Adressen des PSC-Dienstanhangs sollten das Back-End erreichen können. Diese NAT-IP-Adressen werden automatisch generiert. Daher müssen Sie den gesamten IP-Bereich des NAT-Subnetzes zulassen, in dem sich Ihr Dienstanhang befindet. Weitere Informationen finden Sie unter Private Service Connect-Subnetze.
    • Proxybasierte/HTTP(s)-Load-Balancer (L4-Proxy-ILB, L7-ILB): Alle neuen Anfragen stammen vom Load-Balancer. Daher sollte Ihr Back-End Anfragen vom Proxy-Subnetz Ihres VPC-Netzwerk akzeptieren. Weitere Informationen finden Sie unter Nur-Proxy-Subnetze für Envoy-basierte Load-Balancer.

Beispiel

Angenommen, Sie haben eine MySQL-Instanz, die in Google Cloud in einem privaten VPC-Netzwerk gehostet wird, und möchten die MySQL-Instanz für die Integration Connectors-Laufzeit freigeben.

Die folgende Abbildung zeigt, wie das Google Cloud-Beispielprojekt nach der Konfiguration des PSC-Dienstanhangs aussieht.

Beispielillustration

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie einen PSC-Dienstanhang für das Beispielszenario erstellen:

  • Installieren Sie die gcloud CLI.
  • Aktivieren Sie die Compute Engine API für Ihr Google Cloud-Projekt.
  • Um die Befehle über die Befehlszeile zu vereinfachen, können Sie die Werte für PROJECT_ID, REGION und ZONE mithilfe der folgenden Befehle festlegen:
    gcloud config set project PROJECT_ID
    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
  • Ersetzen Sie für die Befehle in dieser Anleitung BACKEND_SERVER_PORT durch 3306. Dies ist der Standardport, auf dem der MySQL-Server ausgeführt wird.
  • Es empfiehlt sich, ein neues VPC-Netzwerk zu erstellen und dieses für dieses Beispielszenario zu verwenden. Nachdem Sie das Szenario getestet haben, können Sie das VPC-Netzwerk und andere Ressourcen löschen.
  • Es sollte mindestens eine Verbindung vorhanden sein, die Sie erstellt haben. Die Verbindung kann einen beliebigen Typ haben. Wenn Sie eine Verbindung haben, können Sie die Projekt-ID des Dienstverzeichnisses aus der Integration Connectors-Laufzeit abrufen. Diese Projekt-ID wird zum Erstellen des PSC-Dienstanhangs benötigt.

PSC-Dienstanhang erstellen

Führen Sie die folgenden Aufgaben aus, um einen PSC-Dienstanhang für das Beispielszenario zu erstellen:

  1. Erstellen Sie ein VPC-Netzwerk und die erforderlichen Subnetze.
    1. VPC-Netzwerk erstellen.
      gcloud compute networks create VPC_NETWORK --project=PROJECT_NAME --subnet-mode=custom --mtu=1460 --bgp-routing-mode=regional
    2. Fügen Sie Subnet-1 hinzu.
      gcloud compute networks subnets create SUBNET_NAME_1 --network=VPC_NETWORK --range=SUBNET_RANGE_1 --purpose=PRIVATE_SERVICE_CONNECT

      Mit diesem Befehl wird Subnet-1 als NAT-Subnetz erstellt, das ausschließlich zum Hosten des PSC-Dienstanhangs verwendet wird. Sie können keinen anderen Dienst in diesem NAT-Subnetz hosten.

    3. Fügen Sie Subnet-2 hinzu.
      gcloud compute networks subnets create SUBNET_NAME_2 --network=VPC_NETWORK --range=SUBNET_RANGE_2
  2. Erstellen Sie eine VM-Instanz.

    Führen Sie den folgenden Befehl aus, um eine VM-Instanz in der neu erstellten VPC zu erstellen:

    gcloud compute instances create \
    --image-family debian-10 \
    --image-project debian-cloud \
    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address \
    mysql-test
    

    Mit diesem Befehl wird eine VM-Instanz mit dem Namen mysql-test erstellt.

  3. Konfigurieren Sie Cloud NAT.
    1. Erstellen Sie einen einfachen Router.
      gcloud compute routers create NAT_ROUTER_NAME \
          --network=VPC_NETWORK
      
    2. Konfigurieren Sie die Netzwerkadressübersetzung.
      gcloud compute routers nats create NAT_GATEWAY_NAME \
          --router=NAT_ROUTER_NAME \
          --auto-allocate-nat-external-ips \
          --nat-all-subnet-ip-ranges
      
  4. Stellen Sie eine SSH-Verbindung zu Ihrer VM-Instanz her.
    1. Erstellen Sie eine Firewallregel, die SSH zulässt.
      gcloud compute firewall-rules create VPC_NETWORK-allow-ssh --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
      
    2. Stellen Sie eine SSH-Verbindung zu Ihrer VM-Instanz her.
      gcloud compute ssh \
          --tunnel-through-iap \
          mysql-test
      
  5. Installieren Sie den MySQL-Server. Eine ausführliche Anleitung finden Sie unter MySQL installieren.
  6. Stellen Sie eine Verbindung zur MySQL-Instanz her und erstellen Sie Beispieldaten.
    1. Stellen Sie mit dem MySQL-Client eine Verbindung zu MySQL her.
      sudo mysql -u root -p
    2. Erstellen Sie einen neuen Nutzer und gewähren Sie Zugriff, um von einer beliebigen Hostadresse aus eine Verbindung herzustellen.
      CREATE USER 'test-user'@'%' IDENTIFIED BY 'test-pass';
      GRANT ALL PRIVILEGES ON * . * TO 'test-user'@'%';
      FLUSH PRIVILEGES;
      

      Mit diesem Befehl wird ein Nutzer mit dem Nutzernamen test-user und dem Passwort test-pass erstellt.

    3. Erstellen Sie eine Datenbank mit den Beispieldaten.
      CREATE DATABASE test-db;
      USE test-db;
      CREATE TABLE Singers (SingerId int, FirstName varchar(255), LastName varchar(255));
      INSERT INTO Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards');
      
    4. Beenden Sie den MySQL-Client.
      mysql> exit
    5. Beenden Sie die VM-Instanz.
      exit
  7. Richten Sie eine nicht verwaltete Instanzgruppe ein.
    1. Nicht verwaltete Instanzgruppe erstellen
      gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
    2. Fügen Sie die in Schritt 2 erstellte VM-Instanz der Gruppe hinzu.
      gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances=mysql-test
  8. Erstellen Sie eine Systemdiagnoseprüfung und lassen Sie den Traffic von der Prüfung zu.
    1. Erstellen Sie die Systemdiagnoseprüfung.
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      Legen Sie in diesem Befehl BACKEND_SERVER_PORT auf 3306 fest. Dies ist der Standardport, auf dem der MySQL-Server ausgeführt wird.

    2. Erstellen Sie eine Firewallregel, um Traffic von der Prüfung zuzulassen.
      gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
  9. Erstellen Sie einen internen L4-Load-Balancer und lassen Sie Traffic vom Load-Balancer zu.
    1. Erstellen Sie einen Back-End-Dienst.
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. Fügen Sie dem Back-End-Dienst eine Instanzgruppe hinzu.
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. Erstellen Sie eine Weiterleitungsregel.
      gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
    4. Erstellen Sie eine Firewallregel, um internen Traffic vom Load-Balancer zur Instanzgruppe zuzulassen.
      gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
  10. Erstellen Sie den PSC-Dienstanhang.
    1. Erstellen Sie eine Firewallregel, um Traffic vom PSC-Dienstanhang zum internen Load-Balancer zuzulassen, der im vorherigen Schritt erstellt wurde.
      gcloud compute firewall-rules create VPC_NETWORK-allow-sa --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=SUBNET_RANGE_1
    2. Erstellen Sie einen Dienstanhang mit expliziter Genehmigung.
      gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME  --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=SUBNET_NAME_1

      In diesem Befehl ist LIMIT das Verbindungslimit für das Projekt. Das Verbindungslimit ist die Anzahl der Private Service Connect-Nutzerendpunkte, die eine Verbindung zu diesem Dienst herstellen können. Informationen zum Abrufen der SERVICE_DIRECTORY_PROJECT_ID finden Sie unter Projekt-ID des Dienstverzeichnisses abrufen.

  11. Erstellen Sie einen Endpunktanhang.

    Stellen Sie sich den Endpunktanhang als eine Schnittstelle zum PSC-Dienstanhang vor. Sie können den PSC-Dienstanhang nicht direkt zum Konfigurieren privater Verbindungen verwenden. Der Zugriff auf den PSC-Dienstanhang ist nur über einen Endpunktanhang möglich. Außerdem können Sie den Endpunktanhang entweder als IP-Adresse oder als Hostnamen erstellen. Nachdem Sie den Endpunktanhang erstellt haben, können Sie ihn verwenden, wenn Sie einen Connector für private Verbindungen konfigurieren. Weitere Informationen finden Sie unter Endpunktanhang erstellen.

  12. Prüfen Sie die PSC-Einrichtung. Sie können die Konnektivität des PSC-Dienstanhangs prüfen. Stellen Sie dazu eine MySQL-Verbindung zur test-db-Datenbank her, die Sie für diese Anleitung erstellt haben. Eine ausführliche Anleitung zum Erstellen einer MySQL-Verbindung finden Sie unter MySQL-Verbindung erstellen. Wählen Sie beim Erstellen der Verbindung im Abschnitt Destinations (siehe Schritt 5 unter MySQL-Verbindung erstellen) Destination type als Hostname aus und geben Sie dann die entsprechende Endpunkt-IP-Adresse oder den entsprechenden Endpunkt-IP-Adresse oder Hostnamen ein. Wenn die Verbindung erfolgreich erstellt wurde, lautet der Status der neu erstellten Verbindung in der Cloud Console auf der Seite „Verbindungen“ Active.

Projekt-ID des Dienstverzeichnisses abrufen

Es hat sich bewährt, den PSC-Dienstanhang so zu erstellen, dass er nur Anfragen von den angegebenen Google Cloud-Projekten akzeptiert. Dazu benötigen Sie jedoch die Projekt-ID des Dienstverzeichnisses, das Ihrem Google Cloud-Projekt zugeordnet ist. Die Projekt-ID des Dienstverzeichnisses können Sie mit der List Connections API abrufen, wie im folgenden Beispiel gezeigt.

Syntax

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"

Ersetzen Sie Folgendes:

  • CONNECTORS_PROJECT_ID: Die ID Ihres Google Cloud-Projekts, in dem Sie die Verbindung erstellt haben.

Beispiel

In diesem Beispiel wird die Projekt-ID des Dienstverzeichnisses für das Google Cloud-Projekt connectors-test abgerufen.

curl -X GET \
    -H "authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"

Wenn Sie diesen Befehl im Terminal ausführen, wird in etwa folgende Ausgabe angezeigt:

.....
{
  "connections": [
    {
      "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa",
      "createTime": "2022-10-07T09:02:31.905048520Z",
      "updateTime": "2022-10-07T09:22:39.993778690Z",
      "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1",
      "status": {
        "state": "ACTIVE"
      },
      "configVariables": [
        {
          "key": "project_id",
          "stringValue": "connectors-test"
        },
        {
          "key": "dataset_id",
          "stringValue": "testDataset"
        }
      ],
      "authConfig": {},
      "serviceAccount": "564332356444-compute@developer.gserviceaccount.com",
      "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime",
      "nodeConfig": {
        "minNodeCount": 2,
        "maxNodeCount": 50
      }
    },
....

In der Beispielausgabe lautet die Projekt-ID des Dienstverzeichnisses für das Google Cloud-Projekt connectors-test abcdefghijk-tp.

PSC-Dienstanhang für andere Back-End-Systeme

Sie können die Schritte im vorherigen Beispiel ausführen, um einen PSC-Dienstanhang für andere Back-End-Systeme einzurichten. Allerdings müssen Sie Schritt 5 und 6 an Ihr gewünschtes Back-End-System anpassen. Nachdem Sie Ihr Back-End-System in der VM-Instanz installiert haben, fügen Sie das Back-End-System der Instanzgruppe hinzu und führen Sie die verbleibenden Schritte aus.