Spanner Omni usa TLS 1.3 para encriptar los datos que fluyen entre el cliente y el servidor, y entre los servidores de Spanner Omni. Spanner Omni proporciona mTLS para mejorar la seguridad, ya que ambas partes establecen la autenticidad de la otra antes de intercambiar datos. Si usas encriptación, tus servidores deben comunicarse a través de mTLS. Puedes elegir si tu cliente y servidor también usan mTLS.
La versión Preview de Spanner Omni no admite la encriptación TLS. Para obtener las funciones que te permiten crear implementaciones con encriptación TLS, comunícate con Google y solicita acceso anticipado a la versión completa de Spanner Omni.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos:
Crea un clúster de Kubernetes. La configuración admite Google Kubernetes Engine (GKE) y Amazon Elastic Kubernetes Service (Amazon EKS). Es posible que debas personalizar la configuración para que funcione en otros entornos.
Asegúrate de que el clúster de Kubernetes pueda acceder al artefacto de Artifact Registry que aloja el contenedor de Spanner Omni.
Instala y configura la herramienta de línea de comandos de
kubectly Helm.Si configuras el entorno de Kubernetes en máquinas de la plataforma de virtualización de vSphere, inhabilita la virtualización del contador de marcas de tiempo (TSC) agregando
monitor_control.virtual_rdtsc = FALSEal archivo de configuración.vmxde la máquina virtual. Esto garantiza que TrueTime funcione correctamente.Verifica que tu entorno cumpla con los requisitos del sistema de Spanner Omni.
Paso 1: Genera los certificados
Debes crear tres conjuntos de certificados:
Certificados de API: Ayudan a proteger el servidor de la API de Spanner Omni.
Certificados de servidor: Ayudan a proteger la comunicación entre servidores.
Certificados de cliente: Los usuarios finales o las aplicaciones los usan para establecer su identidad y confianza con los servidores de Spanner Omni.
Una autoridad certificadora (CA) emite estos certificados. Spanner Omni proporciona herramientas para crear una CA autofirmada y los tres tipos de certificados.
Realiza los siguientes pasos en una de tus máquinas. En los pasos, se supone que el espacio de nombres es spanner-ns. Cambia esto al espacio de nombres que pretendes usar en tu implementación.
Puedes crear estos certificados en tu estación de trabajo con la CLI de Spanner Omni.
1. Crea una autoridad certificadora (AC)
Una autoridad certificadora (CA) emite todos los certificados. Es posible que tu organización tenga una CA central, o bien puedes usar una CA pública. Si bien puedes usar la misma CA para todos los certificados, los certificados de API y los certificados de cliente deben usar la misma CA.
Spanner Omni te permite crear una CA privada.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
El comando create-ca genera el certificado de la AC en el directorio certs.
Puedes copiar este certificado para usarlo como la CA de los certificados de la API o crear una CA diferente. Asegúrate de usar la CA correcta cuando crees certificados.
cp certs/ca.crt certs/ca-api.crt
El directorio $HOME/.spanner/private-keys contiene la clave privada de la CA.
Es fundamental hacer una copia de seguridad de este directorio y protegerlo. Los usuarios con acceso a la clave privada pueden firmar certificados arbitrarios en los que confían los clientes que confían en la AC autofirmada. De manera opcional, puedes crear una CA adicional (o usar una CA de confianza externa) para los certificados de la API. En este documento, se usa la misma CA para todos los tipos de certificados.
2. Genera certificados de servidor
Debes generar dos tipos de certificados de servidor:
Certificado de API: Usa este certificado para encriptar la comunicación de los sistemas que interactúan con la implementación.
Certificado del servidor de Spanner: Los servidores de Spanner Omni usan este certificado para encriptar la comunicación entre sí.
Esta configuración proporciona flexibilidad para administrar estos certificados. Por ejemplo, te permite usar la rotación de certificados.
Crea el certificado del servidor de Spanner
Para crear el certificado del servidor, ejecuta el siguiente comando:
# 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
Este comando crea server.crt y server.key en el directorio certs.
Crea el certificado de API
Para crear el certificado de API, ejecuta el siguiente comando:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Este comando crea api.crt y api.key en el directorio certs. Si es necesario, usa una CA de confianza externa para los certificados de la API.
3. Genera certificados de cliente
Puedes usar certificados de cliente para autenticar usuarios y aplicaciones. Los certificados de cliente habilitan mTLS entre el cliente y el servidor. Puedes omitir este paso si no planeas usar mTLS.
La misma CA que firma el certificado de la API debe firmar los certificados de cliente, que también deben contener un nombre de usuario para la autorización. Para este ejemplo, usa el usuario admin, que es el usuario predeterminado para cada base de datos nueva. Para obtener más información, consulta Autenticación y autorización en Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Este comando crea client.crt y client.key en el directorio clientcerts. Envía estos archivos a cualquier máquina que se conecte a la implementación.
Si planeas usar certificados de cliente con la biblioteca cliente de Java, debes generar la clave del certificado en formato PKCS#8. Usa el siguiente comando:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Paso 2: Envía los certificados al clúster de Kubernetes
Ejecuta los siguientes comandos para enviar los certificados a tu clúster de Kubernetes:
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
Paso 3: Crea la implementación con encriptación TLS
Sigue estos pasos para crear tu implementación con encriptación TLS.
1. Prepara la configuración de Helm
Consulta Crea una configuración de gráfico de Helm y crea la configuración de implementación para tu entorno.
Para habilitar TLS, establece los siguientes valores en la configuración de tu gráfico de Helm:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. Crea la implementación:
Ejecute el siguiente comando para crear la implementación:
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
El comando activa un trabajo de arranque. Puedes hacer un seguimiento del progreso observando los registros de este trabajo:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
El resultado indica el progreso. Cuando se complete, verás un mensaje que indica que se creó la Deployment correctamente.
3. Verifica el estado de los Pods
Ejecuta el siguiente comando para verificar el estado del pod:
kubectl get pods --watch --namespace NAMESPACE
Todos los Pods están en el estado READY.
4. Actualiza el certificado y la implementación con los detalles del balanceador de cargas
Este paso es obligatorio si deseas que los clientes se conecten desde fuera del clúster de Kubernetes.
# 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)\"}}"
Paso 4: Interactúa con Spanner Omni
Puedes interactuar con tu implementación de Spanner Omni desde cualquier VM con la CLI de Spanner Omni.
Si habilitaste mTLS para los clientes, usa las siguientes marcas con cada comando:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. Accede a Spanner Omni
Ejecuta el siguiente comando para acceder:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
La contraseña predeterminada es admin.
Successfully logged in as "admin"
2. Crea una base de datos
Ejecuta el siguiente comando para crear una base de datos:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. Abre SQL Shell
Ejecuta el siguiente comando para abrir el shell:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --deployment-endpoint=DEPLOYMENT_ENDPOINT --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
4. Crea una tabla y agrega datos
Ejecuta los siguientes comandos SQL:
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. Verifica la implementación
Para enumerar las bases de datos, ejecuta el siguiente comando:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
El resultado es similar al siguiente:
| NOMBRE | ESTADO | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | READY | 1 h | 2025-02-07T12:25:30Z | falso |
Para consultar los datos, ejecuta el siguiente comando:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Ejecuta los siguientes comandos SQL:
SHOW TABLES;
SELECT * FROM names;
Como alternativa, puedes seguir las instrucciones en Uso de PGAdapter con Spanner Omni para configurar PGAdapter y realizar interacciones con herramientas como psql.
Paso 5: Supervisa la implementación
Si instalaste Spanner Omni con monitoring.enabled=true, Prometheus recopila métricas. Puedes usar Grafana para visualizar estas métricas.
1. Obtén los detalles del servicio
Ejecuta los siguientes comandos para obtener los detalles del servicio:
# 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
¿Qué sigue?
- Usa bibliotecas cliente y controladores JDBC para conectar tu aplicación con la implementación.
- Administra usuarios y roles.