使用 Private Service Connect 连接到实例

本页介绍如何使用 Private Service Connect 连接到 AlloyDB for PostgreSQL 实例。

您可以使用 Private Service Connect 从属于不同群组、团队、项目或组织的多个 Virtual Private Cloud (VPC) 网络连接到 AlloyDB 主实例或其任何读取副本,或者 AlloyDB 辅助实例。

所需的角色

您必须向 VPC 网络中的用户授予以下所有角色,才能连接到 AlloyDB 实例。

角色 说明
compute.networkAdmin 授予对 VPC 网络的完整控制权限来启动与 AlloyDB 实例的连接。如果您使用 Private Service Connect 从多个 VPC 网络连接到 AlloyDB 实例,则每个网络都有自己的管理员。
dns.admin 授予对 Cloud DNS 资源的完全控制权,包括 DNS 区域和记录。
alloydb.admin 可以完全控制 AlloyDB 实例,并控制实例的整个生命周期。
alloydb.databaseUser(可选) 提供对 AlloyDB 实例的访问权限。如果您通过 AlloyDB Auth Proxy 客户端进行连接,则必须具有 AlloyDB Client 角色。如果您直接连接,则不需要任何 Identity and Access Management (IAM) 角色和权限。
Custom AlloyDB role(可选) 如果您使用的是自定义角色,除了授予 compute.networkAdmindns.admin 角色之外,还需要授予以下权限:
  • alloydb.clusters.create:提供为集群启用 Private Service Connect 的访问权限。
  • alloydb.instances.createalloydb.instances.update:提供添加允许的项目列表以及为实例设置网络连接 URI 的权限。

启用 Private Service Connect

如需启用入站连接,请创建启用了 Private Service Connect 的 AlloyDB 集群。创建主实例时,请指定允许建立连接的项目。对于出站连接,请提供网络附件 URI。

创建 AlloyDB 主集群

以下示例使用带有 --enable-private-service-connect 标志的 gcloud alloydb clusters create 命令,创建启用了 Private Service Connect 的 AlloyDB 集群。

创建集群的过程保持不变,但需要传递 --enable-private-service-connect 标志。如需详细了解如何创建集群,请参阅创建集群及其主实例

如需创建集群,请使用 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。

为启用了 Private Service Connect 的主集群创建的次要集群会自动继承 Private Service Connect 配置。如需了解详情,请参阅创建辅助集群

创建 AlloyDB 实例

以下示例展示了如何创建一个配置了允许项目列表的主要实例。创建实例的过程保持不变,但对于启用了 Private Service Connect 的主要集群,需要使用 --allowed-psc-projects 标志传递允许的项目列表。

如需详细了解如何创建其他实例类型,请参阅创建读取池实例创建辅助实例

gcloud

如需使用 gcloud CLI,您可以安装并初始化 Google Cloud CLI,也可以使用 Cloud Shell

如需创建主实例,请使用 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-112345my-project-n
  • NETWORK_ATTACHMENT_URI:您创建的网络连接 URI 的完整资源名称。例如:projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID

Terraform

如需在数据库集群中创建实例,请使用 Terraform 资源

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 = ["123456789"]
  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" {}

准备 Cloud Shell

如需在 Google Cloud 项目中应用 Terraform 配置,请按如下所示准备 Cloud Shell:

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须是 TF 文件,例如 main.tf。在本文档中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 将示例代码复制到新创建的 main.tf 中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
    git clone https://github.com/terraform-google-modules/terraform-docs-samples
  3. terraform-docs-samples 目录中,前往 alloydb 目录。
    cd terraform-docs-samples/alloydb
  4. 将示例代码复制到新创建的 main.tf 中。
    cp SAMPLE_FILE
    <var>SAMPLE_FILE</var> 替换为要复制的示例文件的名称,例如 main.tf
  5. 查看和修改要应用到您的环境的示例参数。
  6. 保存更改。
  7. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init
    可选:如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:
    terraform init -upgrade

应用更改

  1. 查看配置,确认 Terraform 更新是否符合您的预期:
    terraform plan
    根据需要更正配置。
  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply
    等待 Terraform 显示 Apply complete! 消息。

打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台中,在界面中找到资源,以确保 Terraform 已创建或更新它们。

配置入站连接

为 AlloyDB 实例启用 PSC 后,您可以获取服务附件网址,并在使用方 VPC 中配置端点,以安全地连接到 AlloyDB 实例。

获取服务连接

创建启用了 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": "11111111-1111-1111-1111-111111111111.22222222-2222-2222-2222-222222222222.alloydb-psc.goog."
          }

serviceAttachmentLink 参数用于存储服务连接网址的值。

创建 Private Service Connect 端点

如需创建 Private Service Connect 端点,请传递服务附件网址以及唯一的端点名称。如需详细了解如何创建 Private Service Connect 端点,请参阅创建端点

您还可以使用 gcloud compute addresses create 命令为 Private Service Connect 端点预留内部 IP 地址,然后在创建端点时使用预留的 IP 地址。

配置出站连接

如需启用出站连接,请在创建或更新 AlloyDB 实例时设置网络附件 URI。在迁移等出站操作期间,此 URI 可让您的项目与 AlloyDB 实例之间建立安全连接。

创建网络连接

您可以创建一个可以自动接受连接(ACCEPT_AUTOMATIC) 或手动接受连接 (ACCEPT_MANUAL) 的网络连接。如需详细了解如何创建网络连接,请参阅创建和管理网络连接

如果您选择创建一个会自动接受连接的网络连接,则无需明确设置接受的项目列表。如需手动接受连接,您必须将 AlloyDB 实例所在项目的服务拥有的项目编号添加到已接受的项目列表中。

如需查找服务拥有的项目编号,请运行以下命令:

gcloud alpha alloydb clusters describe CLUSTER_ID --region=REGION_ID

以下是示例响应:

pscConfig:
pscEnabled: true
serviceOwnedProjectNumber: 123456789012

确定服务拥有的项目编号后,将该项目添加到“已接受的项目”列表,然后创建网络附件。

确保网络连接的区域与 AlloyDB 实例的区域相同。此外,用于创建网络附加项的子网必须属于 RFC 1918 IP 范围,即 10.0.0.0/8172.16.0.0/12192.168.0.0/16

更新实例以实现出站连接

如需为已启用 Private Service Connect 的现有 AlloyDB 实例启用出站连接,请将 --psc-network-attachment-uri 参数传递给 gcloud alloydb instances update 命令。

在 2025 年 3 月 1 日之前创建的 AlloyDB 实例无法更新以启用出站连接。作为替代方法,我们建议您使用以下任一选项:


停用出站连接

如需为现有 AlloyDB 实例停用出站连接,请将 --clear-psc-network-attachment-uri 参数传递给 gcloud alloydb instances update 命令。

连接到 AlloyDB 实例

您可以使用以下任一选项连接到启用了 Private Service Connect 的 AlloyDB 实例:

  • 内部 IP 地址
  • DNS 记录
  • AlloyDB Auth 代理
  • AlloyDB 语言连接器

若要使用 DNS 记录进行连接,您需要在相应 VPC 网络的专用 DNS 区域中创建 DNS 记录。创建 DNS 记录后,您可以使用此记录直接通过 DNS 记录、AlloyDB Auth Proxy 或 AlloyDB 语言连接器连接到启用了 Private Service Connect 的实例。

配置 DNS 代管式区域和 DNS 记录

如需在网络中配置 DNS 代管式区域和 DNS 记录,请按以下步骤操作:

  1. 如需查看有关 AlloyDB 实例的摘要信息(包括实例的 DNS 名称),请使用 gcloud alloydb instances describe 命令:

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

    替换以下内容:

    • INSTANCE_ID:实例的 ID。
    • CLUSTER_ID:集群的 ID。

    在响应中,验证是否显示 DNS 名称。DNS 名称采用 INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog. 模式。

  2. 如需创建专用 DNS 区域,请使用 gcloud dns managed-zones create 命令。此区域与用于通过 Private Service Connect 端点连接到 AlloyDB 实例的 VPC 网络相关联。

    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:区域的说明(例如 AlloyDB 实例的 DNS 区域)。
    • DNS_NAME:区域的 DNS 名称,例如 INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog.
    • NETWORK_NAME:VPC 网络的名称。
  3. 创建 Private Service Connect 端点后,如需在可用区中创建 DNS 记录,请使用 gcloud dns record-sets create 命令:

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

    替换以下内容:

    • DNS_NAME:您先前在此过程中检索的 DNS 名称。
    • RRSET_TYPE:DNS 记录集的资源记录类型(例如 A)。
    • RR_DATA:为 Private Service Connect 端点分配的 IP 地址(例如 198.51.100.5)。您还可以输入多个值,例如 rrdata1 rrdata2 rrdata3(例如 10.1.2.3 10.2.3.4 10.3.4.5)。

使用 DNS 记录直接连接

创建 Private Service Connect 端点并创建 DNS 记录后,您可以使用 DNS 记录直接进行连接。

  1. 如需检索 Private Service Connect 端点的 DNS 记录,请使用 gcloud compute addresses describe 命令:

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

    替换以下内容:

    • DNS_RECORD:端点的 DNS 记录。
    • PROJECT_ID:包含端点的 Google Cloud 项目的 ID 或项目编号。
    • REGION_NAME:端点的区域名称。
  2. 如需连接到 AlloyDB 实例,请使用 DNS 记录。

    psql -U USERNAME -h DNS_RECORD

    替换以下内容:

    • USERNAME:连接到实例的用户的名称。
    • DNS_RECORD:端点的 DNS 记录。

使用 AlloyDB Auth 代理连接

AlloyDB Auth Proxy 是一种连接器,可让您建立到 AlloyDB 数据库的经过授权的加密连接。AlloyDB Auth 代理的工作原理是在本地环境中运行本地客户端。您的应用通过数据库使用的标准数据库协议与 AlloyDB Auth 代理进行通信。

在启动 Auth Proxy 客户端时设置 --psc 标志后,AlloyDB Auth Proxy 会使用您创建的 DNS 记录连接到启用了 Private Service Connect 的实例。

请务必通过传递使用 gcloud alloydb instances list 命令检索的实例 URI 来启动 Auth 代理客户端,并设置 --psc 标志。

如需详细了解如何使用 Auth Proxy 连接到实例,请参阅使用 Auth Proxy 连接

使用 AlloyDB 语言连接器进行连接

AlloyDB 语言连接器是在连接到 AlloyDB 实例时提供自动 mTLS(使用 TLS 1.3)和 Identity and Access Management (IAM) 授权的库。

语言连接器确定实例支持 Private Service Connect 后,会使用您创建的 DNS 记录连接到实例。

Java

如果您使用 Private Service Connect 连接到 AlloyDB 实例,请添加以下内容:

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

如需详细了解如何在 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

如需详细了解如何在 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

如需详细了解如何在 Python 语言连接器中使用 Private Service Connect 端点,请参阅 GitHub 代码库

Go (pgx)

如果您使用 Private Service Connect 连接到 AlloyDB 实例,请添加以下内容:

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

如需详细了解如何在 Go 语言连接器中使用 Private Service Connect 端点,请参阅 GitHub 代码库

Go(数据库/SQL)

如果您使用 Private Service Connect 连接到 AlloyDB 实例,请添加以下内容:

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

如需详细了解如何在 Go 语言连接器中使用 Private Service Connect 端点,请参阅 GitHub 代码库

通过内部 IP 地址直接连接

创建 Private Service Connect 端点后,您可以使用配置的 IP 地址直接连接到 AlloyDB 实例。

  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 的实例配置为使用专用服务访问通道。