使用 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 代理客户端进行连接,则必须具有 AlloyDB Client 角色。如果您直接连接,则不需要任何 Identity and Access Management (IAM) 角色和权限。

启用 Private Service Connect

启用 Private Service Connect 需要创建配置了 Private Service Connect 的 AlloyDB 集群,然后创建包含允许的项目列表的 AlloyDB 实例。

创建 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 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

替换以下内容:

  • 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

获取服务连接

创建启用了 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."
          }

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

创建 Private Service Connect 端点

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

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

连接到 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 \
    --project=CLUSTER_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:包含该区域的项目的 ID 或项目编号。 Google Cloud
    • 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 user=USERNAME host=DNS_RECORD

    替换以下内容:

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

使用 AlloyDB Auth 代理连接

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

在启动 Auth 代理客户端时设置 --psc 标志后,AlloyDB Auth 代理会使用您创建的 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 user=USERNAME hostaddr=IP_ADDRESS"

    替换以下内容:

    • USERNAME:连接到实例的用户的名称。
    • IP_ADDRESS:端点的 IP 地址。

限制

  • 您最多可以设置 20 个 Private Service Connect 端点,这些端点连接到启用了 Private Service Connect 的 AlloyDB 实例的服务连接。
  • 创建启用了 Private Service Connect 的集群时,您无法使用 --network 标志,因为它与专用服务访问通道相关联。
  • 您无法在现有实例上激活或停用 Private Service Connect。
  • 您无法将启用了 Private Service Connect 的实例配置为使用专用服务访问通道。
  • 不支持需要出站连接的 pglogicaldblinkpostgres_fdw 扩展程序