为通过自动注册的 Private Service Connect 连接预配的实例设置多个 VPC 网络

本页面介绍了如何为现有 Memorystore for Redis Cluster 实例设置多个 Virtual Private Cloud (VPC) 网络的连接,该实例已有一些自动注册的 Private Service Connect 连接。本教程将向您展示如何通过以下方式实现此目的:在使用方网络中创建 Private Service Connect 端点,以 Memorystore 实例的服务连接为目标,并将组件注册到该实例。本页面还介绍了如何通过 Private Service Connect 连接将客户端连接到实例。

如需了解如何为未通过自动注册的 Private Service Connect 连接预配的新 Memorystore 设置多个 VPC 网络,请参阅 使用用户注册的 Private Service Connect 连接设置多个 VPC 网络

如需详细了解多个 VPC 网络设置,请参阅关于多 VPC 网络

展示网络架构的图表。它有两个客户 VPC 网络连接到 Private Service Connect 连接,而该连接又连接到 Memorystore 服务连接。

主要步骤摘要

本部分简要列出了本教程中设置新的 Private Service Connect 连接的主要步骤。首先,您应完成准备工作部分中的步骤,为学习本教程做好准备。

主要步骤

  1. 第 1 步:记下服务连接路径
  2. 第 2 步:为第二个 VPC 网络设置和注册 Private Service Connect 连接
  3. 第 3 步:设置客户端连接

此外,您还可以:

准备工作

在开始之前,请确保您拥有以下 IAM 角色 和 Google Cloud 资源。

所需 IAM 角色

示例资源 ID 资源类型
roles/redis.admin 可以完全控制 Memorystore for Redis Cluster 实例,并控制实例的整个生命周期。
roles/servicedirectory.editor 授予您修改 Service Directory 资源的权限。创建 Private Service Connect 端点需要此角色。
roles/compute.networkAdmin 授予对 VPC 网络的完整控制权限来启动与 Memorystore 实例的连接。您可以创建和管理 IP 地址、防火墙规则和 Private Service Connect 端点。创建 Private Service Connect 端点需要此角色。

如果您使用 Private Service Connect 从多个 VPC 网络连接到 Memorystore 实例,则每个网络可能都有自己的管理员。

前提条件资源

在开始本教程之前,您需要创建以下资源。我们建议您使用以下 ID 和位置创建资源,但您也可以选择自己的 ID 和位置。本教程假定您已创建 Memorystore 实例,该实例具有两个自动注册的 Private Service Connect 连接。

示例资源 ID 资源类型 示例完整路径 说明
my-memorystore-instance Memorystore for Redis Cluster 实例 在本教程的示例命令中,此值表示您的现有实例,该实例在网络 1 中已有一个自动注册的 Private Service Connect 连接。
my-network-1 VPC 网络 projects/my-project-1/global/networks/my-network-1 您的 Memorystore 在此网络上有一个自动注册的 Private Service Connect 连接
my-project-1 Google Cloud 项目 您的 Memorystore 实例位于此项目中

在本教程中,您将使用以下资源在 VPC 网络 2 中创建两个 Private Service Connect 连接:

示例资源 ID 资源类型 示例完整路径 说明
my-project-2 Google Cloud 项目 在本教程中,这是您创建第二个网络和第二个子网的项目。不过,如果您愿意,第二个网络和子网可以与第一个网络位于同一项目中。
my-network-2 VPC 网络 projects/my-project-2/global/networks/my-network-2 在本教程中,您将在此网络中创建 2 个 Private Service Connect 端点
my-subnet-2 VPC 子网 projects/my-project-2/regions/us-central1/subnetworks/my-subnet-2 在本教程中,您将在此子网中预留 2 个 IP 地址

启用 API

启用管理 Compute Engine 网络、Memorystore for Redis Cluster 和 Private Service Connect 资源所需的以下 API。

gcloud

如需在项目 2 中启用 API,请运行以下命令:

gcloud services enable --project=PROJECT_2_ID compute.googleapis.com
gcloud services enable --project=PROJECT_2_ID redis.googleapis.com
gcloud services enable --project=PROJECT_2_ID servicedirectory.googleapis.com

第 1 步:记下服务连接路径

记下 Memorystore 实例的两个服务连接 URI。您可以使用这些服务连接 URI 设置新的 Private Service Connect 连接。

gcloud

如需查看启用了 Private Service Connect 的实例的摘要信息,请查找 pscServiceAttachments 字段。此字段显示指向实例的服务连接的两个 URI。如需查看此信息,请使用 gcloud redis clusters describe 命令:

gcloud redis clusters describe INSTANCE_ID --project=PROJECT_1_ID --region=REGION_ID

替换以下内容:

  • INSTANCE_ID 是 Memorystore 实例的名称。
  • PROJECT_1_ID 是包含 Memorystore 实例的项目 1 的 ID。
  • REGION_ID 是 Memorystore 实例所在区域的 ID。

以下显示了此命令的示例输出:

gcloud redis clusters describe my-memorystore-instance \
--project=my-project-1 --region=us-central1

...

pscServiceAttachments:
- connectionType: CONNECTION_TYPE_DISCOVERY
  serviceAttachment: projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-8d7d48ef-3ca3-4d-psc-sa
- serviceAttachment: projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-8d7d48ef-3ca3-4d-psc-sa-2

第 2 步:为第二个 VPC 网络设置和注册 Private Service Connect 连接

本部分介绍了如何设置第二个 VPC 网络所需的两个 Private Service Connect 连接。

为网络 2 创建 Private Service Connect 端点

本部分介绍了在网络 2 中创建 2 个 Private Service Connect 端点所需执行的操作。

为网络 2 预留 IP 地址

接下来,在网络 2 中预留 2 个 IP 地址。

预留 IP 地址 1

gcloud

如需预留 IP 地址 1,请运行 gcloud compute addresses create 命令:

gcloud compute addresses create IP_ADDRESS_1_ID \
--project=PROJECT_2_ID \
--addresses=IP_ADDRESS_1 \
--region=REGION_ID \
--subnet=projects/PROJECT_2_ID/regions/REGION_ID/subnetworks/SUBNET_2_ID \
--purpose=GCE_ENDPOINT

替换以下内容:

  • IP_ADDRESS_1_ID 是您为 IP 地址指定的 ID。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个虚拟私有云网络和子网的项目。
  • IP_ADDRESS_1 是您从 SUBNET_2_ID 范围中选择的 IP 地址,您已将该范围预留为 前提条件资源 的一部分。
  • REGION_ID 是 Memorystore 实例所在的区域。
  • SUBNET_2_ID 是您在项目 2 的网络 2 上预留的子网的 ID,作为 前提条件资源 的一部分。

例如:

gcloud compute addresses create my-ip-address-1 \
--project=my-project-1 \
--addresses=10.142.0.10 \
--region=us-central1 \
--subnet=projects/my-project-1/regions/us-central1/subnetworks/my-subnet-1 \
--purpose=GCE_ENDPOINT
预留 IP 地址 2

gcloud

如需预留 IP 地址 2,请运行 gcloud compute addresses create 命令:

gcloud compute addresses create IP_ADDRESS_2_ID \
--project=PROJECT_2_ID \
--addresses=IP_ADDRESS_2 \
--region=REGION_ID \
--subnet=projects/PROJECT_2_ID/regions/REGION_ID/subnetworks/SUBNET_2_ID \
--purpose=GCE_ENDPOINT

替换以下内容:

  • IP_ADDRESS_2_ID 是您为 IP 地址指定的 ID。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个 VPC 网络和子网的项目。
  • IP_ADDRESS_2 是您从 SUBNET_2_ID 范围中选择的 IP 地址,您已将该范围预留为 前提条件资源 的一部分。
  • REGION_ID 是 Memorystore 实例所在的区域。
  • SUBNET_2_ID 是您在项目 2 的网络 2 上预留的子网的 ID,作为 前提条件资源 的一部分。

为网络 2 添加转发规则

接下来,创建将 IP 地址连接到 Memorystore 实例的服务连接的转发规则。

为 IP 1 添加转发规则 1

gcloud

如需为 IP 1 添加转发规则,请运行 gcloud compute forwarding-rules create 命令:

gcloud compute forwarding-rules create FORWARDING_RULE_1_NAME \
--address=IP_ADDRESS_1_ID \
--network=projects/PROJECT_2_ID/global/networks/NETWORK_2_ID \
--region=REGION_ID \
--target-service-attachment=SERVICE_ATTACHMENT_1 \
--project=PROJECT_2_ID \
--allow-psc-global-access

替换以下内容:

  • FORWARDING_RULE_1_NAME 是您为要创建的转发规则指定的名称。
  • IP_ADDRESS_1_ID 是您在 预留 IP 地址 部分中预留的 IP 地址的 ID。
  • NETWORK_2_ID 是第二个网络的 ID。
  • REGION_ID 是 Memorystore 实例所在的区域。
  • SERVICE_ATTACHMENT_1 是您在记下服务连接路径中记下的第一个服务连接。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个 VPC 网络和子网的项目。

例如:

gcloud compute forwarding-rules create my-forwarding-rule-1 \
--address=my-ip-address-1 \
--network=projects/my-project-2/global/networks/my-network-2 \
--region=us-central1 \
--target-service-attachment=projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-a0583920-edef-42-psc-sa \
--project=my-project-2 \
--allow-psc-global-access
为 IP 2 添加转发规则 2

gcloud

如需为 IP 2 添加转发规则,请运行 gcloud compute forwarding-rules create 命令:

gcloud compute forwarding-rules create FORWARDING_RULE_2_NAME \
--address=IP_ADDRESS_2_ID \
--network=projects/PROJECT_2_ID/global/networks/NETWORK_2_ID \
--region=REGION_ID \
--target-service-attachment=SERVICE_ATTACHMENT_2 \
--project=PROJECT_2_ID \
--allow-psc-global-access

替换以下内容:

  • FORWARDING_RULE_2_NAME 是您为要创建的转发规则指定的名称。
  • IP_ADDRESS_2_ID 是您在 预留 IP 地址 部分中预留的 IP 地址的 ID。
  • NETWORK_2_ID 是第二个网络的 ID。
  • REGION_ID 是 Memorystore 实例所在的区域。
  • SERVICE_ATTACHMENT_2 是您在 记下服务连接路径中记下的第二个服务连接。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个 VPC 网络和子网的项目。

例如:

gcloud compute forwarding-rules create my-forwarding-rule-2 \
--address=my-ip-address-2 \
--network=projects/my-project-2/global/networks/my-network-2 \
--region=us-central1 \
--target-service-attachment=projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-a0583920-edef-42-psc-sa-2 \
--project=my-project-2 \
--allow-psc-global-access

为网络 2 向 Memorystore 实例注册 Private Service Connect 连接

本部分介绍了向 Memorystore 实例注册连接的步骤。首先,您需要获取转发规则的连接 ID 和项目 ID。

然后,您将通过向 Memorystore 实例注册 Private Service Connect 连接信息来启用连接。

获取网络 2 的转发规则连接 ID 和项目 ID

接下来,获取每个转发规则的 pscConnectionId 值。记下这些值。

获取 Private Service Connect 连接 ID 1

gcloud

如需查看 pscConnectionId 值和其他转发规则摘要信息,请运行 gcloud compute forwarding-rules describe 命令:

gcloud compute forwarding-rules describe FORWARDING_RULE_1_NAME \
--project=PROJECT_2_ID \
--region=REGION_ID

替换以下内容:

  • FORWARDING_RULE_1_NAME 是第一个转发规则的名称。
  • PROJECT_2_ID 是包含转发规则的 Google Cloud 项目的 ID。

以下示例展示了此命令的示例输出:

gcloud compute forwarding-rules describe my-forwarding-rule-1 \
--project=my-project-2 \
--region=us-central1

...

pscConnectionId: '94710983646969729'
获取 Private Service Connect 连接 ID 2

gcloud

如需查看 pscConnectionId 值和其他转发规则摘要信息,请运行 gcloud compute forwarding-rules describe 命令:

gcloud compute forwarding-rules describe FORWARDING_RULE_2_NAME \
--project=PROJECT_2_ID \
--region=REGION_ID

替换以下内容:

  • FORWARDING_RULE_2_NAME 是第二个转发规则的名称。
  • PROJECT_2_ID 是包含转发规则的 Google Cloud 项目的 ID。

注册 VPC 网络 2 的 Private Service Connect 连接信息

gcloud

如需注册每个连接,您需要提供 Private Service Connect 连接 ID、IP 地址、网络路径、转发规则路径/URI 以及目标服务连接。为此,请运行 gcloud redis clusters add-cluster-endpoints 命令:

gcloud redis clusters add-cluster-endpoints INSTANCE_ID \
--region=REGION_ID \
--project=PROJECT_1_ID \
--cluster-endpoint='["psc-connection":[{"psc-connection-id":"PSC_CONNECTION_1_ID","address":"IP_ADDRESS_1","network":"projects/PROJECT_2_ID/global/networks/NETWORK_2_ID","forwarding-rule":"projects/PROJECT_2_ID/regions/REGION_ID/forwardingRules/FORWARDING_RULE_1_NAME","service-attachment":"SERVICE_ATTACHMENT_1"},{"psc-connection-id":"PSC_CONNECTION_2_ID","address":"IP_ADDRESS_2","network":"projects/PROJECT_2_ID/global/networks/NETWORK_2_ID","forwarding-rule":"projects/PROJECT_2_ID/regions/REGION_ID/forwardingRules/FORWARDING_RULE_2_NAME","service-attachment":"SERVICE_ATTACHMENT_2"}]]'

替换以下内容:

  • INSTANCE_ID 是 Memorystore for Redis Cluster 实例的 ID。
  • REGION_ID 是 Memorystore 实例所在区域的 ID。
  • PROJECT_1_ID 是 Memorystore 实例所在的项目 1 的 ID。如果您的 Private Service Connect 连接与您的实例位于不同的项目中,请使用包含该连接的项目作为此参数的值。
  • PROJECT_2_ID 是项目 2 的 ID。
  • PSC_CONNECTION_1_ID 是您在 获取网络 2 的转发规则连接 ID 时记下的 Private Service Connect 连接 ID 1。
  • IP_ADDRESS_1 是您预留的第一个 IP 地址的地址。
  • NETWORK_2_ID 是网络 2 的 ID。
  • FORWARDING_RULE_1_NAME 是您创建的第一个转发规则的名称。
  • SERVICE_ATTACHMENT_1 是与 FORWARDING RULE_1_NAME 连接的第一个服务连接。
  • PSC_CONNECTION_2_ID 是您在获取网络 2 的转发规则连接 ID时记下的 Private Service Connect 连接 ID 2。
  • IP_ADDRESS_2 是您预留的第二个 IP 地址的地址。
  • FORWARDING_RULE_2_NAME 是您创建的第二个转发规则的名称。
  • SERVICE_ATTACHMENT_2 是与 FORWARDING_RULE_2_NAME 连接的第二个服务连接。

例如:

gcloud redis clusters add-cluster-endpoints my-instance \
--region=us-central-1 \
--project=my-project-1 \
--cluster-endpoint='["psc-connection":[{"psc-connection-id":"94710983646969729","address":"10.142.0.10","network":"projects/my-project-2/global/networks/my-network-2","forwarding-rule":"projects/my-project-2/regions/us-central1/forwardingRules/my-forwarding-rule-1","service-attachment":"projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-8d7d48ef-3ca3-4d-psc-sa"},{"psc-connection-id":"86510983646969993","address":"10.142.0.12","network":"projects/my-project-2/global/networks/my-network-2","forwarding-rule":"projects/my-project-2/regions/us-central1/forwardingRules/my-forwarding-rule-2","service-attachment":"projects/1048073346231/regions/us-central1/serviceAttachments/gcp-memorystore-auto-8d7d48ef-3ca3-4d-psc-sa-2"}]]'

第 3 步:设置客户端连接

本部分介绍了如何为本指南中的网络配置客户端以实现连接。

记下 Private Service Connect 连接端点信息

记下与具有 CONNECTION_TYPE_DISCOVERY 类型的 Private Service Connect 连接对应的 IP 地址。对于此连接,Memorystore for Redis Cluster 会添加 port 字段。

gcloud

如需查看网络的 Private Service Connect 连接端点信息,请运行 gcloud redis clusters describe 命令:

gcloud redis clusters describe INSTANCE_ID \
--region=REGION_ID \
--project=PROJECT_1_ID

记下 IP 地址:


clusterEndpoints:
- connections:
  - pscAutoConnection:
      address: 10.x.x.x
      connectionType: CONNECTION_TYPE_DISCOVERY
      forwardingRule: https://www.googleapis.com/compute/v1/projects/my-project-1/regions/us-central1/forwardingRules/sca-auto-fr-3fbb11e4-0290-49fe-9771-0c6e062c5a95
      network: projects/my-project-1/global/networks/default
      projectId: my-project-1
      pscConnectionId: '36424170409558068'
      pscConnectionStatus: PSC_CONNECTION_STATUS_ACTIVE
      serviceAttachment: projects/767993847198/regions/us-central1/serviceAttachments/gcp-memorystore-auto-1f1e6af6-3519-4b-psc-sa
  - pscAutoConnection:
      address: 10.x.x.x
      forwardingRule: https://www.googleapis.com/compute/v1/projects/my-project-1/regions/us-central1/forwardingRules/sca-auto-fr-a3c9c26d-347b-454c-8496-e837993fda6a
      network: projects/my-project-1/global/networks/default
      projectId: my-project-1
      pscConnectionId: '36424170409558019'
      pscConnectionStatus: PSC_CONNECTION_STATUS_ACTIVE
      serviceAttachment: projects/767993847198/regions/us-central1/serviceAttachments/gcp-memorystore-auto-1f1e6af6-3519-4b-psc-sa-2
  - pscConnection:
      address: 10.x.x.x
      connectionType: CONNECTION_TYPE_DISCOVERY
      forwardingRule: projects/my-project-1/regions/us-central1/forwardingRules/fw3us211
      network: projects/my-project-1/global/networks/default
      projectId: my-project-1
      pscConnectionId: '44476954916683780'
      pscConnectionStatus: PSC_CONNECTION_STATUS_ACTIVE
      serviceAttachment: projects/767993847198/regions/us-central1/serviceAttachments/gcp-memorystore-auto-1f1e6af6-3519-4b-psc-sa
  - pscConnection:
      address: 10.x.x.x
      forwardingRule: projects/my-project-1/regions/us-central1/forwardingRules/fw4us211
      network: projects/my-project-1/global/networks/default
      projectId: my-project-1
      pscConnectionId: '44476954916683781'
      pscConnectionStatus: PSC_CONNECTION_STATUS_ACTIVE
      serviceAttachment: projects/767993847198/regions/us-central1/serviceAttachments/gcp-memorystore-auto-1f1e6af6-3519-4b-psc-sa-2

如需在端点列表中获取发现 IP 地址,请查找 CONNECTION_TYPE_DISCOVERY 连接类型。在上述输出中,发现 Private Service Connect 连接的 IP 地址的值是与此连接类型关联的值。

如需获取用户注册的连接的发现连接 IP 地址,请查看输出的 pscConnection 部分。如需获取自动注册的连接的发现连接 IP 地址,请查看输出的 pscAutoConnection 部分。

配置客户端

接下来,按如下方式配置客户端:

  • 使用网络 1 的发现 IP 地址配置网络 1 中的客户端连接。在本教程中,这是您记下的 IP 地址,该地址列在相应网络 1 的 endpoints: 部分的连接条目中,并且与 CONNECTION_TYPE_DISCOVERY 值对应。

  • 使用网络 2 的发现 IP 地址配置网络 2 中的客户端连接。在本教程中,这是您记下的 IP 地址,该地址列在相应网络 2 的 endpoints: 部分的连接条目中,并且与 CONNECTION_TYPE_DISCOVERY 值对应。

如需详细了解如何在 Memorystore for Redis Cluster 中连接到集群, 请参阅使用 redis-cli 从 Compute Engine 虚拟机进行连接

删除 Private Service Connect 连接

(可选)在删除实例之前,您可以删除与该实例关联的所有用户注册的 Private Service Connect 连接。 为此,您必须删除在本教程中设置的转发规则并取消注册端点。

此外,您还可以删除预留的 IP 地址,以便在将来使用它们。

删除转发规则

本部分介绍了如何删除您之前在本教程中创建的转发规则。

删除转发规则 1

gcloud

如需删除转发规则,请运行 gcloud compute forwarding-rules delete 命令:

gcloud compute forwarding-rules delete FORWARDING_RULE_1_NAME \
--region=REGION_ID \
--project=PROJECT_2_ID

替换以下内容:

  • FORWARDING_RULE_1_NAME 是第一个转发规则的名称。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个 VPC 网络和子网的项目。

删除转发规则 2

gcloud

如需删除转发规则,请运行 gcloud compute forwarding-rules delete 命令:

gcloud compute forwarding-rules delete FORWARDING_RULE_2_NAME \
--region=REGION_ID \
--project=PROJECT_2_ID

替换以下内容:

  • FORWARDING_RULE_2_NAME 是第二个转发规则的名称。
  • PROJECT_2_ID 是项目 2 的 ID。这是您创建第二个 VPC 网络和子网的项目。

取消注册 VPC 网络 2 的 Private Service Connect 端点

本部分介绍了如何取消注册您之前在本教程中注册的 Private Service Connect 端点

取消注册 VPC 网络 2 的端点

gcloud

如需向 Memorystore 实例取消注册端点信息,请运行 gcloud redis clusters remove-cluster-endpoints 命令:

gcloud redis clusters remove-cluster-endpoints INSTANCE_ID \
--region=REGION_ID \
--project=PROJECT_1_ID \
--cluster-endpoint='["psc-connection":[{"psc-connection-id":"PSC_CONNECTION_1_ID"},{"psc-connection-id":"PSC_CONNECTION_2_ID"}]]'

替换以下内容:

  • INSTANCE_ID 是您要取消注册端点的实例的 ID。
  • PROJECT_1_ID 是 Memorystore 实例所在的项目 1 的 ID。
  • REGION_ID 是 Memorystore 实例所在区域的 ID。
  • PSC_CONNECTION_1_ID 是您在 获取转发规则连接 ID 时记下的第一个 Private Service Connect 连接 ID。
  • PSC_CONNECTION_2_ID 是您在 获取转发规则连接 ID 时记下的第二个 Private Service Connect 连接 ID。

删除 Memorystore for Redis Cluster 实例

(可选)您可以选择删除 Memorystore 实例。不过,在删除 Memorystore 实例之前,您必须先取消注册 Private Service Connect 端点

gcloud

如需删除 Memorystore for Redis Cluster 实例,请运行 gcloud redis clusters delete 命令:

gcloud redis clusters delete INSTANCE_ID \
--region=REGION_ID \
--project=PROJECT_1_ID

替换以下内容:

  • INSTANCE_ID 是实例的 ID。
  • REGION_ID 是 Memorystore 实例所在区域的 ID。
  • PROJECT_1_ID 是项目 1 的 ID。这是 Memorystore 实例所在的项目。