Private IP-Adresse konfigurieren

Auf dieser Seite wird beschrieben, wie Sie eine Cloud SQL-Instanz für die Verwendung von privaten IP-Adressen konfigurieren.

Informationen zur Funktionsweise privater IP-Adressen sowie zu den Anforderungen an Umgebung und Verwaltung finden Sie unter Private IP-Adressen.

Vorbereitung

Bevor Sie eine Cloud SQL-Instanz für die Verwendung von privaten IP-Adressen konfigurieren können, müssen Sie Folgendes tun:

  • Aktivieren Sie die Service Networking API für Ihr Projekt.

    Wenn Sie ein freigegebenes VPC-Netzwerk verwenden, müssen Sie außerdem Folgendes tun:

    • Aktivieren Sie die Service Networking API für das Hostprojekt.
    • Fügen Sie Ihren Nutzer dem Hostprojekt hinzu.
    • Weisen Sie Ihrem Nutzer im Hostprojekt die IAM-Rolle compute.networkAdmin zu.
  • Wählen Sie ein VPC-Netzwerk aus.

  • Einmalig: Konfigurieren Sie den Zugriff auf private Dienste im VPC-Netzwerk, um einen IP-Adressbereich zuweisen und eine private Verbindung zu Diensten erstellen zu können. So können Ressourcen im VPC-Netzwerk eine Verbindung zu Cloud SQL-Instanzen herstellen.

    • Zum Einrichten des Zugriffs auf private Dienste ist die IAM-Rolle compute.networkAdmin erforderlich.

      Nachdem der Zugriff auf private Dienste für Ihr Netzwerk eingerichtet wurde, benötigen Sie die Rolle compute.networkAdmin nicht mehr, um eine Instanz für die Verwendung privater IP-Adressen zu konfigurieren.

    • Wenn Sie für eine Ihrer Cloud SQL-Instanzen eine private IP-Adresse verwenden, müssen Sie den Zugriff auf private Dienste für jedes Google Cloud-Projekt, das eine Verbindung zu einer Cloud SQL-Instanz hat oder herstellen muss, nur einmal konfigurieren. Weitere Informationen finden Sie unter Zugriff auf private Dienste.

Cloud SQL konfiguriert den Zugriff auf private Dienste, wenn alle folgenden Bedingungen erfüllt sind:

  • Sie haben den Zugriff auf private Dienste noch nicht im Google Cloud-Projekt konfiguriert.
  • Sie aktivieren die private IP-Adresse für eine Cloud SQL-Instanz im Google Cloud-Projekt zum ersten Mal.
  • Beim Aktivieren einer privaten IP-Adresse auf der Seite Connections der Instanz müssen Sie für das verknüpfte Netzwerk default sowie die Option Use an automatically allocated IP range auswählen.

Instanz für die Verwendung privater IP-Adressen konfigurieren

Sie können eine Cloud SQL-Instanz so konfigurieren, dass beim Erstellen der Instanz oder bei einer vorhandenen Instanz eine private IP-Adresse verwendet wird.

Private IP-Adresse für eine neue Instanz konfigurieren

So konfigurieren Sie eine Cloud SQL-Instanz für die Verwendung privater IP-Adressen, wenn Sie eine Instanz erstellen:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite "Cloud SQL-Instanzen".

    Zur Seite "Cloud SQL-Instanzen"

  2. Klicken Sie auf INSTANZ ERSTELLEN.
  3. Erweitern Sie im Assistenten zum Erstellen unter Konfigurationsoptionen den Abschnitt Verbindung.
  4. Klicken Sie auf das Kästchen Private IP-Adresse.

    In einer Drop-down-Liste werden die im Projekt verfügbaren VPC-Netzwerke angezeigt Wenn Ihr Projekt das Dienstprojekt einer freigegebenen VPC ist, werden auch VPC-Netzwerke aus dem Hostprojekt angezeigt.

  5. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten:
  6. Wenn Sie den Zugriff auf private Dienste konfiguriert haben:

    1. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
    2. Klicken Sie auf Verbinden.
    3. In einem Drop-down-Menü wird der zugewiesene IP-Adressbereich angezeigt.

    4. Klicken Sie auf Erstellen.
    5. Klicken Sie auf Speichern.

    So weist Cloud SQL den Bereich selbst zu und erstellt die private Verbindung:

    1. Wählen Sie das Standard-VPC-Netzwerk aus.
    2. Klicken Sie auf Zuweisen und verbinden.
    3. Klicken Sie auf Speichern.

gcloud

Falls noch nicht geschehen, konfigurieren Sie den Zugriff auf private Dienste für Cloud SQL anhand der Anleitung unten. Erstellen Sie die Cloud SQL-Instanz. Verwenden Sie dabei den Parameter --network, um den Namen des ausgewählten VPC-Netzwerks anzugeben, und das Flag --no-assign-ip, um öffentliche IP-Adressen zu deaktivieren.

Sofern das VPC-Netzwerk kein freigegebenes VPC-Netzwerk ist, hat der Wert des Parameters "--network" das folgende Format: https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/global/networks/[VPC_NETWORK_NAME]

Wenn das VPC-Netzwerk ein freigegebenes VPC-Netzwerk ist, hat der Wert des Parameters "--network" das folgende Format: projects/HOST_PROJECT_ID/global/networks/VPC_NETWORK_NAME. Dabei ist HOST_PROJECT_ID der Name des freigegebenen VPC-Hostprojekts und VPC_NETWORK_NAME der Name des freigegebenen VPC-Netzwerks.

gcloud --project=[PROJECT_ID] beta sql instances create [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Private IP-Adresse für eine vorhandene Instanz konfigurieren

Wenn Sie eine vorhandene Cloud SQL-Instanz für die Verwendung einer privaten IP-Adresse konfigurieren, wird die Instanz neu gestartet, was zu einer Ausfallzeit führt.

So konfigurieren Sie eine bestehende Instanz für die Verwendung einer privaten IP-Adresse:

Console

  1. Öffnen Sie in der Google Cloud Console die Seite "Cloud SQL-Instanzen".
    Zur Seite "Cloud SQL-Instanzen"
  2. Klicken Sie auf den Instanznamen, um die entsprechende Übersicht zu öffnen.
  3. Wählen Sie den Tab Verbindungen aus.
  4. Klicken Sie auf das Kästchen Private IP-Adresse.

    In einer Drop-down-Liste werden die im Projekt verfügbaren Netzwerke angezeigt. Wenn Ihr Projekt das Dienstprojekt einer freigegebenen VPC ist, werden auch VPC-Netzwerke aus dem Hostprojekt angezeigt.

  5. Wenn Sie den Zugriff auf private Dienste konfiguriert haben:
    1. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
    2. In einem Drop-down wird der zugewiesene IP-Adressbereich angezeigt.

    3. Klicken Sie auf Verbinden.
    4. Klicken Sie auf Speichern.
  6. So weist Cloud SQL Ihnen eine IP-Adresse zu.
    1. Wählen Sie das Standard-VPC-Netzwerk aus.
    2. Klicken Sie auf Zuweisen und verbinden.
    3. Klicken Sie auf Speichern.

gcloud

Falls noch nicht geschehen, konfigurieren Sie den Zugriff auf private Dienste für Cloud SQL anhand der Anleitung unten. Aktualisieren Sie Ihre Cloud SQL-Instanz mithilfe des Parameters --network, um den Namen des ausgewählten VPC-Netzwerks anzugeben.

VPC_NETWORK_NAME ist der Name des ausgewählten VPC-Netzwerks, z. B. my-vpc-network. Der Wert des Parameters "--network" hat das folgende Format: https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/global/networks/[VPC_NETWORK_NAME].

gcloud --project=[PROJECT_ID] beta sql instances patch [INSTANCE_ID]
       --network=[VPC_NETWORK_NAME]
       --no-assign-ip

Verbindung zu einer Instanz über ihre private IP-Adresse herstellen

Verwenden Sie den Zugriff auf private Dienste zum Herstellen einer Verbindung zu Cloud SQL-Instanzen von Compute Engine- oder Google Kubernetes Engine-Instanzen im selben VPC-Netzwerk (hier als interne Quellen definiert) oder von außerhalb des Netzwerks (eine externe Quelle).

Verbindung von einer internen Quelle herstellen

Zum Herstellen einer Verbindung von einer Quelle, die sich im selben Google Cloud-Projekt wie die Cloud SQL-Instanz befindet, z. B. vom Cloud SQL Proxy, der auf einer Compute Engine-Ressource ausgeführt wird, muss sich diese Ressource im selben VPC-Netzwerk wie die Cloud SQL-Instanz befinden.

Verbindung von einer externen Quelle herstellen

Sie können eine Verbindung über einen Client in einem lokalen Netzwerk herstellen, wenn das lokale Netzwerk mit dem VPC-Netzwerk verbunden ist, mit dem Ihre Cloud SQL-Instanz verbunden ist. So lassen Sie Verbindungen von einem lokalen Netzwerk zu:

  1. Verbinden Sie das VPC-Netzwerk mit Ihrem lokalen Netzwerk. Verwenden Sie dazu einen Cloud VPN-Tunnel oder einen Interconnect-Anhang (VLAN) für Dedicated Interconnect oder Partner Interconnect.
  2. Identifizieren Sie das Peering, das von der privaten Dienstverbindung erzeugt wird. Beachten Sie, dass für alle verwendeten Datenbankmodule (MySQL, PostgreSQL und SQL Server) ein Peering erstellt wird.
  3. Aktualisieren Sie die Peering-Verbindung, um benutzerdefinierte Routen auszutauschen.
  4. Identifizieren Sie den zugewiesenen Bereich, der von der Verbindung für private Dienste verwendet wird.
  5. Erstellen Sie ein benutzerdefiniertes Cloud Router Route Advertisement für den zugewiesenen Bereich auf den Cloud Routern, die BGP-Sitzungen für Ihre Cloud VPN-Tunnel oder Cloud Interconnect-Anhänge (VLANs) verwalten.

Verbindung von Adressen außerhalb von RFC 1918 herstellen

RFC 1918 gibt IP-Adressen an, die intern, also innerhalb einer Organisation, zugewiesen und nicht ins Internet weitergeleitet werden. Dazu zählen insbesondere Folgende:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Verbindungen zu einer Cloud SQL-Instanz mit einer privaten IP-Adresse werden für RFC 1918-Adressbereiche automatisch autorisiert. Auf diese Weise können alle privaten Clients ohne Umleitung über den Proxy auf die Datenbank zugreifen.

Adressen außerhalb des RFC 1918-Adressbereichs müssen als autorisierte Netzwerke konfiguriert werden.

Wenn Sie eine Verbindung über eine Adresse außerhalb des RFC 1918-Bereichs herstellen möchten, müssen Sie eine instanzspezifische IP-Autorisierung einrichten, um Traffic aus anderen als RFC 1918-Adressbereichen zuzulassen.

Verwenden Sie beispielsweise den folgenden gcloud-Befehl:

gcloud sql instances patch INSTANCE_NAME --authorized-networks 172.16.12.0/28,172.16.1.0/24,172.16.10.0/24,172.16.2.0/24,172.16.11.0/24,192.88.99.0/24,11.0.0.0/24

Cloud SQL erkennt standardmäßig keine Subnetzrouten außerhalb des RFC 1918-Bereichs von Ihrer VPC. Sie müssen deshalb das Netzwerk-Peering auf Cloud SQL aktualisieren, um Routen außerhalb des RFC 1918-Bereichs exportieren zu können.

gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
  • cloudsql-postgres-googleapis-com ist der Name der Private Service Connection von der Seite Ihres VPC-Netzwerks.

    Wählen Sie Ihr Netzwerk aus und suchen Sie nach dem Abschnitt Private Service Connection.

  • NETWORK ist der Name Ihres VPC-Netzwerks.

Fehlerbehebung

Klicken Sie auf die Links in der Tabelle, um weitere Informationen zu erhalten:

Problem Mögliche Ursache Lösungsvorschlag
SSL error: invalid padding. Serverzertifikatfehler. Erstellen Sie ein neues Serverzertifikat und rotieren Sie es.
Sie möchten wissen, wer verbunden ist. Siehe Lösungsvorschlag.
Fehler vom Typ Unauthorized to connect. Dies kann viele Ursachen haben. Folgen Sie diesem Link.
Netzwerkzuordnung fehlgeschlagen. Service Networking API ist im Projekt nicht aktiviert. Aktivieren Sie Service Networking API im Projekt.
Remaining connection slots are reserved. Die maximale Anzahl von Verbindungen wurde erreicht. Erhöhen Sie den Wert des Flags max_connections.
Set Service Networking service account as servicenetworking.serviceAgent role on consumer project. Netzwerkberechtigungen für das Dienstkonto fehlen oder sind falsch. Deaktivieren Sie die Service Networking API und aktivieren Sie sie wieder.
error x509: certificate is not valid for any names, but wanted to match project-name:db-name. Bekanntes Problem: Der Cloud SQL-Proxy-Dialer ist derzeit nicht mit Go 1.15 kompatibel. Bis zur Behebung dieses Problems finden Sie in dieser Diskussion auf GitHub eine Problemumgehung.

Verbindung abgebrochen

Sie sehen die Fehlermeldung Got an error reading communication packets oder Aborted connection xxx to db: DB_NAME.

Mögliche Ursache

  • Netzwerk instabil.
  • Keine Antwort auf TCP-Keep-Alive-Befehle (entweder der Client oder der Server reagiert nicht, möglicherweise überlastet).
  • Die Verbindungsdauer des Datenbankmoduls wurde überschritten und der Server hat die Verbindung beendet.

Lösungsvorschlag

Anwendungen sollten Netzwerkfehler tolerieren und gemäß den Best Practices mit Verbindungs-Pooling und Wiederholungsversuchen arbeiten. Die meisten Verbindungs-Pooler erfassen diese Fehler nach Möglichkeit. Andernfalls sollte die Anwendung einen Wiederholungsversuch ausführen oder ordnungsgemäß fehlschlagen.

Für den erneuten Verbindungsversuch empfehlen wir die folgenden Methoden:

  1. Exponentieller Backoff. Erhöhen Sie das Zeitintervall zwischen den einzelnen Wiederholungen exponentiell.
  2. Fügen Sie auch einen zufälligen Backoff hinzu.
Durch die Kombination dieser Methoden wird die Drosselung reduziert.


SSL-Fehler: Ungültiges Padding

Wenn Sie versuchen, über SSL eine Verbindung zu einer PostgreSQL-Instanz herzustellen, wird die Fehlermeldung SSL error: invalid padding angezeigt.

Mögliche Ursache

Möglicherweise liegt ein Problem mit dem Server-CA-Zertifikat vor.

Lösungsvorschlag

Erstellen Sie ein neues Server-CA-Zertifikat und rotieren Sie die Serverzertifikate.


Sie möchten wissen, wer verbunden ist

Sie möchten herausfinden, wer wie lange verbunden ist.

Mögliche Ursache

Lösungsvorschlag

Melden Sie sich in der Datenbank an und führen Sie den folgenden Befehl aus: SELECT datname, usename, application_name as appname, client_addr, state, now() - backend_start as conn_age, now() - state_change as last_activity_age FROM pg_stat_activity WHERE backend_type = 'client backend' ORDER BY 6 DESC LIMIT 20</code>


Keine Autorisierung für Verbindung

Folgende Fehlermeldung ist zu sehen: Unauthorized to connect.

Mögliche Ursache

Da die Autorisierung auf mehreren Ebenen erfolgt, kann dies verschiedene Ursachen haben.

  • Auf Datenbankebene muss der Datenbanknutzer vorhanden sein und sein Passwort muss übereinstimmen.
  • Auf Projektebene fehlen dem Nutzer möglicherweise die richtigen IAM-Berechtigungen.
  • Auf Cloud SQL-Ebene kann die Ursache davon abhängen, wie Sie eine Verbindung zu Ihrer Instanz herstellen. Wenn Sie über die öffentliche IP-Adresse eine direkte Verbindung zu einer Instanz herstellen, muss sich die Quell-IP-Adresse der Verbindung im autorisierten Netzwerk der Instanz befinden.

    Private IP-Verbindungen sind standardmäßig zulässig, es sei denn, Sie stellen eine Verbindung von einer Adresse außerhalb des RFC 1918-Bereichs her. Clientadressen außerhalb des RFC 1918-Bereichs müssen als autorisierte Netzwerke konfiguriert sein.

    Cloud SQL erkennt standardmäßig keine Subnetzrouten außerhalb des RFC 1918-Bereichs von Ihrer VPC. Sie müssen deshalb das Netzwerk-Peering auf Cloud SQL aktualisieren, um alle Routen außerhalb des RFC 1918-Bereichs exportieren zu können. Beispiel:

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT
    

    Wenn Sie eine Verbindung über den Cloud SQL Proxy herstellen, sollten Sie darauf achten, dass die IAM-Berechtigungen korrekt festgelegt sind.

  • Wenn die Cloud SQL-Instanz auf Netzwerkebene öffentliche IP-Adressen verwendet, muss sich die Quell-IP-Adresse der Verbindung in einem autorisierten Netzwerk befinden.

Lösungsvorschlag

  • Prüfen Sie das Passwort und den Nutzernamen.
  • Prüfen Sie die IAM-Rollen und -Berechtigungen des Nutzers.
  • Wenn Sie eine öffentliche IP-Adresse verwenden, achten Sie darauf, dass sich die Quelle in den autorisierten Netzwerken befindet.

Netzwerkzuordnung fehlgeschlagen

Sie sehen die Fehlermeldung Error: Network association failed due to the following error: Weisen Sie dem Dienstnetzwerk-Dienstkonto die Rolle servicenetworking.serviceAgent für das Nutzerprojekt zu.

Mögliche Ursache

Die Service Networking API ist im Projekt nicht aktiviert.

Lösungsvorschlag

Aktivieren Sie die Service Networking API in Ihrem Projekt. Ist dieser Fehler zu sehen, wenn Sie einer Cloud SQL-Instanz eine private IP-Adresse zuweisen und eine freigegebene VPC verwenden, müssen Sie auch die Service Networking API für das Hostprojekt aktivieren.


Verbleibende Verbindungsslots sind reserviert

Folgende Fehlermeldung ist zu sehen: FATAL: remaining connection slots are reserved for non-replication superuser connections.

Mögliche Ursache

Die maximale Anzahl von Verbindungen wurde erreicht.

Lösungsvorschlag

Bearbeiten Sie den Wert des Flags max_connections. Wenn Sie max_connections über einen bestimmten Wert hinaus erhöhen, kann die SLA-Unterstützung verloren gehen.


Dem Dienstnetzwerk-Dienstkonto die Rolle "servicenetworking.serviceAgent" für das Nutzerprojekt zuweisen

Die Fehlermeldung set Service Networking service account as servicenetworking.serviceAgent role on consumer project. wird angezeigt.

Mögliche Ursache

Nutzer- oder Dienstkontoberechtigungen sind nicht korrekt. Dies kann bei automatisierten Einrichtungsskripts wie einem Terraform-Konfigurationsskript geschehen.

Lösungsvorschlag

Deaktivieren Sie zum Reparieren von Dienstberechtigungen die Service Networking API, warten Sie fünf Minuten und aktivieren Sie sie dann wieder.

Sie können auch diese gcloud-Befehle verwenden, um dem Projekt die Rolle zuzuweisen.

gcloud beta services identity create --service=servicenetworking.googleapis.com --project=project-id
gcloud projects add-iam-policy-binding project-id --member="service-account-prefix@service-networking.iam.gserviceaccount.com" --role="roles/servicenetworking.serviceAgent"

Fehler x509: certificate is not valid for any names

Die Fehlermeldung error x509: certificate is not valid for any names, but wanted to match project-name:db-name wird angezeigt.

Mögliche Ursache

Bekanntes Problem: Der Cloud SQL-Proxy-Dialer ist derzeit nicht mit Go 1.15 kompatibel.

Lösungsvorschlag

Bis zur Behebung dieses Fehlers finden Sie in dieser Diskussion auf GitHub eine Problemumgehung.


Nächste Schritte