Spanner Omni 會使用 TLS 1.3 加密用戶端與伺服器之間,以及 Spanner Omni 伺服器之間的資料流。Spanner Omni 提供 mTLS,可加強安全性,雙方在交換任何資料前,會先驗證彼此的真實性。如果您使用加密功能,伺服器就必須透過 mTLS 通訊。您可以選擇用戶端和伺服器是否也使用 mTLS。
Spanner Omni 的預先發布版本不支援 TLS 加密。如要取得可建立 TLS 加密部署作業的功能,請與 Google 聯絡,要求搶先存取完整版 Spanner Omni。
事前準備
請確認符合下列規定:
建立 Kubernetes 叢集。這項設定支援 Google Kubernetes Engine (GKE) 和 Amazon Elastic Kubernetes Service (Amazon EKS)。您可能需要自訂設定,才能在其他環境中運作。
確認 Kubernetes 叢集可以存取 Artifact Registry 構件,該構件會代管 Spanner Omni 容器。
安裝並設定
kubectl指令列工具和 Helm。如果您在 vSphere 虛擬化平台機器上設定 Kubernetes 環境,請在虛擬機器的
.vmx設定檔中加入monitor_control.virtual_rdtsc = FALSE,停用時間戳記計數器 (TSC) 虛擬化。確保 TrueTime 正常運作。確認環境符合 Spanner Omni 系統需求。
步驟 1:產生憑證
您必須建立三組憑證:
API 憑證:有助於保護 Spanner Omni API 伺服器。
伺服器憑證:有助於保護伺服器間的通訊。
用戶端憑證:使用者或應用程式會使用這些憑證,與 Spanner Omni 伺服器建立身分和信任關係。
這些憑證是由認證授權單位 (CA) 核發。Spanner Omni 提供工具,可建立自行簽署的 CA 和所有三種憑證。
請在其中一部電腦上執行下列步驟。這些步驟假設命名空間為 spanner-ns。請將此值變更為您要在部署作業中使用的命名空間。
您可以使用 Spanner Omni CLI 在工作站上建立這些憑證。
1. 建立憑證授權單位 (CA)
所有憑證都由認證授權單位 (CA) 核發。貴機構可能會有中央 CA,您也可以使用公開 CA。雖然您可以為所有憑證使用相同的 CA,但 API 憑證和用戶端憑證必須使用相同的 CA。
您可以使用 Spanner Omni 建立私有 CA。
./google/spanner/bin/spanner certificates create-ca --ca-certificate-directory=certs
create-ca 指令會在 certs 目錄中產生 CA 憑證。您可以複製這個憑證做為 API 憑證的 CA,也可以建立其他 CA。建立憑證時,請務必使用正確的 CA。
cp certs/ca.crt certs/ca-api.crt
$HOME/.spanner/private-keys 目錄包含 CA 的私密金鑰。請務必備份並保護這個目錄。有權存取私密金鑰的使用者可以簽署任意憑證,而信任自簽 CA 的用戶端會信任這些憑證。您也可以選擇為 API 憑證建立額外的 CA (或使用外部信任的 CA)。本文件針對所有類型的憑證使用相同的 CA。
2. 產生伺服器憑證
您必須產生兩種類型的伺服器憑證:
API 憑證:使用這個憑證加密與部署項目互動的系統通訊。
Spanner 伺服器憑證:Spanner Omni 伺服器會使用這個憑證加密彼此之間的通訊。
這項設定可彈性管理這些憑證。例如,您可以透過這項功能輪替憑證。
建立 Spanner 伺服器憑證
如要建立伺服器憑證,請執行下列指令:
# 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
這個指令會在 certs 目錄中建立 server.crt 和 server.key。
建立 API 憑證
如要建立 API 憑證,請執行下列指令:
OMNI_ENDPOINT=spanner.NAMESPACE
./google/spanner/bin/spanner certificates create-server --filename-prefix=api --hostnames=${OMNI_ENDPOINT} --ca-certificate-directory certs --output-directory certs
這個指令會在 certs 目錄中建立 api.crt 和 api.key。如有必要,請使用外部信任的 CA 做為 API 憑證。
3. 產生用戶端憑證
您可以使用用戶端憑證驗證使用者和應用程式。用戶端憑證可啟用用戶端與伺服器之間的 mTLS。如果您不打算使用 mTLS,可以略過這個步驟。
簽署 API 憑證的 CA 必須簽署用戶端憑證,且用戶端憑證也必須包含授權用的使用者名稱。在本例中,請使用 admin 使用者,這是每個新資料庫的預設使用者。詳情請參閱「Spanner Omni 中的驗證和授權」。
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs
這個指令會在 clientcerts 目錄中建立 client.crt 和 client.key。將這些檔案傳送至連線到部署作業的任何電腦。
如果您打算搭配 Java 用戶端程式庫使用用戶端憑證,就必須以 PKCS#8 格式產生憑證金鑰。使用下列指令:
USERNAME=admin
./google/spanner/bin/spanner certificates create-client $USERNAME --output-directory clientcerts --ca-certificate-directory certs --generate-pkcs8-key
步驟 2:將憑證推送至 Kubernetes 叢集
執行下列指令,將憑證推送至 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
步驟 3:建立採用傳輸層安全標準 (TLS) 加密的部署作業
請按照下列步驟建立採用 TLS 加密的部署作業。
1. 準備 Helm 設定
請參閱「建立 Helm chart 設定」,並為您的環境建立部署設定。
如要啟用 TLS,請在 Helm 資訊套件設定中設定下列值:
# Enables TLS
global:
insecureMode: false
# Enables client certificate authentication (mTLS)
deployment:
enableClientCertificateAuthentication: true
2. 建立部署作業
執行下列指令來建立部署作業:
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
這個指令會觸發啟動工作。您可以查看這項工作的記錄,追蹤進度:
kubectl logs -n NAMESPACE -l app.kubernetes.io/component=bootstrap -f
輸出內容會顯示進度。完成後,畫面會顯示「Deployment created successfully」(部署作業已成功建立) 訊息。
3. 檢查 Pod 的狀態
執行下列指令,確認 Pod 狀態:
kubectl get pods --watch --namespace NAMESPACE
所有 Pod 都處於 READY 狀態。
4. 使用負載平衡器詳細資料更新憑證和部署作業
如要讓用戶端從 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)\"}}"
步驟 4:與 Spanner Omni 互動
您可以使用 Spanner Omni CLI,從任何 VM 與 Spanner Omni 部署作業互動。
如果您為用戶端啟用 mTLS,請在每個指令中使用下列標記:
--client-certificate-directory=CLIENT_CERTIFICATE_DIRECTORY--ca-certificate-file=API_CA_CERT_FILE_PATH
1. 登入 Spanner Omni
執行下列指令登入:
./google/spanner/bin/spanner auth login admin --ca-certificate-file=certs/ca-api.crt \
--client-certificate_directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
預設密碼為 admin。
Successfully logged in as "admin"
2. 建立資料庫
執行下列指令來建立資料庫:
./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
執行下列指令來開啟 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. 建立資料表並新增資料
執行下列 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. 驗證 Deployment
如要列出資料庫,請執行下列指令:
./google/spanner/bin/spanner databases list --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
輸出看起來類似以下內容:
| 名稱 | 狀態 | VERSION_RETENTION_PERIOD | EARLIEST_VERSION_TIME | ENABLE_DROP_PROTECTION |
|---|---|---|---|---|
| DATABASE_NAME | 已就緒 | 1 小時 | 2025-02-07T12:25:30Z | false |
如要查詢資料,請執行下列指令:
./google/spanner/bin/spanner sql --database=DATABASE_NAME --ca-certificate-file=certs/ca-api.crt --client-certificate-directory=clientcerts --deployment-endpoint=DEPLOYMENT_ENDPOINT
執行下列 SQL 指令:
SHOW TABLES;
SELECT * FROM names;
或者,您可以按照「搭配 Spanner Omni 使用 PGAdapter」一文中的操作說明,設定 PGAdapter 並使用 psql 等工具互動。
步驟 5:監控部署作業
如果您使用 monitoring.enabled=true 安裝 Spanner Omni,Prometheus 會抓取指標。您可以使用 Grafana 顯示這些指標。
1. 取得服務詳細資料
執行下列指令來取得服務詳細資料:
# 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
後續步驟
- 使用用戶端程式庫和 JDBC 驅動程式,將應用程式連線至部署作業。
- 管理使用者和角色。