Auf dieser Seite wird beschrieben, wie Sie eine Verbindung von einer in Google Kubernetes Engine (GKE) ausgeführten Anwendung zu einer Cloud SQL-Instanz einrichten.
Für eine Schritt-für-Schritt-Anleitung zum Ausführen einer mit Cloud SQL verbundenen Google Kubernetes Engine-Beispiel-Webanwendung finden Sie weitere Informationen unter: Schnellstart zum Herstellen einer Verbindung von Google Kubernetes Engine.
Cloud SQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie Ihre relationalen Datenbanken in der Cloud einrichten, warten und verwalten können.
Google Kubernetes Engine bietet eine einfache Möglichkeit zur automatischen Bereitstellung, Skalierung und Verwaltung von Kubernetes.
Google Kubernetes Engine mit Cloud SQL verbinden
Für den Zugriff auf eine Cloud SQL-Instanz von einer Anwendung aus, die in Google Kubernetes Engine ausgeführt wird, können Sie entweder den Cloud SQL Auth-Proxy (mit öffentlicher oder privater IP-Adresse) verwenden oder direkt eine Verbindung über eine private IP-Adresse herstellen.
Wir empfehlen, den Cloud SQL Auth-Proxy zum Herstellen einer Verbindung zu Cloud SQL zu nutzen, auch wenn eine private IP-Adresse verwendet wird. Dies liegt daran, dass der Cloud SQL Auth-Proxy eine starke Verschlüsselung und Authentifizierung mit IAM bietet, wodurch die Sicherheit Ihrer Datenbank gewährleistet werden kann.
Datenbankverbindungen nutzen Ressourcen des Servers und der Anwendung, von der die Verbindung ausgeht. Daher sollten Sie sich bei der Verbindungsverwaltung immer an Best Practices orientieren. So können Sie die Kosten für die Anwendung minimieren und die Wahrscheinlichkeit senken, dass die Verbindungslimits für Cloud SQL überschritten werden. Weitere Informationen finden Sie unter Datenbankverbindungen verwalten.
Hinweis
Zum Herstellen einer Verbindung mit Cloud SQL benötigen Sie Folgendes:
Einen GKE-Cluster, in dem das
kubectl
-Befehlszeilentool installiert und für die Kommunikation mit dem Cluster konfiguriert ist.Hilfe zum Einstieg in GKE finden Sie unter Anwendung in einem GKE-Cluster bereitstellen.
Zum Herstellen einer Verbindung über eine private IP-Adresse muss der GKE-Cluster VPC-nativ sein und mit demselben VPC-Netzwerk (Virtual Private Cloud) wie die Cloud SQL-Instanz verbunden sein.
Eine erstellte Instanz.
Informationen zum Erstellen einer Cloud SQL-Instanz finden Sie unter Instanzen erstellen.
Ein PostgreSQL-Nutzerkonto, das für die Instanz konfiguriert wurde.
Ihre Anwendung verwendet dieses Konto, um eine Verbindung zur Datenbank herzustellen. Hilfe beim Erstellen von Nutzerkonten finden Sie unter Nutzer erstellen.
Informationen zu Kubernetes-Secrets
In Kubernetes sind Secrets eine sichere Möglichkeit, Konfigurationsdetails an Ihre Anwendung zu übergeben. Sie können ein Secret mit Details wie dem Datenbanknamen, dem Nutzer und dem Passwort erstellen. Diese Details können als Umgebungsvariablen in Ihre Anwendung eingefügt werden.
Je nach Verbindungstyp können Secrets auf unterschiedliche Weise verwendet werden:
- Ein Secret für Datenbankanmeldedaten enthält den Namen des Datenbanknutzers, mit dem Sie eine Verbindung herstellen, und das Datenbankpasswort des Nutzers.
- Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy herstellen, kann ein Secret verwendet werden, um die Anmeldedatendatei Ihres Dienstkontos zu speichern.
- Wenn Sie eine Verbindung mit einer privaten IP-Adresse herstellen, kann ein Secret verwendet werden, um die private IP-Adresse Ihrer Cloud SQL-Instanz anzugeben.
Vollständige Beispiele zur Verwendung von Secrets finden Sie in den GitHub-Repositories weiter unten auf dieser Seite.
Secret-Objekt erstellen
Sie erstellen die Secret-Objekte mit dem Befehl
kubectl create secret
.So erstellen Sie ein Secret für Datenbankanmeldedaten:
kubectl create secret generic <YOUR-DB-SECRET> \ --from-literal=username=<YOUR-DATABASE-USER> \ --from-literal=password=<YOUR-DATABASE-PASSWORD> \ --from-literal=database=<YOUR-DATABASE-NAME>
Nach der Erstellung können Sie die Objekte im Bereich Konfiguration auf der Google Kubernetes Engine-Seite in der Google Cloud Console ansehen.
Verbindung zu Cloud SQL über den Cloud SQL Auth-Proxy herstellen
Wenn Sie eine Verbindung über den Cloud SQL Auth-Proxy herstellen, wird der Cloud SQL Auth-Proxy mithilfe des Containermusters sidecar
zu Ihrem Pod hinzugefügt. Der Cloud SQL Auth-Proxy-Container befindet sich im selben Pod wie Ihre Anwendung, sodass die Anwendung mithilfe von localhost
eine Verbindung zum Cloud SQL Auth-Proxy herstellen kann, wodurch Sicherheit und Leistung erhöht werden.
Weitere Informationen zum Cloud SQL Auth-Proxy finden Sie unter Informationen zum Cloud SQL Auth-Proxy. Weitere Informationen zum Arbeiten mit Pods finden Sie in der Kubernetes-Dokumentation unter Pod-Übersicht.
Zum Herstellen einer Verbindung mit dem Cloud SQL Auth-Proxy benötigen Sie Folgendes:
Den Namen der Instanzverbindung Ihrer Cloud SQL-Instanz.
Der Name der Instanzverbindung kann auf der Seite Cloud SQL-Instanzdetails der Google Cloud Console oder über den Befehl
gcloud sql instances describe INSTANCE_ID
abgerufen werden.Den Speicherort der Schlüsseldatei, die einem Dienstkonto mit den erforderlichen Berechtigungen für Ihre Cloud SQL-Instanz zugeordnet ist.
Weitere Informationen finden Sie unter Dienstkonto erstellen.
Die Cloud SQL Admin API ist aktiviert.
Dienstkonto für den Cloud SQL-Auth-Proxy bereitstellen
Der erste Schritt zum Ausführen des Cloud SQL Auth-Proxys in Google Kubernetes Engine besteht darin, ein Google-Dienstkonto (Google Service Account, GSA) für Ihre Anwendung zu erstellen. Es empfiehlt sich, für jede Anwendung ein eigenes Dienstkonto zu erstellen, anstatt überall dasselbe Dienstkonto zu verwenden. Dieses Modell ist sicherer, da Sie damit Berechtigungen auf Anwendungsbasis beschränken können.
Das Dienstkonto für Ihre Anwendung muss die folgenden Kriterien erfüllen:
- Es muss zu einem Projekt mit aktivierter Cloud SQL Admin API gehören.
- Ihm muss die IAM-Rolle "Cloud SQL-Client" oder eine gleichwertige Rolle für das Projekt mit der Instanz zugewiesen sein, zu der Sie eine Verbindung herstellen möchten.
- Wenn Sie eine Verbindung mithilfe einer privaten IP-Adresse herstellen, muss ein VPC-nativer GKE-Cluster in derselben VPC wie Ihre Cloud SQL-Instanz verwendet werden.
Sie müssen GKE so konfigurieren, dass das Dienstkonto für den Cloud SQL Auth-Proxy bereitgestellt wird. Dafür gibt es zwei Möglichkeiten: über Workload Identity oder eine Schlüsseldatei des Dienstkontos.
Workload Identity
Wenn Sie Google Kubernetes Engine verwenden, wird das GKE-Feature Workload Identity als bevorzugte Methode empfohlen. Mit dieser Methode können Sie ein Kubernetes-Dienstkonto (Kubernetes Service Account, KSA) an ein Google-Dienstkonto (Google Service Account, GSA) binden. Das GSA ist dann für Anwendungen zugänglich, die das entsprechende KSA verwenden.
Ein Google-Dienstkonto (Google Service Account, GSA) ist eine IAM-Identität, die Ihre Anwendung in Google Cloud darstellt. Entsprechend ist ein Kubernetes-Dienstkonto (Kubernetes Service Account, KSA) eine Identität, die Ihre Anwendung in einem Google Kubernetes Engine-Cluster darstellt.
Workload Identity bindet ein KSA an ein GSA. Dadurch werden alle Deployments mit diesem KSA als GSA bei Interaktionen mit Google Cloud authentifiziert.
- Workload Identity für den Cluster aktivieren
Normalerweise hat jede Anwendung eine eigene Identität, die durch ein KSA- und GSA-Paar dargestellt wird. Führen Sie
kubectl apply -f service-account.yaml
aus, um ein KSA für Ihre Anwendung zu erstellen:Aktivieren Sie die IAM-Bindung zwischen YOUR-GSA-NAME und YOUR-KSA-NAME:
gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:YOUR-GOOGLE-CLOUD-PROJECT.svc.id.goog[YOUR-K8S-NAMESPACE/YOUR-KSA-NAME]" \ YOUR-GSA-NAME@YOUR-GOOGLE-CLOUD-PROJECT.iam.gserviceaccount.com
Fügen Sie YOUR-KSA-NAME eine Anmerkung hinzu, um die Bindung fertigzustellen:
kubectl annotate serviceaccount \ YOUR-KSA-NAME \ iam.gke.io/gcp-service-account=YOUR-GSA-NAME@YOUR-GOOGLE-CLOUD-PROJECT.iam.gserviceaccount.com
Geben Sie schließlich das Dienstkonto für das k8s-Objekt an.
Dienstkontoschlüsseldatei
Wenn Sie Workload Identity nicht verwenden können, wird empfohlen, eine Dienstkonto-Schlüsseldatei im Pod des Cloud SQL Auth-Proxys bereitzustellen und das Flag --credentials-file
zu verwenden.
Erstellen Sie eine Anmeldedatendatei für Ihren Dienstkontoschlüssel:
gcloud iam service-accounts keys create ~/key.json \ --iam-account=YOUR-SA-NAME@project-id.iam.gserviceaccount.com
Machen Sie aus Ihrem Dienstkontoschlüssel ein k8s-Secret:
kubectl create secret generic YOUR-SA-SECRET \ --from-file=service_account.json=~/key.json
Stellen Sie das Secret als Volume unter
spec:
für Ihr k8s-Objekt bereit:Folgen Sie der Anleitung im nächsten Abschnitt, um auf das Volume aus dem Pod des Cloud SQL Auth-Proxys zuzugreifen.
Cloud SQL Auth-Proxy in einem Sidecar-Muster ausführen
Wir empfehlen, den Cloud SQL Auth-Proxy in einem sidecar
-Muster auszuführen (als zusätzlichen Container, der einen Pod für Ihre Anwendung freigibt). Diese Vorgehensweise wird aus verschiedenen Gründen gegenüber der Ausführung eines separaten Dienstes empfohlen:
- Verhindert, dass SQL-Traffic lokal verfügbar gemacht wird. Der Cloud SQL Auth-Proxy bietet die Möglichkeit, ausgehende Verbindungen zu verschlüsseln, aber Sie sollten die Sichtbarkeit für eingehende Verbindungen einschränken.
- Verhindert einen Single Point of Failure. Der Zugriff jeder Anwendung auf Ihre Datenbank ist unabhängig von den anderen, was die Ausfallsicherheit erhöht.
- Beschränkt den Zugriff auf den Cloud SQL Auth-Proxy, sodass Sie IAM-Berechtigungen pro Anwendung verwenden können, anstatt die Datenbank für den gesamten Cluster freizugeben.
Ermöglicht eine genauere Bestimmung von Ressourcenanfragen. Da der Cloud SQL Auth-Proxy Ressourcen linear zur Nutzung verbraucht, können Sie mit diesem Muster Ressourcen genauer bestimmen und entsprechend der Skalierung Ihrer Anwendungen anfordern.
Fügen Sie den Cloud SQL Auth-Proxy der Pod-Konfiguration unter
containers
hinzu:Wenn Sie einen Dienstkontoschlüssel verwenden, geben Sie Ihr Secret-Volume an und fügen Sie dem Befehl das Flag
--credentials-file
hinzu:
- Wenn Sie die IAM-Datenbankauthentifizierung verwenden, starten Sie den Cloud SQL Auth-Proxy mit dem Flag
--auto-iam-authn
.
- Abschließend konfigurieren Sie Ihre Anwendung so, dass eine Verbindung über
127.0.0.1
auf dem DB_PORT hergestellt wird, den Sie im Befehlsbereich angegeben haben.
Vollständige Beispielkonfigurationsdateien:
Workload Identity
Dienstkontoschlüssel
Verbindung zu Cloud SQL ohne den Cloud SQL Auth-Proxy herstellen
Sie können auch eine Verbindung von einem VPC-nativen GKE-Cluster zu einer Cloud SQL-Instanz in derselben VPC mit privater IP-Adresse ohne den Cloud SQL Auth-Proxy herstellen. Diese Vorgehensweise ist jedoch weniger sicher.
Erstellen Sie ein Secret mit der privaten IP-Adresse Ihrer Instanz:
kubectl create secret generic <YOUR-PRIVATE-IP-SECRET> \ --from-literal=db_host=<YOUR-PRIVATE-IP-ADDRESS>
Als Nächstes fügen Sie das Secret dem Container Ihrer Anwendung hinzu:
Abschließend konfigurieren Sie Ihre Anwendung so, dass eine Verbindung mit der IP-Adresse aus der Umgebungsvariable
DB_HOST
hergestellt wird. Verwenden Sie den richtigen Port für PostgreSQL: 5432.
Vollständige Beispielkonfigurationsdatei:
Private IP-Adresse
Fehlerbehebung
Benötigen Sie Hilfe? Informationen zur Fehlerbehebung für den Proxy finden Sie unter Fehlerbehebung bei Cloud SQL Auth-Proxyverbindungen oder auf der Seite Cloud SQL-Support.
Nächste Schritte
Weitere Informationen zu privaten IP-Adressen
Weitere Informationen zum Cloud SQL Auth-Proxy und dem Proxy-Docker-Image
Mehr über Google Kubernetes Engine erfahren