配置专用 IP

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本页面介绍如何将 Cloud SQL 实例配置为使用专用 IP。

如需了解专用 IP 的工作原理以及环境和管理要求,请参阅专用 IP

准备工作

API 和 IAM 要求

  • 您必须为您的项目启用 Service Networking API
  • 如果您使用的是共享 VPC 网络,还需要为宿主项目启用此 API。

  • 为了管理专用服务访问通道连接,用户应具有以下 IAM 权限。如果您没有所需的权限,则可能会出现权限不足错误。
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    如果您使用的是共享 VPC 网络,则还需要将用户添加到宿主项目,并在宿主项目上将相同权限分配给用户。

专用服务访问通道

在项目中创建新的 VPC 网络时,您需要配置专用服务访问通道以分配 IP 地址范围并创建专用服务连接。这允许 VPC 网络中的资源连接到 Cloud SQL 实例。 控制台提供了向导,帮助您设置此配置。

将实例配置为使用专用 IP

您可以在创建 Cloud SQL 实例时将实例配置为使用专用 IP,或对现有实例如此配置。

为新实例配置专用 IP

如需在创建 Cloud SQL 实例时将该实例配置为使用专用 IP,请执行以下操作:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击创建实例
  3. 展开显示配置选项
  4. 展开连接
  5. 选择专用 IP

    下拉列表显示了项目中的可用 VPC 网络。如果您的项目是共享 VPC 的服务项目,则还会显示宿主项目的 VPC 网络。

  6. 选择您要使用的 VPC 网络。
  7. 如果您看到一条消息,提示您需要设置专用服务连接,请执行以下操作:

    1. 点击设置连接
    2. 分配 IP 范围部分中,选择以下选项之一:
      • 从下拉列表中选择一个或多个现有的 IP 地址范围,或者创建一个新的 IP 地址范围。下拉列表包含先前分配的范围(若有),或者您可以选择分配新 IP 范围,然后输入新范围和名称。
      • 在网络中使用自动分配的 IP 地址范围
    3. 点击继续
    4. 点击创建连接
    5. 验证您是否看到以下消息:Private service connection for network VPN_NAME has been successfully created
  8. (可选)您可以为实例指定分配的 IP 地址范围以用于连接。
    1. 展开显示分配的 IP 范围选项
    2. 从下拉菜单中选择一个 IP 地址范围。
  9. 完成实例配置。
  10. 点击创建实例

gcloud

确保已为您的项目配置专用服务访问通道

创建 Cloud SQL 实例,并使用 --network 参数指定所选 VPC 网络的名称,使用 --no-assign-ip 标志停用公共 IP 地址。

--network 参数值的格式为 projects/PROJECT_ID/global/networks/VPC_NETWORK_NAMEPROJECT_ID 是 VPC 网络的项目 ID。如果 VPC 网络是共享 VPC,则该 ID 应该是共享 VPC 宿主项目的 ID。

(可选)使用 --allocated-ip-range-name 参数指定专用地址范围的名称。如果指定了名称,它将设置分配的范围名称,并为主实例创建一个专用地址范围。例如 google-managed-services-default。范围名称应符合 RFC-1035 并且长度介于 1-63 个字符之间。(gcloud alpha sql instances create)。

如果 VPC 网络是共享 VPC,则在以下 gcloud 命令中,PROJECT_ID 应为共享 VPC 服务项目的 ID。

gcloud beta sql instances create INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip \
--allocated-ip-range-name=RANGE_NAME

Terraform

如需为新实例配置专用 IP,请使用以下 Terraform 资源:


resource "google_compute_network" "private_network" {
  name                    = "private-network"
  auto_create_subnetworks = "false"
}

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.private_network.id
}

resource "google_service_networking_connection" "private_vpc_connection" {
  network                 = google_compute_network.private_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

resource "google_sql_database_instance" "default" {
  name             = "private-ip-sql-instance"
  region           = "us-central1"
  database_version = "POSTGRES_14"

  depends_on = [google_service_networking_connection.private_vpc_connection]

  settings {
    tier = "db-custom-2-7680"
    ip_configuration {
      ipv4_enabled    = "false"
      private_network = google_compute_network.private_network.id
    }
  }
  deletion_protection = false # set to true to prevent destruction of the resource
}

应用更改

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下步骤:

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的 Google Cloud 项目:
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    
  3. 创建一个目录,并在该目录中打开一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf
    mkdir DIRECTORY && cd DIRECTORY && nano main.tf
    
  4. 将示例复制到 main.tf
  5. 查看和修改要应用到您的环境的示例参数。
  6. 依次按 Ctrl-xy 保存更改。
  7. 初始化 Terraform:
    terraform init
  8. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

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

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

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

删除更改

如需删除更改,请执行以下操作:

  1. 如需停用删除防护,请在 Terraform 配置文件中将 deletion_protection 参数设置为 false
    deletion_protection =  "false"
  2. 运行以下命令并在提示符处输入 yes,以应用更新后的 Terraform 配置:
    terraform apply
  1. 运行以下命令并在提示符处输入 yes,以移除之前使用 Terraform 配置应用的资源:

    terraform destroy

REST v1

创建使用专用 IP 地址的新实例:

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

  • project-id:项目 ID
  • instance-id:实例 ID
  • vpc-name:您要用于实例的 VPC 网络的名称
  • allocated-ip-range:可选。如果指定此标志,则系统会设置为其分配 IP 地址范围的范围名称。范围名称应符合 RFC-1035 并且长度介于 1-63 个字符之间。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/project-id/global/networks/vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

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

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

REST v1beta4

创建使用专用 IP 地址的新实例:

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

  • project-id:项目 ID
  • instance-id:实例 ID
  • vpc-name:您要用于实例的 VPC 网络的名称
  • allocated-ip-range:可选。如果指定此标志,则系统会设置为其分配 IP 地址范围的范围名称。范围名称应符合 RFC-1035 并且长度介于 1-63 个字符之间。

HTTP 方法和网址:

POST https://sqladmin.googleapis.com/v1beta4/projects/project-id/instances

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "projects/project-id/global/networks/vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

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

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

为现有实例配置专用 IP

如果将现有的 Cloud SQL 实例配置为使用专用 IP,则会导致该实例重启,进而造成停机。

要将现有实例配置为使用专用 IP,请执行以下操作:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 如需打开实例的概览页面,请点击实例名称。
  3. 从 SQL 导航菜单中选择连接
  4. 选中专用 IP 复选框。

    下拉列表会显示项目中可用的网络。

  5. 选择您要使用的 VPC 网络:
  6. 如果您看到必须提供专用服务连接

    1. 点击设置连接
    2. 分配 IP 范围部分,选择以下选项之一:
      • 从下拉列表中选择一个或多个现有的 IP 地址范围,或者创建一个新的 IP 地址范围。下拉列表包含先前分配的范围(若有),或者您可以选择分配新 IP 范围,然后输入新范围和名称。
      • 在网络中使用自动分配的 IP 地址范围。
    3. 点击继续
    4. 点击创建连接
    5. 确认您看到已成功为网络 VPC_NETWORK_NAME 创建专用服务连接状态。
  7. 点击保存

gcloud

确保已为您的项目配置专用服务访问通道

通过使用 --network 参数指定所选 VPC 网络的名称来更新 Cloud SQL 实例。

gcloud beta sql instances patch INSTANCE_ID \
--project=PROJECT_ID \
--network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME \
--no-assign-ip

REST v1

创建使用专用 IP 地址的新实例:

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

  • project-id:项目 ID
  • instance-id:实例 ID
  • vpc-name:您要用于实例的 VPC 网络的名称
  • allocated-ip-range:可选。如果指定此标志,则系统会设置为其分配 IP 地址范围的范围名称。范围名称应符合 RFC-1035 并且长度介于 1-63 个字符之间。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

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

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

REST v1beta4

创建使用专用 IP 地址的新实例:

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

  • project-id:项目 ID
  • instance-id:实例 ID
  • vpc-name:您要用于实例的 VPC 网络的名称
  • allocated-ip-range:可选。如果指定此标志,则系统会设置为其分配 IP 地址范围的范围名称。范围名称应符合 RFC-1035 并且长度介于 1-63 个字符之间。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

请求 JSON 正文:

{
  "settings":
  {
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "vpc-name",
      "allocatedIpRange": "allocated-ip-range"
    }
  }
}

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

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

使用实例的专用 IP 连接到实例

您可以使用专用服务访问通道从同一 VPC 子网(此处定义为内部来源)中的 Compute Engine 或 Google Kubernetes Engine 实例或从该网络外部(外部来源)连接到 Cloud SQL 实例。

从内部来源连接

如需从您的 Cloud SQL 实例(例如 Compute Engine 资源上运行的 Cloud SQL Auth 代理)所在的 Google Cloud 项目中的来源进行连接,该资源必须位于已为 Cloud SQL 实例建立专用服务访问通道的同一 VPC 网络中。

如需从无服务器源(例如 App Engine 标准环境Cloud RunCloud Functions 进行连接,您的应用或函数将通过无服务器 VPC 访问通道直接连接到您的实例,而无需使用 Cloud SQL Auth 代理。

从外部来源连接

如果外部网络连接到 Cloud SQL 实例所连接的 VPC 网络,您可以从外部网络(本地网络或 VPC 网络)中的客户端进行连接。如需允许从外部网络进行连接,请执行以下操作:

  1. 确保您的 VPC 网络已使用 Cloud VPN 隧道或者用于专用互连合作伙伴互连的 VLAN 连接来连接到外部网络。
  2. 确保管理 Cloud VPN 隧道和 Cloud Interconnect 连接 (VLAN) 的 Cloud Router 路由器上的 BGP 会话已收到来自本地网络的特定前缀(目的地)。

    默认路由(目的地 0.0.0.0/0)无法导入到 Cloud SQL VPC 网络中,因为该网络有自己的本地默认路由。即使 Cloud SQL 对等互连配置为从您的 VPC 网络导入自定义路由,也会始终使用目的地的本地路由。

  3. 识别由专用服务连接生成的对等互连连接。根据服务的不同,专用服务连接可能会创建以下一个或多个对等互连连接,但不一定会全部创建:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. 更新所有对等互连连接以启用导出自定义路由功能。
  5. 识别专用服务连接使用的分配范围
  6. 在管理 Cloud VPN 隧道或 Cloud Interconnect 连接 (VLAN) 的 BGP 会话的 Cloud Router 上,针对分配的范围创建 Cloud Router 自定义路由通告

从云端 Shell 连接

Cloud Shell 目前不支持连接到仅具有专用 IP 地址的 Cloud SQL 实例。

从非 RFC 1918 地址连接

RFC 1918 指定分配给内部(即组织内)使用的 IP 地址,这些地址将不会在互联网上路由。具体包括:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

使用专用 IP 地址连接到 Cloud SQL 实例时会自动获得授权来使用 RFC 1918 地址范围。因此,所有专用客户端都可以在不经过代理的情况下访问数据库。

非 RFC 1918 地址范围(不在 RFC 1918 地址空间内的地址)必须配置为已获授权的网络

如需从非 RFC 1918 地址进行连接,您必须设置每个实例的 IP 授权,以允许来自非 RFC 1918 地址范围的流量。

例如,按照以下方式使用 gcloud 命令:

gcloud sql instances patch INSTANCE_NAME \
--authorized-networks=192.88.99.0/24,11.0.0.0/24

默认情况下,Cloud SQL 不会从 VPC 中获知非 RFC 1918 子网路由。您需要将网络对等互连更新到 Cloud SQL,以导出所有非 RFC 1918 路由。

gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
--network=NETWORK \
--export-subnet-routes-with-public-ip \
--project=PROJECT_ID
  • cloudsql-postgres-googleapis-comVPC 网络页面中的专用服务连接名称。

    选择您的网络,然后查找专用服务连接部分。

  • NETWORK 为 VPC 网络的名称。
  • PROJECT_ID 是 VPC 网络的项目的 ID。如果您使用的是共享 VPC,请使用宿主项目 ID。

问题排查

请参阅问题排查以了解已知的连接问题,并参阅调试连接问题以获取自助诊断方面的帮助。

后续步骤