使用 Private Service Connect 連線至執行個體

如要從屬於不同群組、團隊、專案或組織的多個虛擬私有雲 (VPC) 網路,連線至 AlloyDB for PostgreSQL 主要、讀取集區或次要執行個體,而不設定虛擬私有雲網路對接,可以設定 Private Service Connect。

必要的角色

視您要設定 Private Service Connect 基礎架構,還是以資料庫用戶端身分連線,授予適當的身分與存取權管理 (IAM) 角色:

工作 角色 說明
設定 Private Service Connect 端點和網路連結 Compute 網路管理員 (roles/compute.networkAdmin) 可授予用戶虛擬私有雲網路的完整控管權限,該網路會啟動與 AlloyDB 執行個體的連線。如果您從多個虛擬私有雲網路連線,每個網路都會由各自的管理員管理。
在共用虛擬私有雲服務專案中,建立 Private Service Connect 端點或用戶端資源 Compute 網路使用者 (roles/compute.networkUser) 授予共用虛擬私有雲主專案或共用子網路的權限,讓附加服務專案中的服務專案管理員和服務代理,能建立使用主專案共用虛擬私有雲網路和子網路的 Private Service Connect 端點或用戶端 VM。
設定私人 DNS 區域和記錄 DNS 管理員 (roles/dns.admin) 可完整控管 Cloud DNS 資源,包括私人 DNS 區域和記錄集。
建立及管理 AlloyDB 叢集和執行個體 AlloyDB 管理員 (roles/alloydb.admin) 可完整控管 AlloyDB 叢集和執行個體的生命週期,如果改用自訂角色,請授予 alloydb.clusters.create (在叢集啟用 Private Service Connect) 以及 alloydb.instances.create 和 alloydb.instances.update (設定允許的用戶專案和網路連結 URI)。
以用戶端身分連線至執行個體 AlloyDB 用戶端 (roles/alloydb.client) 和服務使用情形消費者 (roles/serviceusage.serviceUsageConsumer) (選用) 如果透過 AlloyDB Auth Proxy 或 AlloyDB 語言連接器連線,則必須提供。如果您也使用 IAM 資料庫驗證機制,請授予 AlloyDB 資料庫使用者 (roles/alloydb.databaseUser) 角色。如果使用內建資料庫驗證機制直接連線,用戶端連線就不需要 IAM 角色。

建立 Private Service Connect 端點

Private Service Connect 端點是用戶虛擬私有雲網路中的內部 IP 位址,該網路中的用戶端可以直接存取,連線至 AlloyDB 執行個體。

如要讓 AlloyDB 自動建立 Private Service Connect 端點,請按照下列步驟操作:

您也可以手動建立 Private Service Connect 端點,或在多專案 Shared VPC 或中樞與輪輻網路中設定端點。

自動建立端點

如要設定執行個體,讓 AlloyDB 自動建立 Private Service Connect 端點,請按照下列概略步驟操作:

  1. 建立服務連線政策。
  2. 建立 AlloyDB 執行個體。
  3. 擷取端點。
  4. 更新執行個體,自動建立端點。
  5. 設定傳出連線。

建立服務連線政策

您可以使用 Google Cloud 控制台或 Google Cloud CLI,重複使用現有的服務連線政策,或建立服務連線政策。

服務連線政策可讓您授權指定的服務類別,在用戶端虛擬私有雲網路中建立 Private Service Connect 端點。您可以使用服務連線政策,讓 AlloyDB 自動建立 Private Service Connect 端點。

控制台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往「Private Service Connect」

  2. 按一下「Connection policies」(連線政策) 分頁標籤。

  3. 按一下「Create connection policy」(建立連線政策)。

  4. 輸入連線政策的名稱。

  5. 在「Service details」(服務詳細資料) 區段中,選取「Service class」(服務類別) google-cloud-alloydb。

  6. 在「Endpoints scope」(端點範圍) 部分,選取這項政策適用的「Network」(網路) 和「Region」(區域)。

  7. 在「Endpoints configuration」(端點設定) 區段中,從「Subnetworks」(子網路) 選單選取一或多個子網路。子網路用於為端點分配 IP 位址。

  8. 選用:指定政策的「連線限制」。這項限制決定了 AlloyDB 可為這項連線政策建立的端點數量。如未指定連線限制,則沒有限制。

  9. 點選「建立政策」。

gcloud

如要建立服務連線政策,請使用 service-connection-policies create 指令。

gcloud network-connectivity service-connection-policies create POLICY_NAME \
    --network=NETWORK \
    --project=PROJECT_ID \
    --region=REGION \
    --service-class=SERVICE_CLASS \
    --subnets=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETS \
    --psc-connection-limit=LIMIT \
    --description="DESCRIPTION" \
    --producer-instance-location=PRODUCER_INSTANCE_LOCATION \
    --allowed-google-producers-resource-hierarchy-level=LIST_OF_NODES

更改下列內容:

  • POLICY_NAME:服務連線政策的名稱。
  • NETWORK:這項政策適用的網路。
  • PROJECT_ID:虛擬私有雲網路專案的專案 ID 或編號。如果是 Shared VPC 虛擬私有雲網路,您必須在主專案中部署服務連線政策,因為服務專案不支援這些政策。
  • REGION:這項政策適用的區域。如要自動建立服務連線,每個區域都必須有相同的政策。
  • SERVICE_CLASS:供應商提供的服務類別資源 ID。AlloyDB 的服務類別為 google-cloud-alloydb。
  • SUBNETS:一或多個一般用戶子網路,用於為 Private Service Connect 端點分配 IP 位址。系統會自動分配這些 IP 位址,並在建立及刪除代管服務執行個體時,將這些位址傳回子網路集區。子網路必須與服務連線政策位於相同區域。如果多項連線政策共用相同區域,則可在這些政策中重複使用相同子網路。您可以在逗號分隔清單中輸入多個子網路。
  • LIMIT:您可以使用這項政策建立的端點數量上限。如未指定,則不設限。
  • DESCRIPTION:服務連線政策的選用說明。
  • PRODUCER_INSTANCE_LOCATION:指定政策是否會自動連線至 AlloyDB 執行個體。您可以將這個值設為下列其中一項:

    • none (預設):AlloyDB 執行個體與服務連線政策位於相同專案。在 Shared VPC 環境中,如果 AlloyDB 執行個體位於服務專案,且您在主專案中建立連線政策,則必須將這個參數設為 custom-resource-hierarchy-levels。
    • custom-resource-hierarchy-levels:您必須透過 allowed-google-producers-resource-hierarchy-level 參數,為要自動連線的專案設定 Resource Manager 位置路徑。
  • LIST_OF_NODES:如果產生器執行個體位置設為 custom-resource-hierarchy-levels,請設定這個參數。這個參數會列出專案、資料夾和組織,其中包含您要自動連線的執行個體。清單格式為 projects/PROJECT_ID、folders/FOLDER_ID 或 organizations/ORGANIZATION_ID。

舉例來說,下列指令會為 google-cloud-alloydb 服務類別建立服務連線政策,從 managed-service-subnet 子網路分配 IP 位址。這項政策最多可建立 10 個 Private Service Connect 端點。端點必須建立在與代管服務執行個體位於相同組織的專案中。AlloyDB 執行個體位於 myproject 專案。

gcloud network-connectivity service-connection-policies create alloydb-policy \
    --network=default \
    --project=my-project \
    --region=us-central1 \
    --service-class=google-cloud-alloydb \
    --subnets=managed-service-subnet \
    --psc-connection-limit=10 \
    --producer-instance-location=custom-resource-hierarchy-levels \
    --allowed-google-producers-resource-hierarchy-level=projects/myproject

建立 AlloyDB 執行個體

您可以建立已啟用 Private Service Connect 的執行個體,並使用 Google Cloud 控制台、gcloud CLI 或 Terraform,將執行個體設為自動建立端點。

控制台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 點選「建立叢集」。

  3. 在「叢集 ID」部分輸入 my-cluster。

  4. 輸入密碼。請記下這個密碼,因為您會在本快速入門導覽課程中使用。

  5. 保留預設資料庫版本。

  6. 選取 us-central1 (Iowa) 區域。

  7. 保留預設執行個體 ID my-cluster-primary。

  8. 在「可用區可用性」部分,保留「單一可用區」選項。雖然我們不建議在正式環境中使用單一可用區執行個體,但您可以在本快速入門導覽課程中使用單一可用區,盡可能降低費用。詳情請參閱「使用基本執行個體來降低成本」。

  9. 選取 2 vCPU, 16 GB 機型。

  10. 保留私人 IP 連線。

    1. 選取「Private Service Connect (PSC)」。
    2. 按一下「Add an endpoint」(新增端點)。
    3. 選取要建立端點的專案。
    4. 選取網路。
    5. 按一下「Check policy」(檢查政策),查看服務連線政策資訊。
  11. 保留「網路安全」下方的預設設定。

  12. 請勿變更「顯示進階選項」中的設定。

  13. 按一下「Create cluster」(建立叢集)。AlloyDB 可能需要幾分鐘才能建立叢集,並顯示在主要叢集的「Overview」(總覽) 頁面。

gcloud

如要建立叢集,請使用 gcloud alloydb clusters create 指令。

gcloud alloydb clusters create CLUSTER_ID \
  --password=PASSWORD \
  --region=REGION_ID \
  --project=PROJECT_ID \
  --enable-private-service-connect

更改下列內容:

  • CLUSTER_ID:您要建立的叢集 ID。開頭須為小寫英文字母,且只能使用小寫英文字母、數字和連字號。

  • PASSWORD:預設 postgres 使用者的密碼。

  • REGION_ID:叢集所在的區域。

  • PROJECT_ID:叢集所在專案的 ID。

這個指令會啟動長時間執行的作業,並傳回作業 ID。

如要建立 AlloyDB 執行個體 (主要或讀取集區),以便使用 Private Service Connect,請使用 gcloud alloydb instances create 指令。加入 --allowed-psc-projects 參數,指定哪些用戶專案可以建立端點,連線至這個執行個體。

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=PRIMARY \
    --cpu-count=CPU_COUNT \
    --availability-type=AVAILABILITY \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --allowed-psc-projects=ALLOWED_PROJECT_LIST \
    --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI \
    --psc-auto-connections=network=CONSUMER_NETWORK,project=CONSUMER_PROJECT

更改下列內容:

  • INSTANCE_ID:要建立的執行個體 ID。開頭須為小寫英文字母,可以使用小寫英文字母、數字和連字號。
  • CPU_COUNT:執行個體所需的 vCPU 數量。有效值包括:
    • 2:2 個 vCPU,16 GB RAM
    • 4:4 個 vCPU,32 GB RAM
    • 8:8 個 vCPU,64 GB RAM
    • 16:16 個 vCPU,128 GB RAM
    • 32:32 個 vCPU,256 GB RAM
    • 64:64 個 vCPU,512 GB RAM
    • 96:96 個 vCPU,768 GB RAM
    • 128:128 個 vCPU,864 GB RAM
  • AVAILABILITY:指出這個執行個體是否應具備高可用性 (HA),並在多個可用區中設有節點。有效值包括:
    • REGIONAL:建立高可用性執行個體,其中包含獨立的使用中和待命節點,並在兩者之間自動容錯移轉。這是預設值,適用於正式環境。
    • ZONAL:建立基本執行個體,其中只有一個節點,且不含自動容錯移轉功能。
  • REGION_ID:執行個體所在的區域。
  • CLUSTER_ID:您先前建立的叢集 ID。
  • ALLOWED_PROJECT_LIST:以半形逗號分隔的專案 ID 或專案編號清單,用於指定可存取執行個體的專案,例如 my-project-1、12345、my-project-n。
  • NETWORK_ATTACHMENT_URI (選用):您為傳出連線建立的網路連結 URI 完整資源名稱。例如:projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID。
  • CONSUMER_NETWORK:建立 Private Service Connect 端點的虛擬私有雲網路路徑。例如:projects/my-host-project/global/networks/default。這個選項適用於自動建立端點的情況。確認已建立服務連線政策。您可以在建立執行個體前後建立政策。
  • CONSUMER_PROJECT:建立 Private Service Connect 端點的專案。如果您使用的是 Shared VPC 虛擬私有雲網路,則可以是主專案或服務專案。您在自動連線參數中指定的任何專案,都會自動新增至允許的專案。您可以視需要將要手動建立 Private Service Connect 端點的專案,新增至允許的專案清單。

為已啟用 Private Service Connect 的主要叢集建立次要叢集時,次要叢集會自動沿用 Private Service Connect 設定。詳情請參閱「建立次要叢集」。

Terraform

如要建立已啟用 Private Service Connect 的 AlloyDB 叢集和執行個體,請使用 google_alloydb_cluster 和 google_alloydb_instance Terraform 資源:

resource "google_alloydb_cluster" "default" {
  cluster_id = "alloydb-cluster"
  location   = "us-central1"
  psc_config {
    psc_enabled = true
  }
}

resource "google_alloydb_instance" "default" {
  cluster       = google_alloydb_cluster.default.name
  instance_id   = "alloydb-instance"
  instance_type = "PRIMARY"
  machine_config {
    cpu_count = 2
  }
  psc_instance_config {
    allowed_consumer_projects = [data.google_project.project.number]
    psc_auto_connections {
      consumer_network = google_compute_network.default.id
      consumer_project = data.google_project.project.project_id
    }
    psc_interface_configs {
      network_attachment_resource = google_compute_network_attachment.default.id
    }
  }
}

resource "google_compute_network" "default" {
  name                    = "alloydb-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
  name          = "alloydb-subnetwork"
  region        = "us-central1"
  network       = google_compute_network.default.id
  ip_cidr_range = "10.0.0.0/16"
}

resource "google_compute_network_attachment" "default" {
  name                  = "alloydb-network-attachment"
  region                = "us-central1"
  connection_preference = "ACCEPT_AUTOMATIC"
  subnetworks = [
    google_compute_subnetwork.default.self_link
  ]
}

data "google_project" "project" {}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

擷取端點

擷取內部 IP 位址 (即執行個體的 Private Service Connect 端點) 後,您可以使用這個端點連線至執行個體。

如要查看執行個體的相關資訊,包括執行個體的 Private Service Connect 端點 IP 位址,請使用 gcloud alloydb instances describe 指令:

gcloud alloydb instances describe INSTANCE_NAME \
--project=PROJECT_ID \
--cluster=CLUSTER_ID \
--region=REGION_ID \
--format='json(pscInstanceConfig.pscAutoConnections)'

更改下列內容:

  • INSTANCE_NAME:AlloyDB 執行個體的名稱。如果這個執行個體已啟用 Private Service Connect,虛擬私有雲網路中的 Private Service Connect 端點就能連線至該執行個體。
  • PROJECT_ID:執行個體所在 Google Cloud 專案的 ID 或專案編號。
  • CLUSTER_ID:叢集 ID。
  • REGION_ID:執行個體所在的區域。

在回應中,請記下 pscInstanceConfig.pscAutoConnections.ipAddress 欄位旁顯示的值。這個值是內部 IP 位址,也是執行個體的 Private Service Connect 端點。

更新執行個體,自動建立端點

如要更新執行個體,讓系統自動建立端點,請使用 gcloud alloydb instances update 指令並搭配 --psc-auto-connections 參數:

gcloud alloydb instances update INSTANCE_ID \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --psc-auto-connections=network=CONSUMER_NETWORK,project=CONSUMER_PROJECT

更改下列內容:

  • INSTANCE_ID:要更新的執行個體 ID。
  • CLUSTER_ID:叢集 ID。
  • REGION_ID:執行個體所在的區域。
  • PROJECT_ID:執行個體所在專案的 ID。
  • CONSUMER_NETWORK:建立 Private Service Connect 端點的虛擬私有雲網路路徑,例如 projects/my-host-project/global/networks/default。
  • CONSUMER_PROJECT:建立 Private Service Connect 端點的專案。

設定傳出連線

如要為已啟用 Private Service Connect 的 AlloyDB 執行個體啟用傳出連線,必須設定執行個體的網路連結 URI。詳情請參閱「設定傳出連線」。

手動建立端點

以下各節說明如何手動建立 Private Service Connect 端點。

建立 AlloyDB 執行個體

您可以使用 Google Cloud 控制台、gcloud CLI 或 Terraform,建立已啟用 Private Service Connect 的執行個體。

控制台

  1. 前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。

    前往「Clusters」(叢集) 頁面

  2. 點選「建立叢集」。

  3. 在「叢集 ID」部分輸入 my-cluster。

  4. 輸入密碼。請記下這個密碼,因為您會在本快速入門導覽課程中使用。

  5. 保留預設資料庫版本。

  6. 選取 us-central1 (Iowa) 區域。

  7. 保留預設執行個體 ID my-cluster-primary。

  8. 在「可用區可用性」部分,保留「單一可用區」選項。雖然我們不建議在正式環境中使用單一可用區執行個體,但您可以在本快速入門導覽課程中使用單一可用區,盡可能降低費用。詳情請參閱「使用基本執行個體來降低成本」。

  9. 選取 2 vCPU, 16 GB 機型。

  10. 保留私人 IP 連線,並選取「Private Service Connect (PSC)」。

  11. 在「Allowed consumer projects」(允許的用戶專案) 下方,輸入要允許連線至執行個體的專案 ID 或專案編號。

  12. 保留「網路安全」下方的預設設定。

  13. 請勿變更「顯示進階選項」中的設定。

  14. 按一下「Create cluster」(建立叢集)。AlloyDB 可能需要幾分鐘才能建立叢集,並顯示在主要叢集的「Overview」(總覽) 頁面。

gcloud

如要建立叢集,請使用 gcloud alloydb clusters create 指令。

gcloud alloydb clusters create CLUSTER_ID \
  --password=PASSWORD \
  --region=REGION_ID \
  --project=PROJECT_ID \
  --enable-private-service-connect

更改下列內容:

  • CLUSTER_ID:您要建立的叢集 ID。開頭須為小寫英文字母,且只能使用小寫英文字母、數字和連字號。

  • PASSWORD:預設 postgres 使用者的密碼。

  • REGION_ID:叢集所在的區域。

  • PROJECT_ID:叢集所在專案的 ID。

這個指令會啟動長時間執行的作業,並傳回作業 ID。

如要建立主要執行個體,請使用 gcloud alloydb instances create 指令。

gcloud alloydb instances create INSTANCE_ID \
    --instance-type=PRIMARY \
    --cpu-count=CPU_COUNT \
    --availability-type=AVAILABILITY \
    --region=REGION_ID \
    --cluster=CLUSTER_ID \
    --project=PROJECT_ID \
    --allowed-psc-projects=ALLOWED_PROJECT_LIST \
    --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI

更改下列內容:

  • INSTANCE_ID:要建立的執行個體 ID。開頭須為小寫英文字母,可以使用小寫英文字母、數字和連字號。
  • CPU_COUNT:執行個體所需的 vCPU 數量。有效值包括:
    • 2:2 個 vCPU,16 GB RAM
    • 4:4 個 vCPU,32 GB RAM
    • 8:8 個 vCPU,64 GB RAM
    • 16:16 個 vCPU,128 GB RAM
    • 32:32 個 vCPU,256 GB RAM
    • 64:64 個 vCPU,512 GB RAM
    • 96:96 個 vCPU,768 GB RAM
    • 128:128 個 vCPU,864 GB RAM
  • AVAILABILITY:指出這個執行個體是否應具備高可用性 (HA),並在多個可用區中設有節點。有效值包括:
    • REGIONAL:建立高可用性執行個體,其中包含獨立的使用中和待命節點,並在兩者之間自動容錯移轉。這是預設值,適用於正式環境。
    • ZONAL:建立基本執行個體,其中只有一個節點,且不含自動容錯移轉功能。
  • REGION_ID:執行個體所在的區域。
  • CLUSTER_ID:您先前建立的叢集 ID。
  • ALLOWED_PROJECT_LIST:以半形逗號分隔的專案 ID 或專案編號清單,用於指定可存取執行個體的專案,例如 my-project-1、12345、my-project-n。
  • NETWORK_ATTACHMENT_URI (選用):您為傳出連線建立的網路連結 URI 完整資源名稱。例如:projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID。

為已啟用 Private Service Connect 的主要叢集建立次要叢集時,次要叢集會自動沿用 Private Service Connect 設定。詳情請參閱「建立次要叢集」。

Terraform

如要建立已啟用 Private Service Connect 的 AlloyDB 叢集和執行個體,請使用 google_alloydb_cluster 和 google_alloydb_instance Terraform 資源:

resource "google_alloydb_cluster" "default" {
  cluster_id = "alloydb-cluster"
  location   = "us-central1"
  psc_config {
    psc_enabled = true
  }
}

resource "google_alloydb_instance" "default" {
  cluster       = google_alloydb_cluster.default.name
  instance_id   = "alloydb-instance"
  instance_type = "PRIMARY"
  machine_config {
    cpu_count = 2
  }
  psc_instance_config {
    allowed_consumer_projects = [data.google_project.project.number]
    psc_interface_configs {
      network_attachment_resource = google_compute_network_attachment.default.id
    }
  }
}

resource "google_compute_network" "default" {
  name                    = "alloydb-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "default" {
  name          = "alloydb-subnetwork"
  region        = "us-central1"
  network       = google_compute_network.default.id
  ip_cidr_range = "10.0.0.0/16"
}

resource "google_compute_network_attachment" "default" {
  name                  = "alloydb-network-attachment"
  region                = "us-central1"
  connection_preference = "ACCEPT_AUTOMATIC"
  subnetworks = [
    google_compute_subnetwork.default.self_link
  ]
}

data "google_project" "project" {}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

取得服務連結

建立啟用 Private Service Connect 的 AlloyDB 執行個體後,請取得服務連結網址,並使用該網址建立 Private Service Connect 端點。

如要查看執行個體的詳細資料,請使用 gcloud alloydb instances describe 指令。

gcloud alloydb instances describe INSTANCE_ID \
 --cluster=CLUSTER_ID \
 --region=REGION_ID

更改下列內容:

  • INSTANCE_ID:執行個體的 ID。
  • CLUSTER_ID:叢集 ID。
  • REGION_ID:部署 AlloyDB 叢集的區域。

指令的回應範例如下:

{
  "pscInstanceConfig": {
    "serviceAttachmentLink": "https://www.googleapis.com/compute/v1/projects/my-project/regions/my-region/serviceAttachments/my-service-attachment-id",
    "allowedConsumerProjects": [
      "45678",
      "12345",
      "67890"
    ],
    "pscDnsName": "015f5524-0555-4a0a-ac5a-0d15d64b15cb.008225d5-070a-4566-aaad-fcb3c87c5901.us-east4.alloydb-psc.goog."
  }
}

serviceAttachmentLink 參數會保留服務連結網址的值。

建立 Private Service Connect 端點

如要建立 Private Service Connect 端點,請傳遞服務連結網址和不重複的端點名稱。如要進一步瞭解如何建立 Private Service Connect 端點,請參閱「建立端點」。

您也可以使用 gcloud compute addresses create 指令,為 Private Service Connect 端點預留內部 IP 位址,然後在建立端點時使用預留的 IP 位址,或使用 Terraform 佈建內部 IP 位址和轉送規則:

resource "google_compute_address" "psc_endpoint_ip" {
  name         = "alloydb-psc-endpoint-ip"
  region       = "us-central1"
  subnetwork   = google_compute_subnetwork.default.id
  address_type = "INTERNAL"
}

resource "google_compute_forwarding_rule" "psc_endpoint" {
  name                  = "alloydb-psc-endpoint"
  region                = "us-central1"
  network               = google_compute_network.default.id
  ip_address            = google_compute_address.psc_endpoint_ip.self_link
  load_balancing_scheme = ""
  target                = google_alloydb_instance.default.psc_instance_config[0].service_attachment_link
}

在多專案 Shared VPC 或中樞與輪輻網路中設定端點

在多專案架構中,您可以在主機或中樞專案中部署集中式 Private Service Connect 端點。多項服務或輪輻專案中的資料庫用戶端,即可透過該端點連線至 AlloyDB 執行個體。

輪輻專案中的用戶端如何連線至集中式端點,取決於網路拓撲:

  • Shared VPC:主機專案和附加的服務專案共用單一虛擬私有雲網路。任何附加服務專案中的資料庫用戶端,都能連線至相同區域的端點。如果啟用全域存取權,則可跨區域連線。

  • 使用 Network Connectivity Center 的多虛擬私有雲軸輻式架構:輪輻專案使用獨立的虛擬私有雲網路,連線至 Network Connectivity Center 中樞。在中樞啟用 Private Service Connect 連線傳播後,其他虛擬私有雲輪輻中的用戶端就能連至中樞虛擬私有雲輪輻中的 Private Service Connect 端點。

  • 使用虛擬私有雲網路對接的多虛擬私有雲中樞與輪輻:Private Service Connect 端點無法透過虛擬私有雲網路對接傳遞。請改為在每個對接的虛擬私有雲網路中,部署個別的 Private Service Connect 端點。

建議您在主專案中建立服務連線政策,自動佈建端點。如果無法建立服務連線政策,您可以在 Shared VPC 主專案中手動建立 Private Service Connect 端點,步驟如下:

  1. 在 AlloyDB 執行個體設定中,允許擁有端點的專案。

    在 AlloyDB 執行個體的 --allowed-psc-projects 旗標中,加入您建立端點的專案 ID。在主專案中部署集中式端點時,請加入主專案 ID。如果服務專案只執行連線至主專案端點的用戶端工作負載,則不必列出。如要讓服務專案在本機部署自己的端點,請一併加入這些服務專案 ID。如要更新現有執行個體的允許專案,請執行 gcloud alloydb instances update 指令並加上 --allowed-psc-projects 旗標。--allowed-psc-projects 旗標會取代現有的允許專案清單,而非附加至清單。請一併提供所有現有的允許專案 ID 和新的主專案 ID,以免現有端點中斷連線。

  2. 在主專案中,使用 gcloud compute addresses create 指令為端點預留內部 IP 位址:

    gcloud compute addresses create ADDRESS_NAME \
        --project=HOST_PROJECT_ID \
        --region=REGION_ID \
        --subnet=HOST_SUBNET

    更改下列內容:

    • ADDRESS_NAME:要指派給預留 IP 位址的名稱。

    • HOST_PROJECT_ID:Shared VPC 主機專案的專案 ID。

    • REGION_ID:端點 IP 位址的區域。這個區域必須與 AlloyDB 執行個體所在的區域相同。

    • HOST_SUBNET:提供端點 IP 位址的主機專案子網路名稱。

  3. 在主機專案中,使用 gcloud compute forwarding-rules create 指令建立端點的轉送規則:

    gcloud compute forwarding-rules create ENDPOINT_NAME \
        --project=HOST_PROJECT_ID \
        --region=REGION_ID \
        --network=HOST_NETWORK \
        --address=ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT_URL

    更改下列內容:

    • ENDPOINT_NAME:要指派給端點的名稱。

    • HOST_PROJECT_ID:Shared VPC 主機專案的專案 ID。

    • REGION_ID:端點的區域。

    • HOST_NETWORK:主機虛擬私有雲網路的名稱。

    • ADDRESS_NAME:上一步中預留 IP 位址的名稱。

    • SERVICE_ATTACHMENT_URL:從 AlloyDB 執行個體擷取的服務連結網址。

    如要允許 Shared VPC 網路中任何區域的用戶端連線至端點,請加入選用的 --allow-psc-global-access 旗標。

  4. 使用 gcloud compute forwarding-rules describe 指令,確認端點連線狀態為 ACCEPTED:

    gcloud compute forwarding-rules describe ENDPOINT_NAME \
        --project=HOST_PROJECT_ID \
        --region=REGION_ID \
        --format="value(pscConnectionStatus)"
  5. 將共用子網路的 Compute 網路使用者 (roles/compute.networkUser) 角色授予各服務專案的管理員和服務代理。

    Shared VPC 網路中的用戶端工作負載不需要端點子網路的 roles/compute.networkUser 角色,即可將網路流量傳送至主專案端點。不過,Shared VPC 管理員必須在主專案或共用子網路上授予 roles/compute.networkUser 角色,服務專案管理員和服務代理才能在共用子網路上佈建 Compute Engine VM 或 Google Kubernetes Engine (GKE) 叢集。

    如要授予共用子網路的 roles/compute.networkUser 角色,請執行 gcloud compute networks subnets add-iam-policy-binding 指令:

    gcloud compute networks subnets add-iam-policy-binding SHARED_SUBNET \
        --project=HOST_PROJECT_ID \
        --region=SUBNET_REGION_ID \
        --member=PRINCIPAL \
        --role=roles/compute.networkUser

    更改下列內容:

    • SHARED_SUBNET:主專案中共用子網路的名稱,服務專案會在該子網路中部署用戶端資源,例如 Compute Engine VM 或 GKE 節點。這個子網路不一定要是您預留端點 IP 位址的 HOST_SUBNET 子網路。

    • HOST_PROJECT_ID:Shared VPC 主機專案的專案 ID。

    • SUBNET_REGION_ID:共用子網路的區域。

    • PRINCIPAL:服務專案中的主體,例如 user:admin@example.com 或 serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com。

    如果服務或輪輻專案中的用戶端工作負載,是透過 AlloyDB Auth Proxy、AlloyDB 語言連接器或 IAM 資料庫驗證機制連線,請將必要的 AlloyDB 用戶端角色 (roles/alloydb.client 和 roles/alloydb.databaseUser) 授予 AlloyDB 叢集所在專案中的工作負載服務帳戶,而非主專案或中樞專案。

  6. 在主專案中設定私人 DNS 區域和記錄,並將該區域與共用虛擬私有雲網路建立關聯。

    在 Shared VPC 中,所有附加的服務專案都會共用主機虛擬私有雲網路,並自動解析執行個體的 pscDnsName 主機名稱,不需在每個服務專案中建立個別的 DNS 區域。在多虛擬私有雲中樞與輪輻拓撲中,如果輪輻專案使用不同的虛擬私有雲網路,請使用跨專案繫結或 Cloud DNS 對接區域,將私人 DNS 區域繫結至輪輻虛擬私有雲網路。

或者,如要讓服務專案管理員使用共用子網路,直接在各自的服務專案中建立及管理端點,請參閱「在 Shared VPC 服務專案中建立端點」。

設定傳出連線

如要啟用外送連線,請在建立或更新 AlloyDB 執行個體時,設定網路連結 URI。在執行遷移等傳出作業時,這項 URI 可確保專案與 AlloyDB 執行個體之間的連線安全。

建立網路連結

您可以建立可自動 (ACCEPT_AUTOMATIC) 或手動 (ACCEPT_MANUAL) 接受連線的網路連結。如要進一步瞭解如何建立網路連結,請參閱「建立及管理網路連結」。

如果選擇建立自動接受連線的網路連結,就不需要明確設定接受的專案清單。如要手動接受連線,您必須將 AlloyDB 執行個體所在專案的服務擁有專案編號,新增至已接受專案清單。

如要找出服務擁有的專案編號,請執行下列指令:

gcloud alloydb clusters describe CLUSTER_ID --region=REGION_ID

以下是回應範例:

pscConfig:
  pscEnabled: true
  serviceOwnedProjectNumber: 123456789012

找出服務擁有的專案編號後,請將該專案新增至已接受的專案清單,然後建立網路連結。

請確認網路連結的區域與 AlloyDB 執行個體的區域相同。此外,用於建立網路連結的子網路必須屬於 RFC 1918 IP 範圍,即 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。

更新執行個體以建立傳出連線

如要為已啟用 Private Service Connect 的現有 AlloyDB 執行個體啟用傳出連線,請使用 gcloud alloydb instances update 指令並加上 --psc-network-attachment-uri 參數:

gcloud alloydb instances update INSTANCE_ID \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --psc-network-attachment-uri=NETWORK_ATTACHMENT_URI

更改下列內容:

  • INSTANCE_ID:執行個體的 ID。
  • CLUSTER_ID:叢集 ID。
  • REGION_ID:執行個體所在的區域。
  • PROJECT_ID:執行個體所在專案的 ID。
  • NETWORK_ATTACHMENT_URI:您為傳出連線建立的網路連結 URI 完整資源名稱,例如 projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID。

2025 年 3 月 1 日前建立的 AlloyDB 執行個體,無法更新為啟用傳出連線。建議您改用下列任一做法:


停用傳出連線

如要停用現有 AlloyDB 執行個體的傳出連線,請使用 gcloud alloydb instances update 指令和 --clear-psc-network-attachment-uri 參數:

gcloud alloydb instances update INSTANCE_ID \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID \
    --clear-psc-network-attachment-uri

更改下列內容:

  • INSTANCE_ID:執行個體的 ID。
  • CLUSTER_ID:叢集 ID。
  • REGION_ID:執行個體所在的區域。
  • PROJECT_ID:執行個體所在專案的 ID。

連線至 AlloyDB 執行個體

如要連線至已啟用 Private Service Connect 的 AlloyDB 執行個體,請使用下列任一選項:

使用 AlloyDB Auth Proxy 或 AlloyDB 語言連接器連線時,必須設定私人 DNS 記錄,將執行個體預先產生的 pscDnsName 對應至 Private Service Connect 端點的內部 IP 位址。

如果方法使用 DNS 記錄,您必須在對應用戶虛擬私有雲網路的私人 DNS 區域中建立記錄。AlloyDB API 傳回的 pscDnsName 是預先產生的主機名稱字串,必須在用戶虛擬私有雲網路中建立私人 DNS 區域和 A 記錄,才能解析。

設定 DNS 代管區域和 DNS 記錄

如要在用戶網路中設定 DNS 代管區域和 DNS 記錄,請按照下列步驟操作:

gcloud

  1. 如要查看 AlloyDB 執行個體的摘要資訊 (包括預先產生的執行個體 pscDnsName),請使用 gcloud alloydb instances describe 指令:

    gcloud alloydb instances describe INSTANCE_ID \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --format='json(pscInstanceConfig)'

    更改下列內容:

    • INSTANCE_ID:執行個體的 ID。
    • CLUSTER_ID:叢集 ID。
    • REGION_ID:執行個體所在的區域。

    確認回應中顯示 pscDnsName 欄位。DNS 名稱採用 INSTANCE_UID.CLUSTER_UID.REGION_NAME.alloydb-psc.goog. 模式,例如 015f5524-0555-4a0a-ac5a-0d15d64b15cb.008225d5-070a-4566-aaad-fcb3c87c5901.us-east4.alloydb-psc.goog.

  2. 如要建立私人 DNS 區域,請使用 gcloud dns managed-zones create 指令。這個區域與虛擬私有雲網路相關聯,該網路用於透過 Private Service Connect 端點連線至 AlloyDB 執行個體。

    gcloud dns managed-zones create ZONE_NAME \
    --project=PROJECT_ID \
    --description=DESCRIPTION \
    --dns-name=DNS_NAME \
    --networks=NETWORK_NAME \
    --visibility=private

    更改下列內容:

    • ZONE_NAME:DNS 區域名稱。
    • PROJECT_ID:包含可用區的 Google Cloud 專案 ID 或專案編號。
    • DESCRIPTION:區域說明 (例如 DNS zone for the AlloyDB instance)。
    • DNS_NAME:區域的 DNS 名稱,例如 INSTANCE_UID.CLUSTER_UID.REGION_NAME.alloydb-psc.goog. (或上層網域 alloydb-psc.goog.)。
    • NETWORK_NAME:用戶虛擬私有雲網路的名稱。如果是 Shared VPC 網路,請將這個值設為虛擬私有雲網路的完整路徑,例如 projects/cymbal-project/global/networks/shared-vpc-network。
  3. 建立 Private Service Connect 端點後,請使用 gcloud dns record-sets create 指令,在區域中建立 DNS A 記錄:

    gcloud dns record-sets create DNS_NAME \
    --project=PROJECT_ID \
    --type=RRSET_TYPE \
    --rrdatas=RR_DATA \
    --zone=ZONE_NAME

    更改下列內容:

    • DNS_NAME:您在先前程序中擷取的 pscDnsName。
    • RRSET_TYPE:DNS 記錄集的資源記錄類型 (A)。
    • RR_DATA:為 Private Service Connect 端點分配的內部 IP 位址 (例如 198.51.100.5)。

Terraform

如要建立私人 Cloud DNS 區域和 A 記錄,將執行個體的 pscDnsName 對應至 Private Service Connect 端點的內部 IP 位址,請使用 google_dns_managed_zone 和 google_dns_record_set Terraform 資源:

resource "google_dns_managed_zone" "psc_dns_zone" {
  name        = "alloydb-psc-zone"
  dns_name    = google_alloydb_instance.default.psc_instance_config[0].psc_dns_name
  description = "Private DNS zone for AlloyDB PSC endpoint"
  visibility  = "private"

  private_visibility_config {
    networks {
      network_url = google_compute_network.default.id
    }
  }
}

resource "google_dns_record_set" "psc_dns_record" {
  name         = google_alloydb_instance.default.psc_instance_config[0].psc_dns_name
  type         = "A"
  ttl          = 300
  managed_zone = google_dns_managed_zone.psc_dns_zone.name
  rrdatas      = [google_compute_address.psc_endpoint_ip.address]
}

使用 DNS 記錄直接連線

建立 Private Service Connect 端點,並為執行個體的 pscDnsName 設定私人 DNS A 記錄後,您可以使用 DNS 名稱 (不含結尾點號),直接從用戶虛擬私有雲網路中的用戶端連線:

psql -U USERNAME -h DNS_NAME -d DATABASE_NAME

更改下列內容:

  • USERNAME:連線至執行個體的資料庫使用者名稱。
  • DNS_NAME:解析為 Private Service Connect 端點的 DNS 記錄名稱 (例如執行個體的 pscDnsName,不含結尾的點)。
  • DATABASE_NAME:要連線的資料庫名稱 (例如 postgres)。

使用 AlloyDB Auth Proxy 連線

AlloyDB Auth Proxy 是一種連接器,可讓您建立與 AlloyDB 資料庫的授權加密連線。AlloyDB Auth Proxy 的運作方式是讓本機用戶端在本機環境中執行。您的應用程式會透過資料庫使用的標準資料庫通訊協定,與 AlloyDB Auth Proxy 通訊。

在啟動 Auth Proxy 用戶端時設定 --psc 旗標,AlloyDB Auth Proxy 會使用您建立的私人 DNS 記錄解析執行個體的 pscDnsName,連線至已啟用 Private Service Connect 的執行個體。

傳遞使用 gcloud alloydb instances describe 指令擷取的執行個體 URI,並設定 --psc 旗標,啟動 Auth Proxy 用戶端。

如要進一步瞭解如何使用 Auth Proxy 連線至執行個體,請參閱「使用 AlloyDB Auth Proxy 連線」。

使用 AlloyDB 語言連接器連線

AlloyDB 語言連接器是程式庫,可在連線至 AlloyDB 執行個體時,提供採用 TLS 1.3 和 IAM 授權的自動化 mTLS。

為 Private Service Connect 設定 Language Connector 後,系統會使用您建立的私人 DNS 記錄解析執行個體的 pscDnsName,連線至執行個體。

Java

如果您使用 Private Service Connect 連線至 AlloyDB 執行個體,請加入下列內容:

config.addDataSourceProperty("alloydbIpType", "PSC");

如要進一步瞭解如何在 AlloyDB Java 連接器使用 Private Service Connect 端點,請參閱 GitHub 存放區。

Python (pg8000)

如果您使用 Private Service Connect 連線至 AlloyDB 執行個體,請加入下列內容:

  def getconn() -> pg8000.dbapi.Connection:
      conn: pg8000.dbapi.Connection = connector.connect(
          inst_uri,
          "pg8000",
          user=user,
          password=password,
          db=db,
          # use ip_type to specify PSC
          ip_type=IPTypes.PSC,
      )
      return conn

如要進一步瞭解如何在 AlloyDB Python 連接器中使用 Private Service Connect 端點,請參閱 GitHub 存放區。

Python (asyncpg)

如果您使用 Private Service Connect 連線至 AlloyDB 執行個體,請加入下列內容:

  async def getconn() -> asyncpg.Connection:
    conn: asyncpg.Connection = await connector.connect(
        inst_uri,
        "asyncpg",
        user=user,
        password=password,
        db=db,
        # use ip_type to specify PSC
        ip_type=IPTypes.PSC,
    )
    return conn

如要進一步瞭解如何在 AlloyDB Python 連接器中使用 Private Service Connect 端點,請參閱 GitHub 存放區。

Go (pgx)

如果您使用 Private Service Connect 連線至 AlloyDB 執行個體,請加入下列內容:

d.Dial(ctx, instURI, alloydbconn.WithPSC())

如要進一步瞭解如何在 AlloyDB Go 連接器中使用 Private Service Connect 端點,請參閱 GitHub 存放區。

Go (database/sql)

如果您使用 Private Service Connect 連線至 AlloyDB 執行個體,請加入下列內容:

  cleanup, err := postgres.RegisterDriver(
    "alloydb",
    alloydbconn.WithDefaultDialOptions(alloydbconn.WithPSC()),
  )

如要進一步瞭解如何在 AlloyDB Go 連接器中使用 Private Service Connect 端點,請參閱 GitHub 存放區。

直接透過內部 IP 位址連線

建立 Private Service Connect 端點後,您可以使用端點的內部 IP 位址直接連線至 AlloyDB 執行個體,不必設定 DNS 記錄。

  1. 如要擷取手動建立的 Private Service Connect 端點 IP 位址,請使用 gcloud compute addresses describe 指令:

    gcloud compute addresses describe ADDRESS_NAME \
    --project=PROJECT_ID \
    --region=REGION_NAME

    更改下列內容:

    • ADDRESS_NAME:端點預留 IP 位址資源的名稱。
    • PROJECT_ID:端點所在 Google Cloud 專案的 ID 或專案編號。
    • REGION_NAME:端點的區域名稱。
  2. 如要連線至 AlloyDB 執行個體,請使用內部 IP 位址:

    psql -U USERNAME -h IP_ADDRESS

    更改下列內容:

    • USERNAME:連線至執行個體的使用者名稱。
    • IP_ADDRESS:端點的內部 IP 位址。

限制

  • 您最多可以設定 20 個 Private Service Connect 端點,連線至已啟用 Private Service Connect 的 AlloyDB 執行個體服務連結。
  • 建立已啟用 Private Service Connect 的叢集時,無法使用 --network 旗標,因為該旗標與私人服務存取權相關聯。
  • 您無法在現有執行個體上啟用或停用 Private Service Connect。
  • 如果執行個體已啟用 Private Service Connect,就無法設定使用私人服務存取權。