本頁說明如何將 AlloyDB Omni 部署至 Kubernetes 叢集後,執行及連線至該叢集。
本頁的 Kubernetes 專屬操作說明假設您已熟悉 Kubernetes 的運作方式。
執行 AlloyDB Omni
執行 AlloyDB Omni 的程序取決於您是否在 Kubernetes 叢集上執行 AlloyDB Omni。
啟動 AlloyDB Omni
如要啟動已停止的資料庫叢集,請在資訊清單定義中將 isStopped
設為 false
。
您可以使用 kubectl
在指令列執行這項操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME \
-p '{"spec":{"primarySpec":{"isStopped":false}}}' --type=merge
將 DB_CLUSTER_NAME
替換為這個資料庫叢集的名稱。例如:my-db-cluster
。
檢查 AlloyDB Omni 的狀態
kubectl get dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME
請將 DB_CLUSTER_NAME
替換為資料庫叢集名稱。
停止 AlloyDB Omni
如要停止資料庫叢集,請在資訊清單定義中將 isStopped
設為 true
。
您可以使用 kubectl
在指令列執行這項操作:
kubectl patch dbclusters.alloydbomni.dbadmin.goog DB_CLUSTER_NAME -p '{"spec":{"primarySpec":{"isStopped":true}}}' --type=merge
將 DB_CLUSTER_NAME
替換為這個資料庫叢集的名稱,例如 my-db-cluster
。
連線至 Kubernetes 上執行的 AlloyDB Omni
AlloyDB Omni Kubernetes 運算子可讓您從同一個 Kubernetes 叢集內連線至資料庫叢集,並視需要使用憑證進行驗證。
使用預先安裝的 psql
連線
您可以使用已安裝在執行資料庫的 Pod 上的 psql
用戶端,建立測試連線。
如要這麼做,請執行下列指令:
export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`
kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres
請將 DB_CLUSTER_NAME
替換為資料庫叢集名稱。也就是您建立資料庫叢集時宣告的名稱。
輸入指令後,資料庫伺服器會提示您輸入密碼。輸入您在建立資料庫叢集時,以 Kubernetes Secret 形式提供的 Base64 編碼密碼。舉例來說,如果您使用 Q2hhbmdlTWUxMjM=
的密碼建立資料庫叢集,則這裡要使用的登入密碼為 ChangeMe123
。
AlloyDB Omni Operator 會以 postgres
使用者角色連線至伺服器,並顯示 postgres=#
指令提示。現在可以執行 psql
指令和 SQL 查詢。
如要退出 psql
,請執行 \q
指令。
從同一個叢集中的其他 Pod 連線
根據預設,執行 AlloyDB Omni 資料庫叢集的 Pod 允許來自相同 Kubernetes 叢集的連線。最佳做法是使用 TLS 保護資料庫叢集的所有連線。
如要提供自己的伺服器 TLS 憑證,請在設定資料庫叢集時指定憑證密碼。如果未指定憑證密鑰,AlloyDB Omni Kubernetes 運算子會根據自行簽署的憑證授權單位簽署的憑證,為您建立 TLS 憑證密鑰。無論是哪種情況,您都可以要求資料庫用戶端 Pod 在每次連線時驗證憑證,確保 TLS 安全。
如要使用傳輸層安全標準 (TLS) 建立安全的資料庫連線,請執行下列動作:
在定義建立用戶端連線的 Pod 的資訊清單中,指定 TLS 憑證密碼。可以是下列其中一項:
您已在 Kubernetes 叢集中建立的 TLS 憑證密鑰。如要進一步瞭解如何在 Kubernetes 中使用 TLS 憑證密鑰,請參閱「TLS 密鑰」。
如果您未在資料庫叢集的資訊清單中指定 TLS 密鑰,AlloyDB Omni Kubernetes 運算子會為您建立名為
DB_CLUSTER_NAME-ca-cert
的預設憑證密鑰。
用戶端 Pod 連線至資料庫叢集時,必須先定義下列環境變數,才能建立連線:
將
PGSSLMODE
設為"verify-ca"
。將
PGSSLROOTCERT
設為用戶端 Pod 檔案系統中相關ca.crt
檔案的絕對路徑。
以下範例資訊清單說明如何設定 Pod,安裝包含 psql
指令列用戶端的官方 PostgreSQL 映像檔。這個範例假設您未在定義資料庫叢集的資訊清單中指定任何 TLS 密鑰設定。因此,AlloyDB Omni Kubernetes Operator 會使用名為 dbs-al-cert-DB_CLUSTER_NAME
的預設 TLS 密鑰。
apiVersion: v1
kind: Pod
metadata:
name: postgres
spec:
containers:
- image: "docker.io/library/postgres:latest"
command:
- "sleep"
- "604800"
imagePullPolicy: IfNotPresent
name: db-client
volumeMounts:
- name: ca-cert
mountPath: "/DB_CLUSTER_NAME-ca-cert"
readOnly: true
volumes:
- name: ca-cert
secret:
secretName: dbs-al-cert-DB_CLUSTER_NAME
restartPolicy: Always
請將 DB_CLUSTER_NAME
替換為資料庫叢集名稱。也就是您建立資料庫叢集時宣告的名稱。
您現在可以按照下列步驟,使用 Pod 安全地連線至資料庫叢集:
判斷資料庫叢集的內部 IP 位址:
kubectl get dbclusters.alloydbomni.dbadmin.goog
輸出結果會與下列內容相似:
NAME PRIMARYENDPOINT PRIMARYPHASE DBCLUSTERPHASE DB_CLUSTER_NAME IP_ADDRESS Ready DBClusterReady
請記下
IP_ADDRESS
,並在下一個步驟中使用。使用
psql
從用戶端 Pod 連線至叢集,並設定環境變數,啟用及要求 TLS 憑證驗證:kubectl exec -it postgres -- bash
PGSSLMODE="verify-ca" PGSSLROOTCERT=/DB_CLUSTER_NAME-ca-cert/ca.crt psql -h IP_ADDRESS -p 5432 -U postgres -d postgres
將
IP_ADDRESS
替換為上一步驟判定的內部 IP 位址。