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

如要從設定的虛擬私有雲 (VPC) 網路外部 (例如地端部署環境、其他雲端服務供應商或獨立 VPC 網路) 執行的應用程式,連線至 AlloyDB for PostgreSQL 叢集,可以透過中介虛擬機器 (VM)、Cloud VPN 或 Cloud Interconnect 轉送流量。開始前,請確認您已建立 AlloyDB 叢集。

關於外部連線

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

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

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

  • 應用程式在 Google 網路以外的虛擬私有雲網路中執行。

  • 應用程式在「地端部署」環境中執行,也就是位於公開網際網路上其他位置的機器。

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

外部連線解決方案摘要

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

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

  • 如果正式環境需要高可用性,建議您透過 Cloud VPN 或 Cloud Interconnect,在虛擬私有雲和應用程式之間建立永久連線。

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

透過中介 VM 連線

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

做為自行管理的解決方案,使用中介 VM 的成本通常低於使用網路連線產品,且設定時間更短。不過,這種做法也有缺點:連線的可用性、安全性和資料處理量都取決於中介 VM,而您必須將其視為專案的一部分進行維護。

透過 IAP 連線

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

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

  1. 在外部用戶端安裝 Google Cloud CLI。

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

    定義新的防火牆規則時,請允許輸入 TCP 流量傳送至通訊埠 22 (SSH)。如果您使用專案的預設網路,並啟用預先填入的 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. 設定虛擬私有雲防火牆規則,允許 TCP 流量從適當的 IP 位址或範圍傳送至 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. 在外部用戶端上使用 psql 測試連線,並連線至 AlloyDB Auth Proxy 監聽的通訊埠。舉例來說,如要以 postgres 使用者角色連線至通訊埠 5432,請執行下列指令:

    psql -h IP_ADDRESS -p PORT_NUMBER -U USERNAME

透過 PostgreSQL 集結器連線

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

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

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

透過 Cloud VPN 或 Cloud Interconnect 連線

如果正式環境工作需要高可用性 (HA),建議您使用 Google Cloud 網路連線產品:Cloud VPN 或 Cloud Interconnect,具體取決於外部服務的需求和網路拓撲。接著,您需要設定 Cloud Router,以 advertise 適當的路由。

雖然使用網路連線產品的程序比設定中介 VM 更為複雜,但這種方法可將運作時間和可用性的負擔從您轉移到 Google。特別是高可用性 VPN 提供 99.99% 的服務水準協議,適合用於正式環境。

Network Connectivity 解決方案也讓您不必在應用程式中維護獨立的安全 VM,避免這種做法固有的單點故障風險。

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

後續步驟