从其他 VPC 网络访问服务

本教程介绍如何以 服务使用方 身份创建 Private Service Connect 端点 来访问已发布的服务。当您向端点发送请求时,Private Service Connect 会将这些请求转发给已发布的服务。

本教程面向云架构师、网络架构师、网络管理员和 IT 管理员。

目标

  • 为服务使用方资源配置网络
  • 创建端点
  • 测试访问端点

费用

在本文档中,您将使用的以下收费组件: Google Cloud

您可使用 价格计算器 根据您的预计使用情况来估算费用。

新 Google Cloud 用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 完成本系列中的前两个教程:
  2. 创建或选择一个项目以用于服务使用方资源。 此项目称为 CONSUMER_PROJECT
    1. 在 Google Cloud 控制台中,前往项目选择器页面。

      转到“项目选择器”

    2. 选择或创建 Google Cloud 项目。

      选择或创建项目所需角色

      • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
      • 创建项目:如需创建项目,您需要 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予 角色
  3. 启用 Compute Engine API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您 创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色

    启用 API

  4. 确保您在项目中拥有以下一个或多个角色: Compute Engine > Compute Network Admin、Compute Engine > Compute Instance Admin

    检查角色

    1. 在 Google Cloud 控制台中,前往 IAM 页面。

      转到 IAM
    2. 选择项目。
    3. 主账号 列中,找到标识您或您所属群组的所有行。如需了解您属于哪些群组,请与您的 管理员联系。

    4. 对于指定或包含您的所有行,请检查角色 列,以查看角色列表是否包含所需角色。

    授予角色

    1. 在 Google Cloud 控制台中,前往 IAM 页面。

      转到 IAM
    2. 选择项目。
    3. 点击 授予访问权限
    4. 新的主账号 字段中,输入您的用户标识符。 这通常是 Google 账号的电子邮件地址。

    5. 点击选择角色,然后搜索相应角色。
    6. 如需授予其他角色,请点击 添加其他角色 ,然后添加其他各个角色。
    7. 点击 Save (保存)。

配置网络

以下部分介绍了如何创建网络和子网来托管端点,以及如何创建防火墙规则以允许通过 SSH 访问用于测试端点的客户端虚拟机。

创建网络和子网

如需创建服务使用方网络和子网,请按照以下步骤操作。

控制台

  1. 在 Google Cloud 控制台中,前往 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击创建 VPC 网络

  3. 对于名称,输入 consumer-network

  4. 对于子网创建模式 ,选择自定义

  5. 新建子网 部分,输入以下信息。

    1. 对于名称,输入consumer-subnet
    2. 对于区域,选择与您 创建的已发布服务相同的区域。
    3. 对于 IP 栈类型 ,选择 IPv4(单栈)
    4. 对于 IPv4 范围,输入 192.168.10.0/24
    5. 点击完成
  6. 点击创建

gcloud

  1. 创建一个自定义模式 VPC 网络:

    gcloud compute networks create consumer-network --subnet-mode=custom
    
  2. consumer-network 网络中,创建一个子网。

    gcloud compute networks subnets create consumer-subnet \
        --network=consumer-network \
        --range=192.168.10.0/24 \
        --region=REGION
    

    REGION 替换为您创建的已发布服务所在的区域。

配置防火墙规则

创建一个名为 fw-allow-ssh 的防火墙规则,以允许来自 0.0.0.0/0 的 SSH 流量到达具有 allow-ssh 网络标记的虚拟机。

控制台

  1. 在 Google Cloud 控制台中,前往 防火墙政策 页面。

    进入防火墙政策页面

  2. 如需允许传入 SSH 连接,请点击创建防火墙规则 ,然后使用以下设置:

    • 对于名称 ,输入 fw-allow-ssh
    • 对于网络,选择consumer-network
    • 优先级 字段中,输入 1000
    • 对于流量方向,选择入站
    • 对于对匹配项执行的操作 ,选择允许
    • 对于目标 ,选择 Specified target tags
    • 对于目标标记,输入allow-ssh
    • 对于来源过滤条件,选择IPv4 范围
    • 对于来源 IPv4 范围,输入0.0.0.0/0
    • 对于协议和端口,选择 Specified protocols and ports, 然后选中 TCP 复选框。对于端口,输入22
  3. 点击创建

gcloud

  1. 创建 fw-allow-ssh 防火墙规则,以允许通过 SSH 连接到 网络标记为 allow-ssh 的虚拟机。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=consumer-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=0.0.0.0/0 \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

创建端点

创建一个指向您创建的已发布服务的端点。

控制台

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

    转到 Private Service Connect

  2. 点击已连接的端点标签页。

  3. 点击连接端点

  4. 对于目标 ,选择已发布的服务

  5. 对于目标服务,输入 projects/PRODUCER_PROJECT/regions/REGION/serviceAttachments/published-service

    PRODUCER_PROJECT 替换为已发布服务的项目 ID。将 REGION 替换为已发布服务的区域。

  6. 对于端点名称,输入ep-1

  7. 对于网络,选择consumer-network

  8. 对于子网,选择consumer-subnet

  9. 点击 IP 地址 下拉菜单,然后选择创建 IP 地址

    1. 对于名称,输入ep-ip-1
    2. 对于静态 IP 地址,选择让我选择
    3. 对于自定义 IP 地址,输入192.168.10.5
    4. 点击预留
  10. 点击添加端点

gcloud

  1. 预留要分配给该端点的内部 IP 地址。

    gcloud compute addresses create ep-ip-1 \
        --region=REGION \
        --subnet=consumer-subnet \
        --addresses=192.168.10.5
    

    REGION 替换为您创建的已发布服务所在的区域。

  2. 创建转发规则,以将该端点连接到服务提供方的服务连接。

    gcloud compute forwarding-rules create ep-1 \
        --region=REGION \
        --network=consumer-network \
        --address=ep-ip-1 \
        --target-service-attachment=projects/PRODUCER_PROJECT/regions/REGION/serviceAttachments/published-service
    

    替换以下内容:

    • PRODUCER_PROJECT:服务提供方项目的项目 ID。

    • REGION:服务连接的区域。

测试访问端点

如需测试端点和已发布的服务是否正常运行,请创建一个测试虚拟机,并从该虚拟机向端点发送请求。

创建客户端虚拟机以进行测试

在与端点相同的区域中创建客户端虚拟机。

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 点击创建实例

  3. 对于名称,输入consumer-test

  4. 对于区域,选择与后端虚拟机相同的区域。

  5. 地区 部分,选择该区域内的一个地区。

  6. 点击网络 并配置以下字段:

    1. 对于网络标记,请输入 allow-ssh
    2. 对于网络接口,请选择以下内容:
      • 对于网络,选择consumer-network
      • 对于子网,选择consumer-subnet
  7. 点击创建

gcloud

gcloud compute instances create consumer-test \
    --zone=ZONE \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=consumer-subnet

ZONE 替换为与后端虚拟机位于同一区域的地区。

测试连接性

此测试会从客户端虚拟机联系端点。预期行为是流量分布在负载均衡器的后端虚拟机中。

  1. 连接到客户端虚拟机实例。
    gcloud compute ssh consumer-test --zone=ZONE
    
    ZONE 替换为客户端虚拟机的地区。
  2. 使用 curl 连接端点的 IP 地址,通过这种方式向端点发送 Web 请求。重复该请求,您可以看到响应来自不同的后端虚拟机。根据每个后端虚拟机上 /var/www/html/index.html 的内容,生成响应的虚拟机的名称会显示在 HTML 响应的文本中。例如,预期 响应类似于 Page served from: vm-1Page served from: vm-2
    curl -s http://192.168.10.5
    

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

同时删除提供方项目 (PRODUCER_PROJECT) 和使用方项目 (CONSUMER_PROJECT)。

    删除项目: Google Cloud

    gcloud projects delete PROJECT_ID

后续步骤