本页面介绍了如何使用 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) 角色和权限。 |
创建 Private Service Connect 端点
Private Service Connect 端点是使用方 VPC 网络中的内部 IP 地址,该网络中的客户端可以直接访问这些地址。客户端可以使用这些端点连接到 Cloud SQL 实例。
您可以让 Cloud SQL 在您的 VPC 中自动创建 Private Service Connect 端点,也可以手动创建该端点。
如需让 Cloud SQL 自动创建 Private Service Connect 端点,请执行以下操作:
- 在 VPC 网络中创建服务连接政策。借助此政策,您可以自动预配 Private Service Connect 端点。
- 创建 Cloud SQL 实例,并为该实例启用 Private Service Connect,然后将该实例配置为自动创建 Private Service Connect 端点。
- 检索实例的端点。这样,您就可以使用该端点连接到实例。
如需手动创建 Private Service Connect 端点,请执行以下操作:
- 创建 Cloud SQL 实例,并为该实例启用 Private Service Connect。
- 获取服务连接 URI。您可以使用此 URI 创建 Private Service Connect 端点。
- 为 Private Service Connect 端点预留内部 IP 地址,并使用该地址创建端点。
自动创建端点
以下几个部分介绍了如何配置实例,以便 Cloud SQL 自动创建 Private Service Connect 端点。
创建服务连接政策
借助服务连接政策,您可以授权指定的服务类在使用方 VPC 网络中创建 Private Service Connect 端点。您可以使用服务连接政策让 Cloud SQL 自动创建 Private Service Connect 端点。
您可以使用 Google Cloud 控制台、gcloud CLI 或 API 创建服务连接政策。
控制台
在 Google Cloud 控制台中,转到 Private Service Connect 页面。
点击连接政策标签页。
点击 Create connection policy(创建连接政策)。
输入连接政策的名称。
请按以下步骤指定服务类:
- 在 Source service class(来源服务类)字段中,选择 Google 服务。
- 从服务类菜单中,选择
google-cloud-sql
,因为 Cloud SQL 是连接政策的代管式服务。
在目标端点范围部分中,选择此政策适用的网络和区域。
在政策部分中,从子网菜单中选择一个或多个子网。子网用于为端点分配 IP 地址。
可选:为政策指定连接限制。此限制决定了可以使用此连接政策创建的端点数量。如果您未指定连接限制,则表示没有限制。
点击创建政策。
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=RESOURCE_HIERARCHY_LEVEL
替换以下内容:
POLICY_NAME
:您的服务连接政策的名称。NETWORK
:此政策适用的网络。PROJECT_ID
:VPC 网络项目的 ID 或编号。对于共享 VPC 网络,您必须在宿主项目中部署服务连接政策,因为服务项目不支持这些政策。REGION
:此政策适用的区域。要自动执行服务连接的每个区域中必须存在相同的政策。SERVICE_CLASS
:提供方提供的服务类资源标识符。对于 Cloud SQL,服务类为google-cloud-sql
。SUBNETS
:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。在创建和删除代管式服务实例时,这些 IP 地址会自动分配并返回子网池。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,您可以在这些政策中重复使用同一子网。您可以在逗号分隔列表中输入多个子网。LIMIT
:您可以使用此政策创建的端点数量上限。如果您未指定限制,则表示无限制。DESCRIPTION
:服务连接政策的可选说明。PRODUCER_INSTANCE_LOCATION
:使用此可选标志指定是否为 Cloud SQL 实例授权自定义位置层次结构。您只能将PRODUCER_INSTANCE_LOCATION
的值设为以下某个值:custom-resource-hierarchy-levels
:实例必须位于您提供的allowed-google-producers-resource-hierarchy-level
参数值所对应的项目、文件夹或组织中。none
:实例与服务连接政策位于同一项目中。
RESOURCE_HIERARCHY_LEVEL
:实例所在的项目、文件夹或组织的列表。此列表的格式为projects/PROJECT_ID
、folders/FOLDER_ID
或organizations/ORGANIZATION_ID
。
例如,以下命令为
google-cloud-sql
服务类创建服务连接政策,该政策从 managed-services
子网分配 IP 地址。使用此政策,您最多可以创建 10 个 Private Service Connect 端点。您必须在与代管式服务实例位于同一组织的项目中创建端点。Cloud SQL 实例位于 myproject
项目中。
gcloud network-connectivity service-connection-policies create cloud-sql-policy \ --network=default \ --project=my-project \ --region=us-central1 \ --service-class=google-cloud-sql \ --subnets=managed-service-subnet \ --psc-connection-limit=10 \ --producer-instance-location=custom-resource-hierarchy-levels \ --allowed-google-producers-resource-hierarchy-level=projects/myproject
REST
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的项目的 ID。REGION
:您的服务连接政策的区域。POLICY_NAME
:您的服务连接政策的名称。DESCRIPTION
:您的服务连接政策的可选说明。NETWORK
:您的服务连接政策的网络。LIMIT
:您可以使用此政策创建的端点数量上限。如果您未指定限制,则表示无限制。SUBNETS
:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。在创建和删除代管式服务实例时,这些 IP 地址会自动分配并返回子网池。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,则您可以在这些政策中重复使用同一子网。您可以采用英文逗号分隔列表的形式输入多个子网。SERVICE_CLASS
:提供方提供的服务类资源标识符。
HTTP 方法和网址:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies?serviceConnectionPolicyId=POLICY_NAME
请求 JSON 正文:
{ "description": "DESCRIPTION", "network": "projects/PROJECT_ID/global/networks/NETWORK", "pscConfig": { "limit": "LIMIT", "subnetworks": [ "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET" ] }, "serviceClass": "SERVICE_CLASS" }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata", "createTime": "2023-08-15T16:59:29.236110917Z", "target": "projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
创建 Cloud SQL 实例
您可以使用 gcloud CLI 或 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 \ --database-version=DATABASE_VERSION --cpu=NUMBER_OF_vCPUs \ --memory=MEMORY_SIZE \ --root-password=ROOT_PASSWORD \ --psc-auto-connections=network=VPC_NETWORK,project=SERVICE_PROJECT
进行以下替换:
- INSTANCE_NAME:实例的名称。
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- REGION_NAME:实例的区域名称。
ALLOWED_PROJECTS:允许的项目 ID 或编号的逗号分隔列表,Private Service Connect 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。
如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。
- AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。这是默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性和为实例停用高可用性。
- DATABASE_VERSION:实例的数据库版本(例如
SQLSERVER_2019_STANDARD
)。 - NUMBER_OF_vCPUs:实例的核心数。
- MEMORY_SIZE:实例的内存量。
- ROOT_PASSWORD:
root
Cloud SQL 用户的密码。 - VPC_NETWORK:需要创建 Private Service Connect 端点的 VPC 网络的路径。例如:
projects/my-host-project/global/networks/default
。 SERVICE_PROJECT:创建 Private Service Connect 端点的项目。如果 VPC 网络不是共享 VPC,则此项目只能是该网络的宿主项目。如果这是共享 VPC,则可以是宿主项目,也可以是服务项目。
您在自动连接参数中指定的所有项目都会自动添加到允许的项目中。(可选)对于您要手动创建 Private Service Connect 端点的任何项目,您可以将这些项目添加到允许的项目列表中。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- INSTANCE_NAME:实例的名称。
- REGION_NAME:实例的区域名称。
- ROOT_PASSWORD:
root
Cloud SQL 用户的密码。 - AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。这是默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性和为实例停用高可用性。
ALLOWED_PROJECTS:允许的项目 ID 或编号的逗号分隔列表,Private Service Connect 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。
如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。
- MACHINE_TYPE:一个枚举字符串值,表示实例的机器类型。例如:
db-custom-NUMBER_OF_vCPUs-MEMORY_SIZE
,其中 NUMBER_OF_vCPUs 和 MEMORY_SIZE 是实例所需的核心数和内存量。 - VPC_NETWORK:需要创建 Private Service Connect 端点的 VPC 网络的路径。
SERVICE_PROJECT:创建 Private Service Connect 端点的项目。如果 VPC 网络不是共享 VPC,则此项目只能是该网络的宿主项目。如果这是共享 VPC,则可以是宿主项目,也可以是服务项目。
您在自动连接参数中指定的所有项目都会自动添加到允许的项目中。(可选)对于您要手动创建 Private Service Connect 端点的任何项目,您可以将这些项目添加到允许的项目列表中。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
请求 JSON 正文:
{ "name": "INSTANCE_NAME", "project": PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "SQLSERVER_2019_STANDARD", "rootPassword": "ROOT_PASSWORD", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "ipConfiguration": { "ipv4Enabled": false, "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": [ { "consumerProject":"SERVICE_PROJECT", "consumerNetwork":"projects/SERVICE_PROJECT/global/networks/VPC_NETWORK" } ], "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" }
检索端点
通过检索内部 IP 地址(即实例的 Private Service Connect 端点),您可以使用此端点连接到实例。
gcloud
如需查看实例的相关信息,包括实例的 Private Service Connect 端点 IP 地址,请使用 gcloud sql instances describe
命令:
gcloud sql instances describe INSTANCE_NAME \ --project=PROJECT_ID \ --format='json(settings.ipConfiguration.pscConfig.pscAutoConnections)'
进行以下替换:
- INSTANCE_NAME:Cloud SQL 实例的名称。如果此实例启用了 Private Service Connect,则 VPC 网络中的 Private Service Connect 端点可以连接到此实例。
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
在响应中,记下 pscConfig:pscAutoConnections:ipAddress
字段旁边显示的值。此值是实例的 Private Service Connect 端点,也是内部 IP 地址。
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- INSTANCE_NAME:Cloud SQL 实例的名称。如果此实例启用了 Private Service Connect,则 VPC 网络中的 Private Service Connect 端点可以连接到此实例。
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#instance", "state": "RUNNABLE", "databaseVersion": "SQLSERVER_2019_STANDARD", "settings": { "authorizedGaeApplications": [], "tier": "db-custom-2-7680", "kind": "sql#settings", "availabilityType": "REGIONAL", "pricingPlan": "PER_USE", "replicationType": "SYNCHRONOUS", "activationPolicy": "ALWAYS", "ipConfiguration": { "authorizedNetworks": [], "pscConfig": { "allowedConsumerProjects": [ "ALLOWED_PROJECTS" ], "pscAutoConnections": { consumerNetwork:"projects/SERVICE_PROJECT/global/networks/VPC_NETWORK", consumerNetworkStatus:"CONSUMER_NETWORK_STATUS", consumerProject:"SERVICE_PROJECT", ipAddress:"IP_ADDRESS", status:"STATUS" }, "pscEnabled": true }, "ipv4Enabled": false }, }
启用了 Private Service Connect 的实例存在以下字段:
allowedConsumerProjects
:实例允许的项目列表。您可以从这些项目中的任何 VPC 网络到实例的服务连接来创建 Private Service Connect 端点。pscAutoConnections
:允许的 VPC 网络、服务连接政策的状态,以及实例端点 IP 地址的状态。pscEnabled
:实例是否启用了 Private Service Connect。
如需了解如何为此任务构建底层 REST API 请求,请参阅 instances:get 页面。
手动创建端点
接下来的几个部分介绍了如何手动创建 Private Service Connect 端点。
创建 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 \ --database-version=DATABASE_VERSION --cpu=NUMBER_OF_vCPUs \ --memory=MEMORY_SIZE \ --root-password=ROOT_PASSWORD
进行以下替换:
- INSTANCE_NAME:实例的名称。
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号。
- REGION_NAME:实例的区域名称。
ALLOWED_PROJECTS:允许的项目 ID 或编号的逗号分隔列表,Private Service Connect 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。
如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。
- AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。这是默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性和为实例停用高可用性。
- DATABASE_VERSION:实例的数据库版本(例如
SQLSERVER_2019_STANDARD
)。 - NUMBER_OF_vCPUs:实例的核心数。
- MEMORY_SIZE:实例的内存量。
- ROOT_PASSWORD:
root
Cloud SQL 用户的密码。
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:实例的区域名称。
- ROOT_PASSWORD:
root
Cloud SQL 用户的密码。 - AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
REGIONAL
:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。ZONAL
:不提供故障切换功能。这是默认值。
如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性和为实例停用高可用性。
ALLOWED_PROJECTS:允许的项目 ID 或编号的逗号分隔列表,Private Service Connect 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。
如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。
- MACHINE_TYPE:一个枚举字符串值,表示实例的机器类型。例如:
db-custom-NUMBER_OF_vCPUs-MEMORY_SIZE
,其中 NUMBER_OF_vCPUs 和 MEMORY_SIZE 是实例所需的核心数和内存量。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances
请求 JSON 正文:
{ "name": "INSTANCE_NAME", "project": PROJECT_ID", "region": "REGION_NAME", "databaseVersion": "SQLSERVER_2019_STANDARD", "rootPassword": "ROOT_PASSWORD", "kind": "sql#instance", "settings": { "availabilityType": "AVAILABILITY_TYPE", "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 网络连接到实例。
sqlcmd -S DNS_RECORD -d DATABASE_NAME -U USERNAME
进行以下替换:
- DNS_RECORD:端点的 DNS 记录
- DATABASE_NAME:实例中包含的 Cloud SQL for SQL Server 数据库的名称
- USERNAME:连接到实例的用户的名称
通过内部 IP 地址直接连接
在连接到启用了 Private Service Connect 的 Cloud SQL 实例之前,请执行以下操作:
- 创建 Private Service Connect 端点。
- 确认实例的服务连接可接受端点。如需验证端点状态是否为
ACCEPTED
,请检查状态。
满足这些条件后,您可以使用端点的 IP 地址从在其中创建了端点的任何 VPC 网络访问实例。
使用端点 IP 地址的名称检索 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 实例的服务连接检索 Private Service Connect 端点的内部 IP 地址。
gcloud
如需检索 IP 地址,请使用
gcloud compute forwarding-rules list
命令:gcloud compute forwarding-rules list \ --filter="TARGET:REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME" \ --project=PROJECT_ID
进行以下替换:
- REGION_NAME:端点的区域名称
- PROJECT_ID:包含端点的 Google Cloud 项目的 ID 或项目编号
- SERVICE_ATTACHMENT_NAME:Cloud SQL 实例的服务附件名称
在响应中,验证是否显示 IP 地址。这是内部 IP 地址。
以下是示例响应:
NAME
REGION
IP_ADDRESS
TARGET
myInstance
us-central1
10.10.10.10
us-central1/serviceAttachments/a-123456789e0a-psc-service-attachment-abc123d4e5f67gh8
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含端点的 Google Cloud 项目的 ID 或项目编号
- REGION_NAME:端点的区域名称
- SERVICE_ATTACHMENT_PROJECT_ID:包含服务附件的 Google Cloud 项目的 ID 或项目编号
- SERVICE_ATTACHMENT_NAME:Cloud SQL 实例的服务附件名称
HTTP 方法和网址:
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules?target="https://www.googleapis.com/compute/v1/projects/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME"
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "compute#forwardingRuleList", "id": "projects/PROJECT_ID/regions/REGION_NAME/forwardingRules", "items": [ { "kind": "compute#forwardingRule", "id": "FORWARDING_RULE_ID", "creationTimestamp": "2023-10-31T13:04:37.168-07:00", "name": "FORWARDING_RULE_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/SERVICE_ATTACHMENT_PROJECT_ID/regions/REGION_NAME/serviceAttachments/SERVICE_ATTACHMENT_NAME", "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules/FORWARDING_RULE_NAME", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME", "serviceDirectoryRegistrations": [ { "namespace": "goog-psc-default" } ], "networkTier": "PREMIUM", "labelFingerprint": "LABEL_FINGERPRINT_ID", "fingerprint": "FINGERPRINT_ID", "pscConnectionId": "PSC_CONNECTION_ID", "pscConnectionStatus": "CLOSED", "allowPscGlobalAccess": true } ], "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_NAME/forwardingRules" }
内部 IP 地址是与
IPAddress
字段关联的值。-
如需连接到 Cloud SQL 实例,请使用内部 IP 地址。
sqlcmd -S IP_ADDRESS -d DATABASE_NAME -U USERNAME
进行以下替换:
- IP_ADDRESS:端点的 IP 地址
- DATABASE_NAME:实例中包含的 Cloud SQL for SQL Server 数据库的名称
- USERNAME:连接到实例的用户的名称
使用 Cloud SQL Auth 代理连接
借助 Cloud SQL Auth 代理,您可以使用连接器安全访问启用了 Private Service Connect 的实例,而无需授权网络或配置 SSL。
为了允许使用 Cloud SQL Auth 代理客户端连接,请设置与为实例提供的建议 DNS 名称匹配的 DNS 记录。DNS 记录是 DNS 资源和域名之间的映射。
如果您通过 Private Service Connect 进行连接,则需要使用 Cloud SQL Auth 代理 v2.5.0 或更高版本。
下载并安装 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 连接。
- Cloud SQL Python 连接器 (v1.3.0 或更高版本)
- Cloud SQL Go 连接器 (v1.4.0 或更高版本)
- Cloud SQL Java 连接器 (v1.13.0 或更高版本)
- Cloud SQL Node.js 连接器 (v0.5.0 或更高版本)
从 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 SQL Server 实例,端口号为
1433
。
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 SQL Server 实例,端口号为
1433
。 - 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 实例的服务连接。
- 您无法为启用了 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 或 Datastream 连接到启用了 Private Service Connect 的 Cloud SQL 实例。 - 在测试与启用了 Private Service Connect 的 Cloud SQL 实例的连接时,您无法设置以下各项:
- 直接将实例的内部 IP 地址或 DNS 名称设置为目标
- 将实例设置为来源
- 将 Private Service Connect 端点的 IP 地址设置为来源
- 不支持通过使用已获授权的网络基于 IP 地址列入许可名单。
- 对于启用了 Private Service Connect 的 Cloud SQL 实例,Managed Service for Microsoft Active Directory(也称为托管式 Microsoft AD)和关联的服务器均不受支持。
问题排查
本部分包含有关与启用了 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 的实例。