Spanner Omni menggunakan TLS 1.3 untuk mengenkripsi data yang mengalir antara klien dan server, serta antara server Spanner Omni. Spanner Omni menyediakan mTLS untuk meningkatkan keamanan di mana kedua pihak saling membangun keaslian sebelum bertukar data. Jika Anda menggunakan enkripsi, server Anda harus berkomunikasi melalui mTLS. Anda dapat memilih apakah klien dan server Anda juga menggunakan mTLS.
Versi Pratinjau Spanner Omni tidak mendukung enkripsi TLS. Untuk mendapatkan fitur yang memungkinkan Anda membuat deployment dengan enkripsi TLS, hubungi Google untuk meminta akses awal ke Spanner Omni versi lengkap.
Sebelum memulai
Pastikan Anda memenuhi persyaratan berikut:
Membuat cluster Kubernetes Konfigurasi ini mendukung Google Kubernetes Engine (GKE) dan Amazon Elastic Kubernetes Service (Amazon EKS). Anda mungkin perlu menyesuaikan konfigurasi agar berfungsi di lingkungan lain.
Pastikan cluster Kubernetes dapat mengakses artefak Artifact Registry yang menghosting penampung Spanner Omni.
Instal dan konfigurasi alat command line
kubectldan Helm.Jika Anda menyiapkan lingkungan Kubernetes di mesin platform virtualisasi vSphere, nonaktifkan virtualisasi Time Stamp Counter (TSC) dengan menambahkan
monitor_control.virtual_rdtsc = FALSEke file konfigurasi.vmxvirtual machine. Hal ini memastikan TrueTime berfungsi dengan benar.Pastikan lingkungan Anda memenuhi persyaratan sistem Spanner Omni.
Langkah 1: Buat sertifikat
Anda harus membuat tiga set sertifikat:
Sertifikat API: Sertifikat ini membantu melindungi server Spanner Omni API.
Sertifikat server: Sertifikat ini membantu melindungi komunikasi antar-server.
Sertifikat klien: Pengguna akhir atau aplikasi menggunakannya untuk menetapkan identitas dan kepercayaan mereka dengan server Spanner Omni.
Sertifikat ini diterbitkan oleh Otoritas Sertifikasi (CA). Spanner Omni menyediakan alat untuk membuat CA yang ditandatangani sendiri dan ketiga jenis sertifikat.
Lakukan langkah-langkah berikut di salah satu perangkat Anda. Langkah-langkah ini mengasumsikan bahwa
namespace adalah spanner-ns. Ubah ini ke namespace yang ingin Anda gunakan
dalam deployment.
Anda dapat membuat sertifikat ini di workstation menggunakan Spanner Omni CLI.
1. Buat Otoritas Sertifikasi (CA)
Otoritas Sertifikasi (CA) menerbitkan semua sertifikat. Organisasi Anda mungkin memiliki CA pusat, atau Anda dapat menggunakan CA publik. Meskipun Anda dapat menggunakan CA yang sama untuk semua sertifikat, sertifikat API dan sertifikat klien harus menggunakan CA yang sama.
Spanner Omni memungkinkan Anda membuat CA pribadi.
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
Perintah create-ca akan membuat sertifikat CA di direktori certs.
Anda dapat menyalin sertifikat ini untuk digunakan sebagai CA bagi sertifikat API, atau membuat CA lain. Pastikan Anda menggunakan CA yang benar saat membuat sertifikat.
cp certs/ca.crt certs/ca-api.crt
Direktori $HOME/.spanner/private-keys berisi kunci pribadi untuk CA.
Anda harus mencadangkan dan mengamankan direktori ini. Pengguna dengan akses ke kunci pribadi dapat menandatangani sertifikat arbitrer yang dipercayai oleh klien yang mempercayai CA yang ditandatangani sendiri. Jika perlu, Anda dapat membuat CA tambahan (atau menggunakan CA yang dipercaya secara eksternal) untuk sertifikat API. Dokumen ini menggunakan CA yang sama untuk semua jenis sertifikat.
2. Membuat sertifikat server
Anda harus membuat dua jenis sertifikat server:
Sertifikat API: Gunakan sertifikat ini untuk mengenkripsi komunikasi dari sistem yang berinteraksi dengan deployment.
Sertifikat server Spanner: Server Spanner Omni menggunakan sertifikat ini untuk mengenkripsi komunikasi satu sama lain.
Konfigurasi ini memberikan fleksibilitas dalam mengelola sertifikat ini. Misalnya, Anda dapat menggunakan rotasi sertifikat.
Buat sertifikat server Spanner
Untuk membuat sertifikat server, jalankan perintah berikut:
# 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
Perintah ini akan membuat server.crt dan server.key di direktori certs.
Buat sertifikat API
Untuk membuat sertifikat API, jalankan perintah berikut:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
Perintah ini akan membuat api.crt dan api.key di direktori certs. Jika
perlu, gunakan CA tepercaya eksternal untuk sertifikat API.
3. Membuat sertifikat klien
Anda dapat menggunakan sertifikat klien untuk mengautentikasi pengguna dan aplikasi. Sertifikat klien memungkinkan mTLS antara klien dan server. Anda dapat melewati langkah ini jika Anda tidak berencana menggunakan mTLS.
CA yang sama yang menandatangani sertifikat API harus menandatangani sertifikat klien, yang juga harus berisi nama pengguna untuk otorisasi. Untuk contoh ini, gunakan pengguna
admin, yang merupakan pengguna default untuk setiap database baru. Untuk mengetahui informasi selengkapnya, lihat Autentikasi dan otorisasi di Spanner Omni.
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
Perintah ini akan membuat client.crt dan client.key di direktori clientcerts. Kirim file ini ke mesin mana pun yang terhubung ke deployment.
Jika Anda berencana menggunakan sertifikat klien dengan library klien Java, Anda harus membuat kunci sertifikat dalam format PKCS#8. Gunakan perintah berikut:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
Langkah 2: Kirim sertifikat ke cluster Kubernetes
Jalankan perintah berikut untuk mengirimkan sertifikat ke cluster Kubernetes Anda:
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
Langkah 3: Buat deployment dengan enkripsi TLS
Ikuti langkah-langkah berikut untuk membuat deployment dengan enkripsi TLS.
1. Menyiapkan konfigurasi Helm
Lihat Membuat konfigurasi diagram Helm dan buat konfigurasi deployment untuk lingkungan Anda.
Untuk mengaktifkan TLS, tetapkan nilai berikut dalam konfigurasi diagram Helm Anda:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. Buat deployment
Jalankan perintah berikut untuk membuat deployment:
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
Perintah ini memicu tugas bootstrap. Anda dapat melacak progres dengan melihat log tugas ini:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
Output menunjukkan progres. Setelah selesai, Anda akan melihat pesan yang menyatakan "Deployment created successfully".
3. Periksa status pod
Jalankan perintah berikut untuk memverifikasi status pod:
kubectl get pods --watch --namespace NAMESPACE
Semua pod dalam status READY.
4. Perbarui sertifikat dan deployment dengan detail load balancer
Langkah ini diperlukan jika Anda ingin klien terhubung dari luar cluster 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)\"}}"
Langkah 4: Berinteraksi dengan Spanner Omni
Anda dapat berinteraksi dengan deployment Spanner Omni dari VM mana pun menggunakan Spanner Omni CLI.
Jika Anda mengaktifkan mTLS untuk klien, gunakan flag berikut dengan setiap perintah:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. Login ke Spanner Omni
Jalankan perintah berikut untuk login:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Sandi default-nya adalah admin.
Successfully logged in as "admin"
2. Buat database
Jalankan perintah berikut untuk membuat database:
./google/spanner/bin/spanner --deployment-endpoint=DEPLOYMENT_ENDPOINT databases create DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts
3. Buka SQL Shell
Jalankan perintah berikut untuk membuka 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. Membuat tabel dan menambahkan data
Jalankan perintah SQL berikut:
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. Memverifikasi deployment
Untuk mencantumkan database, jalankan perintah berikut:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Outputnya akan terlihat mirip seperti berikut:
| NAMA | STATUS | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | SIAP | 1j | 2025-02-07T12:25:30Z | false |
Untuk membuat kueri data, jalankan perintah berikut:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
Jalankan perintah SQL berikut:
SHOW TABLES;
SELECT * FROM names;
Atau, Anda dapat mengikuti petunjuk di Menggunakan PGAdapter dengan Spanner Omni untuk mengonfigurasi PGAdapter dan berinteraksi menggunakan alat seperti psql.
Langkah 5: Pantau deployment
Jika Anda menginstal Spanner Omni dengan monitoring.enabled=true,
Prometheus akan meng-scrape metrik. Anda dapat menggunakan Grafana untuk memvisualisasikan metrik ini.
1. Mendapatkan detail layanan
Jalankan perintah berikut untuk mendapatkan detail layanan:
# 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
Langkah berikutnya
- Gunakan Library klien dan driver JDBC untuk menghubungkan aplikasi Anda dengan deployment.
- Mengelola pengguna dan peran.