使用 Private Service Connect 连接到实例

本页面介绍了如何使用 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 端点,请执行以下操作:

  1. 在 VPC 网络中创建服务连接政策。借助此政策,您可以自动预配 Private Service Connect 端点。
  2. 创建 Cloud SQL 实例,并为该实例启用 Private Service Connect,然后将该实例配置为自动创建 Private Service Connect 端点。
  3. 检索实例的端点。这样,您就可以使用该端点连接到实例。

如需手动创建 Private Service Connect 端点,请执行以下操作:

  1. 创建 Cloud SQL 实例,并为该实例启用 Private Service Connect。
  2. 获取服务连接 URI。您可以使用此 URI 创建 Private Service Connect 端点。
  3. 为 Private Service Connect 端点预留内部 IP 地址,并使用该地址创建端点

自动创建端点

以下几个部分介绍了如何配置实例,以便 Cloud SQL 自动创建 Private Service Connect 端点。

创建服务连接政策

借助服务连接政策,您可以授权指定的服务类在使用方 VPC 网络中创建 Private Service Connect 端点。您可以使用服务连接政策让 Cloud SQL 自动创建 Private Service Connect 端点。

您可以使用 Google Cloud 控制台、gcloud CLI 或 API 创建服务连接政策。

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    前往 Private Service Connect

  2. 点击连接政策标签页。

  3. 点击 Create connection policy(创建连接政策)。

  4. 输入连接政策的名称

  5. 请按以下步骤指定服务类:

    1. Source service class(来源服务类)字段中,选择 Google 服务
    2. 服务类菜单中,选择 google-cloud-sql,因为 Cloud SQL 是连接政策的代管式服务。
  6. 目标端点范围部分中,选择此政策适用的网络区域

  7. 政策部分中,从子网菜单中选择一个或多个子网。子网用于为端点分配 IP 地址。

  8. 可选:为政策指定连接限制。此限制决定了可以使用此连接政策创建的端点数量。如果您未指定连接限制,则表示没有限制。

  9. 点击创建政策

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_IDfolders/FOLDER_IDorganizations/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 \
--tier=MACHINE_TYPE \
--database-version=DATABASE_VERSION \
--psc-auto-connections=network=VPC_NETWORK,project=SERVICE_PROJECT \
--enable-bin-log

进行以下替换:

  • 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:不提供故障切换功能。这是默认值。

    如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性为实例停用高可用性

  • MACHINE_TYPE:实例的机器类型。
  • DATABASE_VERSION:实例的数据库版本(例如 MYSQL_8_0)。
  • 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:实例的区域名称。
  • AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
    • REGIONAL:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。
    • ZONAL:不提供故障切换功能。这是默认值。

    如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性为实例停用高可用性

  • ALLOWED_PROJECTS:允许的项目 ID 或编号的逗号分隔列表,Private Service Connect 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。

    如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。

  • MACHINE_TYPE:实例的机器类型。
  • 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": "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"
        ],
        "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)'

进行以下替换:

在响应中,记下 pscConfig:pscAutoConnections:ipAddress 字段旁边显示的值。此值是实例的 Private Service Connect 端点,也是内部 IP 地址。

REST

在使用任何请求数据之前,请先进行以下替换:

HTTP 方法和网址:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_8_0",
  "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 \
--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 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。

    如果某个项目未包含在此列表中,您将无法在该项目中创建 Private Service Connect 端点来连接到实例。

  • AVAILABILITY_TYPE:为实例启用高可用性。对于此参数,请指定以下值之一:
    • REGIONAL:启用高可用性,建议用于生产实例。实例会故障切换到所选区域内的另一个可用区。
    • ZONAL:不提供故障切换功能。这是默认值。

    如需详细了解如何为实例设置和移除高可用性,请参阅为现有实例配置高可用性为实例停用高可用性

  • MACHINE_TYPE:实例的机器类型。
  • DATABASE_VERSION:实例的数据库版本(例如 MYSQL_8_0)。

Terraform

如需创建启用 Private Service Connect 的实例,请使用 google_sql_database_instanceTerraform 资源

resource "google_sql_database_instance" "default" {
  name             = "mysql-instance"
  region           = "us-central1"
  database_version = "MYSQL_8_0"
  settings {
    tier              = "db-f1-micro"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled            = true
      binary_log_enabled = true
    }
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = []
      }
      ipv4_enabled = false
    }
  }
  deletion_protection = false # Set to "true" to prevent destruction of the resource
}

如需在 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 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 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 端点可以从这些项目 ID 或编号连接到 Cloud SQL 实例。

    如果某个项目未包含在此列表中,您将无法在该项目中创建 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_addressTerraform 资源

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"     # Replace value with the name of the subnet here.
  address      = "10.128.0.43" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

如需在 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 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 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

  1. 如需为 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

    进行以下替换:

    • ADDRESS_NAME:内部 IP 地址的名称。
    • PROJECT_ID:端点的 Google Cloud 项目的 ID 或项目编号
    • REGION_NAME:端点的区域名称。
    • SUBNET_NAME:IP 地址的子网名称。
    • INTERNAL_IP_ADDRESS:要预留的 IP 地址。此 IP 地址必须在子网的主要 IP 地址范围内。 该 IP 地址可以是 RFC 1918 地址,也可以是具有非 RFC 范围的子网。
  2. 如需验证 IP 地址是否已预留,请使用 gcloud compute addresses list 命令:

    gcloud compute addresses list ADDRESS_NAME \
    --project=PROJECT_ID

    在响应中,验证 IP 地址是否显示为 RESERVED 状态。

  3. 如需创建 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
  4. 如需验证服务连接是否接受端点,请使用
    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 资源

resource "google_compute_address" "default" {
  name         = "psc-compute-address-${google_sql_database_instance.default.name}"
  region       = "us-central1"
  address_type = "INTERNAL"
  subnetwork   = "default"     # Replace value with the name of the subnet here.
  address      = "10.128.0.43" # Replace value with the IP address to reserve.
}

data "google_sql_database_instance" "default" {
  name = resource.google_sql_database_instance.default.name
}

resource "google_compute_forwarding_rule" "default" {
  name                  = "psc-forwarding-rule-${google_sql_database_instance.default.name}"
  region                = "us-central1"
  network               = "default"
  ip_address            = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target                = data.google_sql_database_instance.default.psc_service_attachment_link
}

如需在 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 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

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

REST

  1. 为 Private Service Connect 端点预留内部 IP 地址。

  2. 验证 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 状态。

  3. 创建 Private Service Connect 端点并将其指向 Cloud SQL 服务连接。

  4. 验证服务连接是否接受端点。

    在使用任何请求数据之前,请先进行以下替换:

    • 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

  1. 如需查看有关 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.

  2. 如需创建专用 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 网络的名称
  3. 创建 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)。

REST

  1. 获取 Cloud SQL 实例的 DNS 名称。
  2. 在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
    • INSTANCE_NAME:实例的名称

    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 名称始终以英文句点 (.) 结尾。

  3. 创建专用 DNS 区域。此区域与用于通过 Private Service Connect 端点连接到 Cloud SQL 实例的 VPC 网络相关联。
  4. 在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:包含 DNS 区域的 Google Cloud 项目的 ID 或项目编号
    • ZONE_NAME:区域的名称
    • DESCRIPTION:区域的说明(例如 Cloud SQL 实例的 DNS 区域)
    • DNS_NAME:区域的 DNS 后缀名称,例如 REGION_NAME.sql.goog.(其中 REGION_NAME 是区域的名称)
    • NETWORK_NAME:VPC 网络的名称

    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"
    }
    
  5. 创建 Private Service Connect 端点后,在区域中创建 DNS 记录。
  6. 在使用任何请求数据之前,请先进行以下替换:

    • 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 方法和网址:

    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 实例之前,请执行以下操作:

  1. 创建 Private Service Connect 端点
  2. 确认实例的服务连接可接受端点。如需验证端点状态是否为 ACCEPTED,请检查状态
  3. 配置 DNS 托管式区域和 DNS 记录

满足这些条件后,请使用 DNS 记录从在其中创建了端点的任何 VPC 网络连接到实例。

mysql --host=DNS_RECORD --user=USERNAME -p

进行以下替换:

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

通过内部 IP 地址直接连接

在连接到启用了 Private Service Connect 的 Cloud SQL 实例之前,请执行以下操作:

  1. 创建 Private Service Connect 端点
  2. 确认实例的服务连接可接受端点。如需验证端点状态是否为 ACCEPTED,请检查状态

满足这些条件后,您可以使用端点的 IP 地址从在其中创建了端点的任何 VPC 网络访问实例。

  1. 使用端点 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 字段关联的值。

  2. 或者,使用 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 字段关联的值。

  3. 如需连接到 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 资源和域名之间的映射。

如果您通过 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 代理

  1. 查看有关 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

  2. 复制实例连接名称。
  3. 启动 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 RunCloud 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 实例的服务连接。
  • 您无法为启用了 Private Service Connect 的实例使用 Private Service Connect 后端
  • 以下标志已失效或受到影响:
    • --no-assign-ip: 使用此标志,因为不支持启用了 Private Service Connect 的实例使用其他连接类型,例如外部 IP 连接
    • --authorized-networks: 您无法使用此标志来添加已获授权的网络
    • --network: 您不能使用此标志,因为它与专用服务访问通道相关联
    • --allocated-ip-range-name: 您不能使用此标志,因为允许的 IP 地址范围名称不受支持
  • 您无法为启用了 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 地址列入许可名单。
    • 如果您的网络项目包含使用旧 Cloud SQL 网络架构的实例,则您无法创建 Private Service Connect 实例。Cloud SQL 提供了一些工具,可帮助您将实例从旧的网络架构升级到新的网络架构。如需了解详情或检查项目中 Cloud SQL 实例的网络架构并执行任何必要的升级,请参阅将实例升级到新的网络架构

    问题排查

    本部分包含有关与启用了 Private Service Connect 的 Cloud SQL 实例相关的问题的信息以及问题排查步骤。

    问题 问题排查
    实例的服务连接不接受 Private Service Connect 端点。
    1. 检查端点的状态。

      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
      }
      
    2. 验证端点状态是否为 ACCEPTED。如果状态为 PENDING,则表示实例不允许包含该端点的 Google Cloud 项目。确保允许在其中创建端点的网络项目。如需了解详情,请参阅修改启用了 Private Service Connect 的实例

    后续步骤