從虛擬私有雲外部連線至叢集

本頁面將探討從已設定的虛擬私有雲 (VPC) 外部,連線至 PostgreSQL 適用的 AlloyDB 叢集的各種方式。本文假設您已建立 AlloyDB 叢集

關於外部連線

AlloyDB 叢集包含Google Cloud 虛擬私有雲中的多個節點。建立叢集時,您也會在其中一個虛擬私有雲和包含新叢集的 Google 管理虛擬私有雲之間,設定私人服務存取權。透過這個對等互連連線,您可以使用私人 IP 位址存取叢集虛擬私有雲中的資源,就像這些資源是您自己虛擬私有雲的一部分一樣。

在某些情況下,應用程式必須從這個已連線的虛擬私有雲外部連線至叢集:

  • 您的應用程式在 Google Cloud 生態系統中的其他位置執行,也就是透過私人服務存取權連線至叢集的虛擬私有雲外部。

  • 您的應用程式在 Google 網路以外的 VPC 上執行。

  • 您的應用程式「在本機」執行,也就是在公用網路上某處的電腦上執行。

在上述所有情況下,您都必須設定額外服務,才能啟用這類外部連線至 AlloyDB 叢集。

外部連線解決方案摘要

我們建議您採用兩種一般解決方案建立外部連線,視需求而定:

  • 如要進行專案開發或原型設計,或是建立成本相對較低的正式環境,請在虛擬私有雲中設定中介虛擬機器 (VM),也就是堡壘主機。您可以使用各種方法,將這個中介 VM 做為外部應用程式環境與 AlloyDB 叢集之間的連線安全通道。

  • 對於需要高可用性的實際工作環境,請考慮透過 Cloud VPN 或 Cloud Interconnect,在 VPC 和應用程式之間建立永久連線

接下來的幾節會詳細說明這些外部連線解決方案。

透過中繼 VM 連線

如要使用開放原始碼工具和最少的額外資源,從虛擬私有雲外部連線至 AlloyDB 叢集,請在該虛擬私有雲內設定的中介 VM 上執行 Proxy 服務。您可以為此目的設定新的 VM,也可以使用 AlloyDB 叢集 VPC 中已執行的 VM。

由於是自行管理的解決方案,使用中介 VM 的成本通常比使用 Network Connectivity 產品更低,設定時間也更快。但也有缺點:連線的可用性、安全性和資料輸送量都會取決於中介 VM,您必須維護該 VM,才能做為專案的一部分。

透過 IAP 連線

使用 Identity-Aware Proxy (IAP),您就能安全地連線至叢集,不必公開中介 VM 的公開 IP 位址。您可以使用防火牆規則和 Identity and Access Management (IAM) 限制透過這條路徑的存取權。因此,IAP 是開發和原型設計等非正式環境用途的理想解決方案。

如要設定叢集的 IAP 存取權,請按照下列步驟操作:

  1. 在外接式用戶端上安裝 Google Cloud CLI

  2. 準備專案以進行 IAP TCP 轉送

    定義新防火牆規則時,請允許通訊埠 22 (SSH) 的輸入 TCP 流量。如果您使用專案的預設網路,並啟用預先填入的default-allow-ssh規則,則不必定義額外規則。

  3. 使用 透過 IAP 的 SSH,在外部用戶端和中介 VM 之間設定通訊埠轉送。

    gcloud compute ssh my-vm \
           --tunnel-through-iap \
           --zone=ZONE_ID \
           --ssh-flag="-L PORT_NUMBER:ALLOYDB_IP_ADDRESS:5432"

    更改下列內容:

    • ZONE_ID:叢集所在區域的 ID,例如 us-central1-a
    • ALLOYDB_IP_ADDRESS:您要連線的 AlloyDB 執行個體 IP 位址。
    • PORT_NUMBER:VM 的通訊埠號碼。
  4. 使用外部用戶端的 psql 測試連線,並連線至您在上一個步驟中指定的本機通訊埠。舉例來說,如要以 postgres 使用者角色連線至通訊埠 5432

    psql -h localhost -p 5432 -U USERNAME

    更改下列內容:

    • USERNAME:要連線至執行個體的 PostgreSQL 使用者,例如預設使用者 postgres

透過 SOCKS Proxy 連線

在中介 VM 上執行 SOCKS 服務,可提供彈性且可擴充的 AlloyDB 叢集連線,並透過 AlloyDB Auth Proxy 提供端對端加密。只要設定得當,就能用於正式環境工作負載。

這項解決方案包含下列步驟:

  1. 在中介 VM 上安裝、設定及執行 SOCKS 伺服器。舉例來說,Dante 就是常見的開放原始碼解決方案。

    設定伺服器,將外部和內部連線繫結至 VM 的 ens4 網路介面。指定內部連線要使用的通訊埠。

  2. 設定 VPC 的防火牆,允許來自適當 IP 位址或範圍的 TCP 流量傳輸至 SOCKS 伺服器設定的通訊埠。

  3. 在外部用戶端上安裝 AlloyDB Auth Proxy

  4. 在外部用戶端上執行 AlloyDB Auth Proxy,並將 ALL_PROXY 環境變數設為中介 VM 的 IP 位址,然後指定 SOCKS 伺服器使用的通訊埠。

    這個範例會設定 AlloyDB Auth Proxy,透過在 198.51.100.1 執行且連接埠為 1080 的 SOCKS 伺服器,連線至 my-main-instance 的資料庫:

    ALL_PROXY=socks5://198.51.100.1:1080 ./alloydb-auth-proxy \
    /projects/PROJECT_ID/locations/REGION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

    如果是從對等互連的虛擬私有雲連線,可以使用中介 VM 的內部 IP 位址;否則請使用外部 IP 位址。

  5. 使用外部用戶端測試連線,並連線至 AlloyDB Auth Proxy 監聽的通訊埠。psql舉例來說,如要以 postgres 使用者角色連線至通訊埠 5432

    psql -h IP_ADDRESS -p PORT_NUMBER -U USERNAME

透過 PostgreSQL 集中器連線

如要在中介 VM 上安裝及執行 AlloyDB Auth Proxy,而非外部用戶端,您可以將其與通訊協定感知 Proxy (也稱為集區器) 配對,啟用與該 Proxy 的安全連線。PostgreSQL 的熱門開放原始碼集區包括 Pgpool-IIPgBouncer

在本解決方案中,您會在中間 VM 上執行 AlloyDB Auth Proxy 和集區器。您的用戶端或應用程式隨後就能透過 SSL 直接安全連線至集區器,不必執行任何額外服務。匯集器會透過 Auth Proxy,將 PostgreSQL 查詢傳遞至 AlloyDB 叢集。

由於 AlloyDB 叢集中的每個執行個體都有個別的內部 IP 位址,因此每個 Proxy 服務只能與一個特定執行個體通訊:主要執行個體、待命執行個體或讀取集區。因此,您需要為叢集中的每個執行個體,執行具有適當設定 SSL 憑證的獨立集區服務。

透過 Cloud VPN 或 Cloud Interconnect 連線

如要進行需要高可用性 (HA) 的實際工作環境作業,建議使用 Google Cloud 網路連線產品:Cloud VPNCloud Interconnect,具體取決於外部服務的需求和網路拓撲。然後設定 Cloud Router,通告適當的路徑。

雖然使用 Network Connectivity 產品的程序比設定中繼 VM 更複雜,但這種做法可將正常運作時間和可用性的負擔從您轉移至 Google。特別是高可用性 VPN 提供 99.99% 的服務水準協議,因此適合用於生產環境。

此外,網路連線解決方案還能免除維護獨立安全 VM 的需求,避免這種做法固有的單點故障風險。

如要進一步瞭解這些解決方案,請參閱「選擇網路連線產品」。

後續步驟