本页面介绍了如何使用 Private Service Connect 连接到 Cloud SQL 实例。
您可以使用 Private Service Connect 从属于不同组、团队、项目或组织的多个 Virtual Private Cloud (VPC) 网络连接到 Cloud SQL 主实例或其任何读取副本。
准备工作
gcloud CLI
416.0.0 版及更高版本支持将 Private Service Connect 与 Cloud SQL 实例搭配使用。
用户角色
下表介绍了将 Private Service Connect 与 Cloud SQL 实例搭配使用所需的角色:
角色 | 说明 |
---|---|
compute.networkAdmin |
授予对 VPC 网络的完整控制权限来启动与 Cloud SQL 实例的连接。您可以创建和管理 IP 地址、防火墙规则和 Private Service Connect 端点。 如果您使用 Private Service Connect 从多个 VPC 网络连接到 Cloud SQL 实例,则每个网络都有自己的管理员。 |
dns.admin |
授予对 Cloud DNS 资源的完全控制权,包括 DNS 区域和记录。 |
cloudsql.admin |
可以完全控制 Cloud SQL 实例,并控制实例的整个生命周期。 |
cloudsql.instanceUser |
提供对 Cloud SQL 实例的访问权限。如果您通过 Cloud SQL Auth 代理客户端进行连接,则必须具有 Cloud SQL Client 角色。如果您直接连接,则不需要任何 Identity and Access Management (IAM) 角色和权限。 |
创建 Cloud SQL 实例
您可以使用 gcloud CLI、Terraform 或 API 创建实例并为其启用 Private Service Connect。
gcloud
如需创建实例并为其启用 Private Service Connect,请使用 gcloud sql instances create
命令:
gcloud sql instances create INSTANCE_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --enable-private-service-connect \ --allowed-psc-projects=ALLOWED_PROJECTS \ --availability-type=AVAILABILITY_TYPE \ --no-assign-ip \ --tier=MACHINE_TYPE \ --database-version=DATABASE_VERSION \ --enable-bin-log
进行以下替换:
- INSTANCE_NAME:实例的名称。
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- REGION_NAME:实例的区域名称。
ALLOWED_PROJECTS:允许的项目 ID 或编号列表(以英文逗号分隔)。如果某个项目未包含在此列表中,您无法使用它来创建实例并为其启用 Private Service Connect。
- AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。此设置为默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性和为实例停用高可用性。
- MACHINE_TYPE:实例的机器类型。
- DATABASE_VERSION:实例的数据库版本(例如
MYSQL_8_0
)。
Terraform
如需创建启用 Private Service Connect 的实例,请使用 google_sql_database_instance
Terraform 资源。
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- INSTANCE_NAME:实例的名称。
- REGION_NAME:实例的区域名称。
- AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。此设置为默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅配置现有实例以实现高可用性和为实例停用高可用性。
ALLOWED_PROJECTS:允许的项目 ID 或编号列表(以英文逗号分隔)。如果某个项目未包含在此列表中,您无法使用它来创建实例并为其启用 Private Service Connect。
- MACHINE_TYPE:实例的机器类型。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
请求 JSON 正文:
{ "name": "INSTANCE_NAME", "project": PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "MYSQL_8_0", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "backupConfiguration": { "binaryLogEnabled": true, "enabled": true, "kind": "sql#backupConfiguration", "startTime": "00:00" }, "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscEnabled": true } }, "kind": "sql#settings", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "tier": "MACHINE_TYPE" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#operation", "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME", "status": "RUNNING", "user": "user@example.com", "insertTime": "2020-01-16T02:32:12.281Z", "startTime": "2023-06-14T18:48:35.499Z", "operationType": "CREATE", "name": "OPERATION_ID", "targetId": "INSTANCE_NAME", "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID", "targetProject": "PROJECT_ID" }
获取服务连接
创建启用了 Private Service Connect 的 Cloud SQL 实例后,获取服务连接 URI 并使用它来创建 Private Service Connect 端点。
gcloud
如需查看启用了 Private Service Connect 的实例的摘要信息(例如 pscServiceAttachmentLink
字段,其显示指向实例的服务连接的 URI),请使用 gcloud sql instances describe
命令:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
进行以下替换:
- INSTANCE_NAME:VPC 网络中的 Private Service Connect 端点可以连接的 Cloud SQL 实例的名称
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
以下示例展示了此命令的示例输出:
gcloud sql instances describe myinstance \ --project=12345 ... pscServiceAttachmentLink: projects/45678/regions/myregion/serviceAttachments/myserviceattachment
Terraform
如需获取服务连接 URI,请使用 google_compute_address
Terraform 资源。
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ ... pscServiceAttachmentLink: "projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME" }
pscServiceAttachmentLink
字段显示指向实例的服务连接的 URI。
创建 Private Service Connect 端点
您可以为 Private Service Connect 端点预留内部 IP 地址,并使用该地址创建端点。如需创建端点,您需要服务连接 URI 以及允许实例的项目。
gcloud
如需为 Private Service Connect 端点预留内部 IP 地址,请使用
gcloud compute addresses create
命令:gcloud compute addresses create ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --subnet=SUBNET_NAME \ --addresses=INTERNAL_IP_ADDRESS
进行以下替换:
如需验证 IP 地址是否已预留,请使用
gcloud compute addresses list
命令:gcloud compute addresses list ADDRESS_NAME \ --project=PROJECT_ID
在响应中,验证 IP 地址是否显示为
RESERVED
状态。如需创建 Private Service Connect 端点并将其指向 Cloud SQL 服务连接,请使用
gcloud compute forwarding-rules create
命令:gcloud compute forwarding-rules create ENDPOINT_NAME \ --address=ADDRESS_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --network=NETWORK_NAME \ --target-service-attachment=SERVICE_ATTACHMENT_URI \ --allow-psc-global-access
进行以下替换:
- ENDPOINT_NAME:端点的名称
- NETWORK_NAME:端点的 VPC 网络的名称
- SERVICE_ATTACHMENT_URI:服务连接的 URI
如需验证服务连接是否接受端点,请使用
gcloud compute forwarding-rules describe
命令:gcloud compute forwarding-rules describe ENDPOINT_NAME \ --project=PROJECT_ID \ --region=REGION_NAME
在响应中,验证
pscConnectionStatus
字段是否显示ACCEPTED
状态。端点可以连接到服务连接。
Terraform
如需创建 Private Service Connect 端点,请使用 google_sql_database_instance
Terraform 资源。
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
REST
为 Private Service Connect 端点预留内部 IP 地址。
验证 IP 地址是否已预留。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含 Private Service Connect 端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:区域的名称
- ADDRESS_NAME:IP 地址的名称
HTTP 方法和网址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "compute#address", "id": "ADDRESS_ID", "creationTimestamp": "2024-05-09T11:20:50.114-07:00", "name": "ADDRESS_NAME", "description": "This is the name of the internal IP address.", "address": "IP_ADDRESS", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME", "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "addressType": "EXTERNAL" }
在响应中,验证 IP 地址是否显示为
RESERVED
状态。创建 Private Service Connect 端点并将其指向 Cloud SQL 服务连接。
验证服务连接是否接受端点。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含 Private Service Connect 端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:区域的名称
- ENDPOINT_NAME:端点的名称
HTTP 方法和网址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "compute#forwardingRule", "id": "ENDPOINT_ID", "creationTimestamp": "2024-05-09T12:03:21.383-07:00", "name": "ENDPOINT_NAME", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "IPAddress": "IP_ADDRESS", "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "CONNECTION_ID", "pscConnectionStatus": "ACCEPTED", "allowPscGlobalAccess": true }
在响应中,验证
pscConnectionStatus
字段是否显示ACCEPTED
状态。端点可以连接到服务连接。
连接到 Cloud SQL 实例
您可以使用内部 IP 地址、DNS 记录、Cloud SQL Auth 代理、Cloud SQL 语言连接器或其他 Google Cloud 应用连接到启用了 Private Service Connect 的 Cloud SQL 实例。
配置 DNS 代管式区域和 DNS 记录
Cloud SQL 不会自动创建 DNS 记录。但实例查找 API 响应会提供建议的 DNS 名称。我们建议您在相应 VPC 网络的专用 DNS 区域中创建 DNS 记录。这提供了一种使用 Cloud SQL Auth 代理从不同网络进行连接的一致方法。
gcloud
如需查看有关 Cloud SQL 实例的摘要信息(包括实例的 DNS 名称),请使用
gcloud sql instances describe
命令:gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID
进行以下替换:
- INSTANCE_NAME:Cloud SQL 实例的名称
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
在响应中,验证是否显示 DNS 名称。此名称的格式如下:
INSTANCE_UID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog.
。例如:1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
。如需创建专用 DNS 区域,请使用
gcloud dns managed-zones create
命令。此区域与用于通过 Private Service Connect 端点连接到 Cloud SQL 实例的 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:区域的说明(例如 Cloud SQL 实例的 DNS 区域)
- DNS_NAME:区域的 DNS 后缀名称,例如
REGION_NAME.sql.goog.
(其中 REGION_NAME 是区域的名称) - NETWORK_NAME:VPC 网络的名称
创建 Private Service Connect 端点后,如需在区域中创建 DNS 记录,请使用
gcloud dns record-sets create
命令:gcloud dns record-sets create DNS_RECORD \ --project=PROJECT_ID \ --type=RRSET_TYPE \ --rrdatas=RR_DATA \ --zone=ZONE_NAME
进行以下替换:
- DNS_RECORD:DNS 记录的名称。此记录会设置为您在此过程之前从 Cloud SQL 实例检索到的 DNS 名称(例如
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
)。 - 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_RECORD:DNS 记录的名称。此记录会设置为您在此过程之前从 Cloud SQL 实例检索到的 DNS 名称(例如
REST
- 获取 Cloud SQL 实例的 DNS 名称。
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:实例的名称
- 创建专用 DNS 区域。此区域与用于通过 Private Service Connect 端点连接到 Cloud SQL 实例的 VPC 网络相关联。
- PROJECT_ID:包含 DNS 区域的 Google Cloud 项目的 ID 或项目编号
- ZONE_NAME:区域的名称
- DESCRIPTION:区域的说明(例如 Cloud SQL 实例的 DNS 区域)
- DNS_NAME:区域的 DNS 后缀名称,例如
REGION_NAME.sql.goog.
(其中 REGION_NAME 是区域的名称) - NETWORK_NAME:VPC 网络的名称
- 创建 Private Service Connect 端点后,在该区域中创建 DNS 记录。
- PROJECT_ID:包含 DNS 区域的 Google Cloud 项目的 ID 或项目编号。
- ZONE_NAME:区域的名称。
- DNS_RECORD:DNS 记录的名称。此记录会设置为您在此过程之前从 Cloud SQL 实例检索到的 DNS 名称(例如
1a23b4cd5e67.1a2b345c6d27.us-central1.sql.goog.
)。 - RRSET_TYPE:记录集的类型(例如
A
)。 - TTL:记录集的存留时间 (TTL),以秒为单位,例如
300
。 - 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
)。
在使用任何请求数据之前,请先进行以下替换:
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ ... "dnsName": "INSTANCE_ID.PROJECT_DNS_LABEL.REGION_NAME.sql.goog." }
dnsName
字段显示 Cloud SQL 实例的 DNS 名称。DNS 名称始终以英文句点 (.
) 结尾。
在使用任何请求数据之前,请先进行以下替换:
HTTP 方法和网址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
请求 JSON 正文:
{ "name": "ZONE_NAME", "description": "DESCRIPTION", "dnsName": "DNS_NAME", "visibility": "private", "privateVisibilityConfig": { "kind": "dns#managedZonePrivateVisibilityConfig", "networks": [ { "kind": "dns#managedZonePrivateVisibilityConfigNetwork", "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME" } ] } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "ZONE_NAME", "dnsName": "DNS_NAME", "description": "DESCRIPTION", "id": "ID", "nameServers": [ "ns-gcp-private.googledomains.com." ], "creationTime": "2024-05-10T17:05:34.607Z", "visibility": "private", "privateVisibilityConfig": { "networks": [ { "networkUrl": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME", "kind": "dns#managedZonePrivateVisibilityConfigNetwork" } ], "gkeClusters": [], "kind": "dns#managedZonePrivateVisibilityConfig" }, "cloudLoggingConfig": { "kind": "dns#managedZoneCloudLoggingConfig" }, "kind": "dns#managedZone" }
在使用任何请求数据之前,请先进行以下替换:
HTTP 方法和网址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME
请求 JSON 正文:
{ "deletions": [] "additions": [ { "name": "DNS_RECORD", "type": "RRSET_TYPE", "ttl": TTL, "rrdatas": [ "RR_DATA" ] } ] }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "additions": [ { "name": "DNS_RECORD", "type": "RRSET_TYPE", "ttl": TTL, "rrdatas": [ "RR_DATA" ], "signatureRrdatas": [], "kind": "dns#resourceRecordSet" } ], "deletions": [], "startTime": "2024-05-10T17:29:44.375Z", "id": "CHANGE_ID", "status": "pending", "kind": "dns#change" }
使用 DNS 记录直接连接
在使用 DNS 记录连接到 Cloud SQL 实例之前,请完成以下操作:
- 创建 Private Service Connect 端点。
- 确认实例的服务连接可接受端点。如需验证端点状态是否为
ACCEPTED
,请检查状态。 - 配置 DNS 托管式区域和 DNS 记录
满足这些条件后,您可以使用 DNS 记录从在其中创建了端点的任何 VPC 网络连接到实例。
mysql --host=DNS_RECORD --user=USERNAME -p
进行以下替换:
- DNS_RECORD:端点的 DNS 记录
- USERNAME:连接到实例的用户的名称
通过内部 IP 地址直接连接
在连接到启用了 Private Service Connect 的 Cloud SQL 实例之前,请完成以下操作:
- 创建 Private Service Connect 端点。
- 确认实例的服务连接可接受端点。如需验证端点状态是否为
ACCEPTED
,请检查状态。
满足这些条件后,您可以使用端点的 IP 地址从在其中创建了端点的任何 VPC 网络访问实例。
检索 Private Service Connect 端点的内部 IP 地址。
gcloud
如需检索 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:端点的区域名称
在响应中,验证
address
字段是否显示 IP 地址。这是内部 IP 地址。REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:端点的区域名称
- ADDRESS_NAME:端点的 IP 地址的名称
HTTP 方法和网址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "compute#address", "id": "ADDRESS_ID", "creationTimestamp": "2024-05-09T11:20:50.114-07:00", "name": "ADDRESS_NAME", "description": "This is the name of the internal IP address.", "address": "IP_ADDRESS", "status": "RESERVED", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/addresses/ADDRESS_NAME", "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "addressType": "EXTERNAL" }
内部 IP 地址是与
address
字段关联的值。-
如需连接到 Cloud SQL 实例,请使用内部 IP 地址。
mysql --host=IP_ADDRESS --user=USERNAME -p
进行以下替换:
- IP_ADDRESS:端点的 IP 地址
- USERNAME:连接到实例的用户的名称
使用 Cloud SQL Auth 代理连接
借助 Cloud SQL Auth 代理,您可以使用连接器安全访问启用了 Private Service Connect 的实例,而无需授权网络或配置 SSL。
为了允许使用 Cloud SQL Auth 代理客户端连接,请设置与为实例提供的建议 DNS 名称匹配的 DNS 记录。DNS 记录是 DNS 资源和域名之间的映射。
下载并安装 Cloud SQL Auth 代理
如需连接到启用了 Private Service Connect 的实例,您必须下载并安装 Cloud SQL Auth 代理的二进制文件。您下载的二进制文件取决于操作系统,以及该系统使用的是 32 位还是 64 位内核。大多数较新的硬件使用的是 64 位内核。
如果您不确定自己的机器运行的内核是 32 位还是 64 位,请使用 uname -a
命令(Linux 或 macOS)。对于 Windows,请参阅 Windows 文档。
启动 Cloud SQL Auth 代理
Cloud SQL Auth 代理支持与启用了 Private Service Connect 的实例的连接。如需了解详情,请参阅启动 Cloud SQL Auth 代理。
- 查看有关 Cloud SQL 实例的摘要信息(包括实例的连接名称)。
gcloud
如需查看有关 Cloud SQL 实例的摘要信息,请使用
gcloud sql instances describe
命令。gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --format='value(connectionName)'
进行以下替换:
- INSTANCE_NAME:Cloud SQL 实例的名称
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
此连接名称的格式为
PROJECT_ID:REGION_NAME:INSTANCE_NAME
。REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ ... "connectionName": "PROJECT_ID:REGION_NAME:INSTANCE_NAME" }
此连接名称的格式为
PROJECT_ID:REGION_NAME:INSTANCE_NAME
。 - 复制实例连接名称。
启动 Cloud SQL Auth 代理:
./cloud-sql-proxy INSTANCE_CONNECTION_NAME --psc
将 INSTANCE_CONNECTION_NAME 替换为您在上一步中复制的实例连接名称。
使用 Cloud SQL 语言连接器进行连接
Cloud SQL 语言连接器库可让您安全访问启用了 Private Service Connect 的 Cloud SQL 实例,而无需授权网络或配置 SSL。
如需允许与 Cloud SQL 语言连接器连接,请设置与为实例提供的建议 DNS 名称匹配的 DNS 记录。DNS 记录是 DNS 资源和域名之间的映射。
Cloud SQL 语言连接器支持通过各自库中的 PSC
IP 类型建立 Private Service Connect 连接。
从 App Engine 标准环境、Cloud Run 或 Cloud Run functions 进行连接
如需连接到启用了 Private Service Connect 的 Cloud SQL 实例,您可以使用 App Engine 标准环境、Cloud Run 或 Cloud Run functions。
在这些受支持的无服务器环境中,Cloud SQL 语言连接器以及使用 IP 地址和端口号的直接 TCP 连接均受支持。对于直接 TCP 连接,这是您在创建 Private Service Connect 端点时预留的 IP 地址。您可以将 IP 地址指定为数据库主机的地址。
如果您为端点创建 DNS 记录,则可以为主机指定此记录。
从 BigQuery 连接
如需访问 Cloud SQL 中的数据并通过内部 IP 连接对此数据进行查询,请使用 --enable-google-private-path
参数。此参数仅在以下情况下有效:
- 使用
--no-assign-ip
参数。 - 使用
--network
参数指定要用于创建内部连接的 VPC 网络的名称。
测试连接性
如需测试与启用了 Private Service Connect 的 Cloud SQL 实例的入站连接,请将 Private Service Connect 端点的 IP 地址设置为目的地 IP 地址。
gcloud
如需为启用了 Private Service Connect 的 Cloud SQL 实例创建连接测试,请使用 gcloud network-management connectivity-tests create
命令:
gcloud network-management connectivity-tests create CONNECTIVITY_TEST_NAME \ --source-instance=SOURCE_INSTANCE \ --destination-cloud-sql-instance=DESTINATION_CLOUD_SQL_INSTANCE \ --destination-network=DESTINATION_NETWORK \ --destination-port=DESTINATION_PORT \ --protocol=tcp
进行以下替换:
- CONNECTIVITY_TEST_NAME:连接测试的名称。
- SOURCE_INSTANCE:来源 IP 地址所在的 Compute Engine 实例的 URI(例如
projects/myproject/zones/myzone/instances/myinstance
)。 - DESTINATION_CLOUD_SQL_INSTANCE:Cloud SQL 实例的网址(例如
projects/myproject/instances/myinstance
)。 - DESTINATION_NETWORK:目标 IP 地址所在的 VPC 网络的 URI(例如
projects/myproject/global/networks/mynetwork
)。 - DESTINATION_PORT:为实例预留的端口号。对于 Cloud SQL for MySQL 实例,端口号为
3306
。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- CONNECTIVITY_TEST_NAME:连接测试的名称。
- SOURCE_IP_ADDRESS:来源 Compute Engine 实例的 IP 地址。
- SOURCE_INSTANCE:来源 IP 地址所在的 Compute Engine 实例的 URI(例如
projects/myproject/zones/myzone/instances/myinstance
)。 - SOURCE_NETWORK:来源 IP 地址所在的 VPC 网络的 URI(例如
projects/myproject/global/networks/mynetwork
)。 - DESTINATION_IP_ADDRESS:目标 Cloud SQL 实例的 IP 地址。
- DESTINATION_PORT:为实例预留的端口号。对于 Cloud SQL for MySQL 实例,端口号为
3306
。 - DESTINATION_NETWORK:目标 IP 地址所在的 VPC 网络的 URI(例如
projects/myproject/global/networks/mynetwork
)。
HTTP 方法和网址:
POST https://networkmanagement.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/connectivityTests?testId=CONNECTIVITY_TEST_NAME
请求 JSON 正文:
{ "source": { "ipAddress": "SOURCE_IP_ADDRESS", "instance": "SOURCE_INSTANCE", "network": "SOURCE_NETWORK" }, "destination": { "ipAddress": "DESTINATION_IP_ADDRESS", "port": DESTINATION_PORT, "network": "DESTINATION_NETWORK", "projectId": "PROJECT_ID" }, "protocol": "TCP" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/global/operations/operation-OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.networkmanagement.v1.OperationMetadata", "createTime": "2024-05-23T16:43:49.313981473Z", "target": "projects/PROJECT_ID/locations/global/connectivityTests/CONNECTIVITY_TEST_NAME", "verb": "create", "cancelRequested": false, "apiVersion": "v1" }, "done": false }
限制
- 您最多可以设置 20 个 Private Service Connect 端点,这些端点连接到启用了 Private Service Connect 的 Cloud SQL 实例的服务连接。
- 您不能将backends用于启用了 Private Service Connect 的实例。
- 以下标志已失效或受到影响:
- 您无法为启用了 Private Service Connect 的实例创建外部副本。
- 您无法在现有实例上激活或停用 Private Service Connect。
- 您无法将启用了 Private Service Connect 的实例配置为使用专用服务访问通道或外部 IP 连接。
- 您无法在启用了 Private Service Connect 的实例上启用外部 IP 连接。
- 您无法为实例启用专用服务访问通道或添加已获授权的网络。
- 您无法更改实例的连接类型。
- 您无法使用
gcloud sql connect
命令、Cloud Shell、Cloud Build 或 Database Migration Service 连接到启用了 Private Service Connect 的 Cloud SQL 实例。 - 在测试与启用了 Private Service Connect 的 Cloud SQL 实例的连接时,您无法设置以下各项:
- 直接将实例的内部 IP 地址或 DNS 名称设置为目标
- 将实例设置为来源
- 将 Private Service Connect 端点的 IP 地址设置为来源
- 不支持通过使用已获授权的网络基于 IP 地址列入许可名单。
- 如果您的网络项目包含使用旧 Cloud SQL 网络架构的实例,则您无法创建 Private Service Connect 实例。Cloud SQL 提供了一些工具,可帮助您将实例从旧的网络架构升级到新的网络架构。如需了解详情或检查项目中 Cloud SQL 实例的网络架构并执行任何必要的升级,请参阅将实例升级到新的网络架构。
问题排查
本部分包含有关与启用了 Private Service Connect 的 Cloud SQL 实例相关的问题的信息以及问题排查步骤。
问题 问题排查 实例的服务连接不接受 Private Service Connect 端点。 - 检查端点的状态。
gcloud
如需检查状态,请使用
gcloud compute forwarding-rules describe
命令。gcloud compute forwarding-rules describe ENDPOINT_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ | grep pscConnectionStatus
进行以下替换:
- ENDPOINT_NAME:端点的名称
- PROJECT_ID:包含端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:端点的区域名称
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含 Private Service Connect 端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:区域的名称
- ENDPOINT_NAME:端点的名称
HTTP 方法和网址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "compute#forwardingRule", "id": "ENDPOINT_ID", "creationTimestamp": "2024-05-09T12:03:21.383-07:00", "name": "ENDPOINT_NAME", "region": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME", "IPAddress": "IP_ADDRESS", "target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/ENDPOINT_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "CONNECTION_ID", "pscConnectionStatus": "ACCEPTED", "allowPscGlobalAccess": true }
- 验证端点状态是否为
ACCEPTED
。如果状态为PENDING
,则表示实例不允许包含该端点的 Google Cloud 项目。确保允许在其中创建端点的网络项目。如需了解详情,请参阅修改启用了 Private Service Connect 的实例。
后续步骤
- 详细了解专用 IP。
- 详细了解 Private Service Connect。
- 详细了解如何为启用了 Private Service Connect 的实例创建只读副本。
- 详细了解如何克隆启用了 Private Service Connect 的实例。
- 详细了解如何查看启用了 Private Service Connect 的实例的摘要信息。
- 详细了解如何为启用了 Private Service Connect 的实例设置和移除高可用性。
- 详细了解如何修改和删除启用了 Private Service Connect 的实例。