Spanner Omni verwendet TLS 1.3, um Daten zu verschlüsseln, die zwischen dem Client und dem Server sowie zwischen Spanner Omni-Servern übertragen werden. Spanner Omni bietet mTLS für erweiterte Sicherheitsfunktionen, wobei beide Parteien die Authentizität der anderen bestätigen, bevor sie Daten austauschen. Wenn Sie die Verschlüsselung verwenden, müssen Ihre Server über mTLS kommunizieren. Sie können auswählen, ob Ihr Client und Server auch mTLS verwenden.
Die Vorschau version von Spanner Omni unterstützt keine TLS-Verschlüsselung. Wenn Sie die Funktionen zum Erstellen von Bereitstellungen mit TLS-Verschlüsselung nutzen möchten, wenden Sie sich an Google und beantragen Sie den vorzeitigen Zugriff auf die Vollversion von Spanner Omni.
Hinweis
Folgende Anforderungen müssen erfüllt sein:
Erstellen Sie einen Kubernetes-Cluster. Die Konfiguration unterstützt Google Kubernetes Engine (GKE) und Amazon Elastic Kubernetes Service (Amazon EKS). Möglicherweise müssen Sie die Konfiguration anpassen, damit sie in anderen Umgebungen funktioniert.
Der Kubernetes-Cluster muss auf das Artifact Registry-Artefakt zugreifen können, das den Spanner Omni-Container hostet.
Installieren und konfigurieren Sie das
kubectlBefehlszeilentool und Helm.Wenn Sie die Kubernetes-Umgebung auf Maschinen der vSphere-Virtualisierungsplattform einrichten, deaktivieren Sie die TSC-Virtualisierung (Time Stamp Counter), indem Sie der
.vmx-Konfigurationsdatei der virtuellen Maschinemonitor_control.virtual_rdtsc = FALSEhinzufügen. So stellen Sie sicher, dass TrueTime korrekt funktioniert.Prüfen Sie, ob Ihre Umgebung die Systemanforderungen von Spanner Omni erfüllt.
Schritt 1: Zertifikate generieren
Sie müssen drei Zertifikatsätze erstellen:
API-Zertifikate: Diese helfen, den Spanner Omni API -Server zu schützen.
Serverzertifikate: Diese helfen, die Kommunikation zwischen Servern zu schützen.
Clientzertifikate: Endnutzer oder Anwendungen verwenden diese, um ihre Identität und ihr Vertrauen in Spanner Omni-Server zu bestätigen.
Diese Zertifikate werden von einer Zertifizierungsstelle (Certification Authority, CA) ausgestellt. Spanner Omni bietet Tools zum Erstellen einer selbst signierten Zertifizierungsstelle und aller drei Zertifikatstypen.
Führen Sie die folgenden Schritte auf einem Ihrer Computer aus. In den Schritten wird davon ausgegangen, dass der Namespace spanner-ns ist. Ändern Sie dies in den Namespace, den Sie in Ihrer Bereitstellung verwenden möchten.
Sie können diese Zertifikate auf Ihrer Workstation mit der Spanner Omni CLI erstellen.
1. Zertifizierungsstelle (Certification Authority, CA) erstellen
Eine Zertifizierungsstelle (Certification Authority, CA) stellt alle Zertifikate aus. Ihre Organisation hat möglicherweise eine zentrale Zertifizierungsstelle oder Sie können eine öffentliche Zertifizierungsstelle verwenden. Sie können zwar dieselbe Zertifizierungsstelle für alle Zertifikate verwenden, aber API-Zertifikate und Clientzertifikate müssen dieselbe Zertifizierungsstelle verwenden.
Mit Spanner Omni können Sie eine private Zertifizierungsstelle erstellen.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
Mit dem Befehl create-ca wird das CA-Zertifikat im Verzeichnis certs generiert.
Sie können dieses Zertifikat entweder kopieren und als Zertifizierungsstelle für API-Zertifikate verwenden oder eine andere Zertifizierungsstelle erstellen. Achten Sie darauf, dass Sie beim Erstellen von Zertifikaten die richtige Zertifizierungsstelle verwenden.
cp certs/ca.crt certs/ca-api.crt
Das Verzeichnis $HOME/.spanner/private-keys enthält den privaten Schlüssel für die Zertifizierungsstelle.
Es ist wichtig, dieses Verzeichnis zu sichern und zu sichern. Nutzer mit Zugriff auf den privaten Schlüssel können beliebige Zertifikate signieren, die von Clients, die der selbst signierten Zertifizierungsstelle vertrauen, vertraut werden. Optional können Sie eine zusätzliche Zertifizierungsstelle erstellen oder eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate verwenden. In diesem Dokument wird dieselbe Zertifizierungsstelle für alle Zertifikatstypen verwendet.
2. Serverzertifikate generieren
Sie müssen zwei Arten von Serverzertifikaten generieren:
API-Zertifikat: Verwenden Sie dieses Zertifikat, um die Kommunikation von Systemen zu verschlüsseln, die mit der Bereitstellung interagieren.
Spanner-Serverzertifikat: Spanner Omni-Server verwenden dieses Zertifikat, um die Kommunikation miteinander zu verschlüsseln.
Diese Konfiguration bietet Flexibilität bei der Verwaltung dieser Zertifikate. So können Sie beispielsweise die Zertifikatsrotation verwenden.
Spanner-Serverzertifikat erstellen
Führen Sie den folgenden Befehl aus, um das Serverzertifikat zu erstellen:
# Comma-separate names of the Spanner servers; wildcards are supported.
SERVER_NAMES=*.pod.NAMESPACE
./google/spanner/bin/spanner certificates create-server --hostnames=${SERVER_NAMES} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden server.crt und server.key im Verzeichnis certs erstellt.
API-Zertifikat erstellen
Führen Sie den folgenden Befehl aus, um das API-Zertifikat zu erstellen:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Mit diesem Befehl werden api.crt und api.key im Verzeichnis certs erstellt. Verwenden Sie bei Bedarf eine extern vertrauenswürdige Zertifizierungsstelle für die API-Zertifikate.
3. Clientzertifikate generieren
Sie können Clientzertifikate verwenden, um Nutzer und Anwendungen zu authentifizieren. Clientzertifikate ermöglichen mTLS zwischen dem Client und dem Server. Sie können diesen Schritt überspringen, wenn Sie mTLS nicht verwenden möchten.
Dieselbe Zertifizierungsstelle, die das API-Zertifikat signiert, muss auch Clientzertifikate signieren. Diese müssen außerdem einen Nutzernamen für die Autorisierung enthalten. Verwenden Sie in diesem Beispiel den Nutzer admin. Das ist der Standardnutzer für jede neue Datenbank. Weitere Informationen finden Sie unter
Authentifizierung und Autorisierung in Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Mit diesem Befehl werden client.crt und client.key im Verzeichnis clientcerts erstellt. Senden Sie diese Dateien an alle Computer, die eine Verbindung zur Bereitstellung herstellen.
Wenn Sie Clientzertifikate mit der Java-Clientbibliothek verwenden möchten, müssen Sie den Zertifikatschlüssel im PKCS#8-Format generieren. Verwenden Sie den folgenden Befehl:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Schritt 2: Zertifikate an den Kubernetes-Cluster senden
Führen Sie die folgenden Befehle aus, um die Zertifikate an Ihren Kubernetes-Cluster zu senden:
kubectl create namespace NAMESPACE
kubectl create secret generic tls-certs \
--from-file=ca.crt="certs/ca.crt" \
--from-file=ca-api.crt="certs/ca-api.crt" \
--from-file=server.crt="certs/server.crt" \
--from-file=server.key="certs/server.key" \
--from-file=api.crt="certs/api.crt" \
--from-file=api.key="certs/api.key" \
-n NAMESPACE
Schritt 3: Bereitstellung mit TLS-Verschlüsselung erstellen
Führen Sie die folgenden Schritte aus, um Ihre Bereitstellung mit TLS-Verschlüsselung zu erstellen.
1. Helm-Konfiguration vorbereiten
Folgen Sie der Anleitung unter Helm-Chart-Konfiguration erstellen und erstellen Sie die Bereitstellungskonfiguration für Ihre Umgebung.
Legen Sie die folgenden Werte in der Helm-Chart-Konfiguration fest, um TLS zu aktivieren:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. Bereitstellung erstellen
Führen Sie den folgenden Befehl aus, um die Bereitstellung zu erstellen:
kubectl create ns monitoring
helm upgrade --install spanner-omni oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni \
--version VERSION \
--set global.platform=gke \
--set global.insecureMode=false \
--set deployment.enableClientCertificateAuthentication=true \
--namespace NAMESPACE \
--set monitoring.enabled=true
Mit dem Befehl wird ein Bootstrap-Job ausgelöst. Sie können den Fortschritt verfolgen, indem Sie sich die Logs dieses Jobs ansehen:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Die Ausgabe zeigt den Fortschritt an. Wenn der Vorgang abgeschlossen ist, wird die Meldung „Deployment created successfully“ (Bereitstellung erfolgreich erstellt) angezeigt.
3. Status der Pods prüfen
Führen Sie den folgenden Befehl aus, um den Pod-Status zu prüfen:
kubectl get pods --watch --namespace NAMESPACE
Alle Pods haben den Status READY.
4. Zertifikat und Bereitstellung mit Load-Balancer-Details aktualisieren
Dieser Schritt ist erforderlich, wenn Clients eine Verbindung von außerhalb des Kubernetes-Clusters herstellen sollen.
# Get the service details
kubectl get service spanner -n NAMESPACE
# The EXTERNAL-IP:PORT is the API or deployment endpoint for your deployment.
# Update the API certificate with these details.
OMNI_ENDPOINT=EXTERNAL_IP,spanner.NAMESPACE.svc
./google/spanner/bin/spanner certificates update --filename_prefix=api --hostnames=${OMNI_ENDPOINT} --ca_certificate_directory certs --output_directory certs --overwrite
# Update the secrets in Kubernetes
kubectl patch secret tls-certs -n NAMESPACE -p "{\"data\":{\"api.crt\":\"$(base64 -w 0 certs/api.crt)\"}}"
Schritt 4: Mit Spanner Omni interagieren
Sie können mit der Spanner Omni-Bereitstellung von jeder VM aus mit der Spanner Omni CLI interagieren.
Wenn Sie mTLS für Clients aktiviert haben, verwenden Sie die folgenden Flags mit jedem Befehl:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. In Spanner Omni anmelden
Führen Sie den folgenden Befehl aus, um sich anzumelden:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Das Standardpasswort ist admin.
Successfully logged in as "admin"
2. Datenbank erstellen
Führen Sie den folgenden Befehl aus, um eine Datenbank zu erstellen:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. SQL-Shell öffnen
Führen Sie den folgenden Befehl aus, um die Shell zu öffnen:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Tabelle erstellen und Daten hinzufügen
Führen Sie die folgenden SQL-Befehle aus:
spanner> CREATE TABLE names (nameId INT64 NOT NULL, name String(100)) PRIMARY KEY (nameId);
Query OK, 0 rows affected (4.62 sec)
spanner> INSERT names (nameId, name) VALUES (1, "Jack");
Query OK, 1 rows affected (0.18 sec)
5. Deployment prüfen
Führen Sie den folgenden Befehl aus, um die Datenbanken aufzulisten:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Die Ausgabe sieht dann ungefähr so aus:
| NAME | STATUS | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | BEREIT | 1 Std. | 2025-02-07T12:25:30Z | falsch |
Führen Sie den folgenden Befehl aus, um die Daten abzufragen:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Führen Sie die folgenden SQL-Befehle aus:
SHOW TABLES;
SELECT * FROM names;
Alternativ können Sie der Anleitung unter PGAdapter mit
Spanner Omni verwenden folgen, um PGAdapter zu konfigurieren und
mit Tools wie psql zu interagieren.
Schritt 5: Bereitstellung beobachten
Wenn Sie Spanner Omni mit monitoring.enabled=true installiert haben, werden Messwerte von Prometheus erfasst. Sie können diese Messwerte mit Grafana visualisieren.
1. Dienstdetails abrufen
Führen Sie die folgenden Befehle aus, um die Dienstdetails abzurufen:
# Prometheus service details. Default port is 9090.
kubectl get service prometheus-service -n monitoring
# Grafana service details. Default port is 3000.
kubectl get service grafana -n monitoring
Nächste Schritte
- Verwenden Sie Clientbibliotheken und JDBC-Treiber, um Ihre Anwendung mit der Bereitstellung zu verbinden.
- Nutzer und Rollen verwalten.