本页介绍如何使用 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 RAM4
:4 个 vCPU,32 GB RAM8
:8 个 vCPU,64 GB RAM16
:16 个 vCPU,128 GB RAM32
:32 个 vCPU,256 GB RAM64
:64 个 vCPU,512 GB RAM96
:96 个 vCPU,768 GB RAM128
: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
。
获取服务连接
创建启用了 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 记录,请按以下步骤操作:
如需查看有关 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.
模式。如需创建专用 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 CloudDESCRIPTION
:区域的说明(例如 AlloyDB 实例的 DNS 区域)。DNS_NAME
:区域的 DNS 名称,例如INSTANCE_UID.PROJECT_UID.REGION_NAME.alloydb-psc.goog.
。NETWORK_NAME
:VPC 网络的名称。
创建 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 记录直接进行连接。
如需检索 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
:端点的区域名称。
如需连接到 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 实例。
如需检索 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
:端点的区域名称。
如需连接到 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 的实例配置为使用专用服务访问通道。
- 不支持需要出站连接的
pglogical
、dblink
和postgres_fdw
扩展程序。