使用 App Hub 全球应用监控基础架构资源


借助 App Hub,您可以通过 App Hub 应用管理和查看 Google Cloud 项目的基础架构资源。如需创建这些 App Hub 应用,您需要一个 App Hub 托管项目,您可以将包含 Google Cloud 资源的服务项目附加到该项目。

本教程介绍了如何为多个项目设置一个全球 App Hub 应用,然后查看该应用的资源。您可以使用多个服务项目在共享 VPC 环境中设置内部应用负载平衡器。然后,在 App Hub 宿主项目的全球应用中,您可以将服务项目中的所有基础架构资源注册并监控为 App Hub 服务和工作负载。

本教程适用于设置和管理应用中心的人员。您应具备一定的 Cloud Load Balancing 使用经验。

目标

  • 设置一个包含跨多个项目的资源的全球 App Hub 应用。
  • 通过应用的系统指标监控资源。

费用

如需估算负载均衡的代管式虚拟机解决方案使用的 Google Cloud 资源的费用,请参阅 Google Cloud 价格计算器中预先计算的估算值。

使用估算值作为起点来计算部署费用。您可以修改估算值,以反映您计划对解决方案中使用的资源进行的任何配置更改。

系统会基于某些因素(包括以下因素)做出预先计算的估算:

  • 部署资源的 Google Cloud 位置。
  • 资源的使用时间。

如需详细了解 App Hub 费用,请参阅价格页面。

准备工作

在设置本教程之前,请确定项目的角色和权限,然后创建四个 Google Cloud 项目。其中一个项目是 App Hub 宿主项目,另外三个项目是 App Hub 服务项目。

所需的角色和权限

如果您是项目创建者,则会被授予基本 Owner 角色 (roles/owner)。默认情况下,此 Identity and Access Management (IAM) 角色包含对大多数 Google Cloud资源的完整访问权限。

如果您不是项目创建者,则必须向主账号授予项目的必需权限。例如,主账号可以是 Google 账号(针对最终用户)或服务账号(针对应用和工作负载)。

如需获得管理项目、文件夹或组织访问权限所需的权限,请让管理员向您授予您要管理其访问权限的资源(项目、文件夹或组织)的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建 App Hub 宿主项目和服务项目

控制台

  1. 在 Google Cloud 控制台中,前往“项目选择器”页面。

    转到“项目选择器”

  2. 选择或创建一个 Google Cloud 项目,将其用作 App Hub 托管项目。

  3. Enable the App Hub, Compute Engine, Service Management, and Service Usage APIs.

    Enable the APIs

  4. 在与 App Hub 托管项目相同的文件夹中,创建三个新的 Google Cloud 项目。这些是 App Hub 宿主项目的 App Hub 服务项目。

  5. 确保您的所有 Google Cloud 项目均已启用结算功能

  6. Enable the App Hub, Compute Engine, Service Management, and Service Usage APIs.

    Enable the APIs

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 确保安装了最新版本的 Google Cloud CLI。从 Cloud Shell 运行以下命令:

      gcloud components update

  3. 创建或选择一个新项目 HOST_PROJECT_ID,将其用作 App Hub 的宿主项目。

    • 创建一个 Google Cloud 项目:

      gcloud projects create HOST_PROJECT_ID
    • 选择您创建的 Google Cloud 项目:

      gcloud config set project HOST_PROJECT_ID
  4. 确保已为您的所有 Google Cloud 项目启用结算功能

  5. 启用 App Hub、Compute Engine、Service Management 和 Service Usage API:

    gcloud services enable apphub.googleapis.com \
       compute.googleapis.com \
       servicemanagement.googleapis.com \
       serviceusage.googleapis.com
  6. 创建三个新的 Google Cloud 项目,以用作 App Hub 宿主项目的 App Hub 服务项目。

    1. 创建服务项目:

      gcloud projects create SERVICE_PROJECT_1_ID

      SERVICE_PROJECT_1_ID 替换为服务项目 1 的 ID。

    2. 选择您创建的服务项目:

      gcloud config set project SERVICE_PROJECT_1_ID
    3. 启用 Compute Engine、Service Management 和 Service Usage API:

      gcloud services enable compute.googleapis.com \
        servicemanagement.googleapis.com \
        serviceusage.googleapis.com
    4. 设置本教程中使用的配置变量:

      export SERVICE_PROJECT_1_NUMBER= $(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')
    5. 重复上述步骤,创建 SERVICE_PROJECT_2_IDSERVICE_PROJECT_3_ID、启用 API 并设置配置变量。

准备环境

如果您已在多个项目中在共享 VPC 环境中设置了内部应用负载平衡器,请继续阅读本文档中的授予 IAM 权限部分。

如果没有,如需在共享 VPC 环境中设置内部应用负载平衡器,请按以下步骤操作:

使用负载均衡器和代管式实例组的 App Hub 工作负载和服务。
图 1. 在共享 VPC 中使用负载均衡器和托管实例组的 App Hub 工作负载和服务。
  1. 在服务项目 1 中,配置一个共享 VPC 网络和两个子网。
  2. 在服务项目 2 中,使用两个托管式实例组作为后端创建负载均衡器的后端服务。
  3. 在服务项目 3 中,创建另一个负载均衡器的后端服务,并将两个代管式实例组用作后端。
  4. 在服务项目 1 中,创建负载均衡器的前端组件和网址映射。

以下是负载均衡代管式虚拟机解决方案所部署的拓扑的请求处理流程。

  1. 从共享 VPC 网络中,客户端虚拟机向服务项目 1 中的内部应用负载平衡器发出 HTTP 请求。

  2. 负载均衡器使用网址映射和后端服务中的信息将请求路由到其代管式实例组后端。

在共享 VPC 宿主项目中配置网络和子网

您需要一个包含两个子网的共享 VPC 网络:一个用于负载均衡器的前端和后端,另一个用于负载均衡器的代理。

本示例使用以下网络、区域和子网:

  • 网络。网络名为 lb-network

  • 用于负载均衡器的前端和后端的子网。us-west1 区域中名为 lb-frontend-and-backend-subnet 的子网使用 10.1.2.0/24 作为其主要 IP 地址范围。

  • 代理子网us-west1 区域中名为 proxy-only-subnet 的子网使用 10.129.0.0/23 作为其主要 IP 地址范围。

在本教程中,将服务项目 1 指定为共享 VPC 宿主项目。本部分中的所有步骤都必须在服务项目 1 中执行。

为负载均衡器的前端和后端配置子网

您无需在每次创建新负载均衡器时都执行此步骤。您只需确保服务项目可以访问共享 VPC 网络中的子网(以及代理专用子网)。

控制台

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

    转到 VPC 网络页面

  2. 点击创建 VPC 网络
  3. 名称字段中,输入 lb-network
  4. 子网创建模式设置为自定义
  5. 新子网部分中,输入以下信息:

    • 名称lb-frontend-and-backend-subnet

    • 区域us-west1

    • IP 地址范围10.1.2.0/24

  6. 点击完成

  7. 点击创建

gcloud

  1. 将该项目设置为服务项目 1:

      gcloud config set project SERVICE_PROJECT_1_ID

  2. 使用 gcloud compute networks create 命令创建 VPC 网络:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  3. us-west1 区域的 lb-network 网络中创建子网:

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

配置代理专用子网

代理专用子网用于 lb-network VPC 网络中 us-west1 区域内所有基于 Envoy 的区域负载均衡器。在每个网络中,每个区域只能有一个代理专用子网处于活跃状态。

如果此网络中的 us-west1 区域已预留代理专用子网,请勿执行此步骤。

控制台

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

    转到 VPC 网络页面

  2. 点击共享 VPC 网络的名称:lb-network
  3. 点击子网标签页,然后点击添加子网
  4. 添加子网窗格中的名称字段中,输入 proxy-only-subnet
  5. 区域列表中,选择 us-west1
  6. 用途设置为区域级代管式代理
  7. IP 地址范围字段中,输入 10.129.0.0/23
  8. 点击添加

gcloud

使用 gcloud compute networks subnets create 命令创建代理专用子网:

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=lb-network \
    --range=10.129.0.0/23

向服务项目管理员授予对后端子网的访问权限

服务项目管理员需要访问 lb-frontend-and-backend-subnet 子网,以便他们可以预配负载平衡器的后端。

共享 VPC 管理员必须向服务项目管理员(或者部署使用该子网的资源和后端的开发者)授予后端子网的访问权限。如需查看相关说明,请参阅有权访问部分子网的服务项目管理员

在服务项目 1 中配置防火墙规则

此示例使用以下防火墙规则:

  • fw-allow-health-check。适用于负载均衡实例的入站流量规则,该规则允许来自 Google Cloud健康检查系统(130.211.0.0/2235.191.0.0/16)的所有 TCP 流量。此示例使用目标标记 load-balanced-backend 来标识它应该应用到的实例。

  • fw-allow-proxies。适用于负载均衡实例的入站流量规则,该规则允许从负载均衡器的代管式代理发送到端口 804438080 的 TCP 流量。此示例使用目标标记 load-balanced-backend 来标识它应该应用到的实例。

  • fw-allow-ssh。适用于负载均衡实例的入站流量规则,该规则允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的来源 IP 范围。例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 范围。此示例使用目标标记 allow-ssh 来标识该防火墙规则应该应用于的虚拟机 (VM)。

如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。

控制台

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

    前往“防火墙政策”

  2. 点击创建防火墙规则,以创建允许 Google Cloud 健康检查的规则:
    • 名称fw-allow-health-check
    • 网络lb-network
    • 流量方向:入站
    • 匹配时执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记load-balanced-backend
    • 来源过滤条件:IPv4 范围
    • 来源 IPv4 范围130.211.0.0/2235.191.0.0/16
    • 协议和端口
      • 选择指定的协议和端口
      • 选中 TCP 复选框,然后输入 80 作为端口号。
      • 最佳实践是将此规则限制为仅使用与健康检查所使用的协议和端口匹配的协议和端口。如果您使用 tcp:80 协议和端口,则 Google Cloud 可以使用 HTTP 通过端口 80 访问您的虚拟机,但无法使用 HTTPS 通过端口 443 访问这些虚拟机。

  3. 点击创建
  4. 点击创建防火墙规则,以创建允许 Google Cloud 健康检查的规则:
    • 名称fw-allow-proxies
    • 网络lb-network
    • 流量方向:入站
    • 匹配时执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记load-balanced-backend
    • 来源过滤条件:IPv4 范围
    • 来源 IPv4 范围10.129.0.0/23
    • 协议和端口
      • 选择指定的协议和端口
      • 选中 TCP 复选框,然后输入 80, 443, 8080 作为端口号。
  5. 点击创建
  6. 点击创建防火墙规则,以创建允许 Google Cloud 健康检查的规则:
    • 名称fw-allow-ssh
    • 网络lb-network
    • 流量方向:入站
    • 匹配时执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记allow-ssh
    • 来源过滤条件:IPv4 范围
    • 来源 IPv4 范围0.0.0.0/0
    • 协议和端口
      • 选择指定的协议和端口
      • 选中 TCP 复选框,然后输入 22 作为端口号。
  7. 点击创建

gcloud

  1. 创建 fw-allow-health-check 防火墙规则以允许Google Cloud 健康检查。本示例允许来自健康检查探测工具的所有 TCP 流量。但是,您可以根据自己的需求配置一组较小范围的端口。

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    
  2. 创建 fw-allow-proxies 防火墙规则以允许来自 Envoy 代理专用子网的流量到达您的后端:

    gcloud compute firewall-rules create fw-allow-proxies \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=10.129.0.0/23 \
       --target-tags=load-balanced-backend \
       --rules=tcp:80,tcp:443,tcp:8080
    
  3. 创建 fw-allow-ssh 防火墙规则,允许通过 SSH 连接到网络标记为 allow-ssh 的虚拟机:

    gcloud compute firewall-rules create fw-allow-ssh \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --target-tags=allow-ssh \
       --rules=tcp:22
    

预留静态内部 IPv4 地址

服务项目管理员可以在共享 VPC 网络的子网中预留内部 IPv4 或 IPv6 地址。IP 地址配置对象是在服务项目中创建的,而其值在所选共享子网中的可用 IPv4 地址范围内。

如需在服务项目中预留独立内部 IP 地址,请完成以下步骤。

控制台

  1. 设置共享 VPC
  2. 在 Google Cloud 控制台中,前往共享 VPC 页面。

    转到共享 VPC

  3. 以 Shared VPC Admin 的身份登录。

  4. 从项目选择器中选择服务项目。

  5. 依次选择 VPC 网络 >IP 地址

  6. IP 地址页面中,点击预留内部静态 IP 地址

  7. 名称字段中,输入 l7-ilb-ip-address 作为 IP 地址名称。

  8. IP 版本列表中,选择 IPv4

  9. 网络中,选择 lb-network

  10. 子网列表中,选择 lb-frontend-and-backend-subnet

  11. 点击预留

gcloud

  1. 以 Shared VPC 服务项目管理员的身份向 Google Cloud CLI 进行身份验证(如果尚未验证)。

    gcloud auth login SERVICE_PROJECT_ADMIN
    

    SERVICE_PROJECT_ADMIN 替换为 Shared VPC Service Project Admin 的名称。这些值的格式必须为 username@yourdomain,例如 222larabrown@gmail.com。

  2. 使用 compute addresses create 命令预留 IP 地址:

    
    gcloud compute addresses create l7-ilb-ip-address \
        --project SERVICE_PROJECT_1_ID \
        --subnet=lb-frontend-and-backend-subnet \
        --region=us-west1 \
        --ip-version=IPV4
    

有关创建 IP 地址的其他详情,可参阅 SDK 文档

在服务项目 1 中设置共享 VPC

如需在服务项目 1 中设置共享 VPC,您需要将服务项目 1 指定为共享 VPC 宿主项目,并将服务项目 2 和 3 指定为共享 VPC 服务项目。在本教程的后面部分,当您在服务项目 2 和 3 中创建 MIG 后端时,将能够使用之前在服务项目 1 中创建的相同 VPC 网络和子网。

  1. 启用宿主项目
  2. 关联服务项目
  3. 向服务项目 2 和 3 授予 Compute Network User 角色 (roles/compute.networkUser):

    控制台

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

      转到 IAM

    2. 点击 授予访问权限。 此时会打开授予访问权限窗格。

    3. 新的主账号字段中,输入 SERVICE_PROJECT_2_NUMBER@cloudservices.gserviceaccount.com

      请注意,您可以从项目的信息中心获取服务项目编号:

      前往信息中心

    4. 点击选择角色,然后在过滤条件字段中输入 Compute Network User

    5. 选择 Compute Network User 角色,然后点击保存

    6. 重复上述步骤,将 Compute Network User 角色授予服务项目 3 (SERVICE_PROJECT_3_NUMBER@cloudservices.gserviceaccount.com)。

    gcloud

    1. 在服务项目 1 中,向服务项目 2 授予 Compute Network User 角色。

      gcloud projects add-iam-policy-binding SERVICE_PROJECT_1_ID \
       --member='serviceAccount:SERVICE_PROJECT_2_NUMBER@cloudservices.gserviceaccount.com' \
       --role='roles/compute.networkUser'
      

      SERVICE_PROJECT_2_NUMBER 替换为服务项目 2 的项目编号。

    2. 在服务项目 1 中,向服务项目 3 授予 Compute Network User 角色。

      gcloud projects add-iam-policy-binding SERVICE_PROJECT_1_ID \
       --member='serviceAccount::SERVICE_PROJECT_3_NUMBER@cloudservices.gserviceaccount.com' \
       --role='roles/compute.networkUser'
      

      SERVICE_PROJECT_3_NUMBER 替换为服务项目 3 的项目编号。

在服务项目 2 中创建后端服务和 MIG

本部分中的所有步骤都必须在服务项目 2 中执行。

控制台

  1. 创建实例模板。在 Google Cloud 控制台中,前往实例模板页面。

    转到“实例模板”

    1. 点击创建实例模板
    2. 输入实例模板的名称tutorial-ig-template-sp2
    3. 位置部分,选择区域级(推荐),并将 us-west1(Oregon) 作为区域
    4. 机器配置部分中,选择 N2 作为系列。
    5. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get。如果您需要更改启动磁盘,请点击更改
      1. 操作系统部分,选择 Debian
      2. 版本部分,选择一个可用的 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)
      3. 点击选择
    6. 点击高级选项,然后点击网络
    7. 输入以下网络标记allow-ssh,load-balanced-backend
    8. 网络接口部分,选择与我共享的网络(通过宿主项目:SERVICE_PROJECT_1_ID
    9. lb-network 网络中选择 lb-frontend-and-backend-subnet 子网。
    10. 点击管理。对于管理,将以下脚本插入到启动脚本字段中。
      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | tee /var/www/html/index.html
      systemctl restart apache2
      
    11. 点击创建
  2. 创建托管式实例组。在 Google Cloud 控制台中,前往实例组页面。

    进入“实例组”

    1. 点击创建实例组
    2. 选择新的托管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG
    3. 输入实例组的名称tutorial-sp2-mig-a
    4. 对于实例模板,请选择 tutorial-ig-template-sp2
    5. 对于位置,选择单个可用区
    6. 对于区域,请选择 us-west1
    7. 指定要在组中创建的实例数。

      对于此示例,在自动扩缩部分指定以下选项:

      • 对于自动扩缩模式,请选择 Off:do not autoscale
      • 对于实例数上限,请输入 2
    8. 点击创建

  3. 创建区域后端服务。在执行此步骤的过程中,我们还将创建健康检查,并将后端添加到后端服务。在 Google Cloud 控制台中,前往后端页面。

    前往“后端”

    1. 点击创建后端服务
    2. 创建后端服务对话框中,点击区域级后端服务旁边的创建
    3. 输入后端服务的名称tutorial-backend-service-sp2
    4. 对于区域,选择 us-west1
    5. 对于负载均衡器类型,选择区域内部应用负载均衡器 (INTERNAL_MANAGED)
    6. 后端类型设置为实例组
    7. 后端部分中,设置以下字段:
      1. 实例组设置为 tutorial-sp2-mig-a
      2. 输入端口号80
      3. 平衡模式设置为利用率
      4. 点击完成
    8. 健康检查部分中,点击创建健康检查,然后设置以下字段:
      1. 名称tutorial-regional-health-check
      2. 协议HTTP
      3. 端口80
      4. 点击保存
    9. 点击继续
    10. 点击创建
  4. 重复前面的步骤,创建一个代管式实例组 tutorial-sp2-mig-b,并将其添加到后端服务 tutorial-backend-service-sp2

gcloud

  1. 选择您创建的服务项目:
    gcloud config set project SERVICE_PROJECT_2_ID
  2. 使用 HTTP 服务器创建虚拟机实例模板 tutorial-ig-template-sp2

    gcloud compute instance-templates create tutorial-ig-template-sp2 \
        --region=us-west1 \
        --network=projects/SERVICE_PROJECT_1_ID/global/networks/lb-network \
        --subnet=projects/SERVICE_PROJECT_1_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
        --tags=allow-ssh,load-balanced-backend \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_2_ID
    

    替换以下内容:

    • SERVICE_PROJECT_1_ID:共享 VPC 宿主项目的项目 ID。
    • SERVICE_PROJECT_2_ID:在其中创建了负载均衡器的后端和后端服务的服务项目的项目 ID。
  3. 在该区域中创建一个代管式实例组 tutorial-sp2-mig-a

    gcloud compute instance-groups managed create tutorial-sp2-mig-a \
        --region=us-west1 \
        --size=2 \
        --template=tutorial-ig-template-sp2 \
        --project=SERVICE_PROJECT_2_ID
    
  4. 定义 HTTP 健康检查 tutorial-regional-health-check

    gcloud compute health-checks create http tutorial-regional-health-check \
      --region=us-west1 \
      --use-serving-port \
      --project=SERVICE_PROJECT_2_ID
    
  5. 定义后端服务 tutorial-backend-service-sp2

    gcloud compute backend-services create tutorial-backend-service-sp2 \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=tutorial-regional-health-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_2_ID
    
  6. 使用 gcloud compute backend-services add-backend 命令将后端添加到后端服务:

    gcloud compute backend-services add-backend tutorial-backend-service-sp2 \
      --balancing-mode=UTILIZATION \
      --instance-group=tutorial-sp2-mig-a \
      --instance-group-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_2_ID
    
  7. 在该区域中创建另一个代管式实例组 tutorial-sp2-mig-b

    gcloud compute instance-groups managed create tutorial-sp2-mig-b \
        --region=us-west1 \
        --size=2 \
        --template=tutorial-ig-template-sp2 \
        --project=SERVICE_PROJECT_2_ID
    
  8. 将后端添加到后端服务:

    gcloud compute backend-services add-backend tutorial-backend-service-sp2 \
      --balancing-mode=UTILIZATION \
      --instance-group=tutorial-sp2-mig-b \
      --instance-group-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_2_ID
    

在服务项目 3 中创建后端服务和 MIG

本部分中的所有步骤都必须在服务项目 3 中执行。

控制台

  1. 创建实例模板。在 Google Cloud 控制台中,前往实例模板页面。

    转到“实例模板”

    1. 点击创建实例模板
    2. 输入实例模板的名称tutorial-ig-template-sp3
    3. 位置部分,选择区域级(推荐),并将 us-west1(Oregon) 作为区域
    4. 机器配置部分中,选择 N2 作为系列。
    5. 确保启动磁盘已设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。本文中的说明使用仅 Debian 支持的命令,例如 apt-get。如果您需要更改启动磁盘,请点击更改
      1. 操作系统部分,选择 Debian
      2. 版本部分,选择一个可用的 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)
      3. 点击选择
    6. 点击高级选项,然后点击网络
    7. 输入以下网络标记allow-ssh,load-balanced-backend
    8. 网络接口部分,选择与我共享的网络(通过宿主项目:SERVICE_PROJECT_1_ID
    9. lb-network 网络中选择 lb-frontend-and-backend-subnet 子网。
    10. 点击管理。对于管理,将以下脚本插入到启动脚本字段中。
      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | tee /var/www/html/index.html
      systemctl restart apache2
      
    11. 点击创建
  2. 创建托管式实例组。在 Google Cloud 控制台中,前往实例组页面。

    进入“实例组”

    1. 点击创建实例组
    2. 选择新的托管式实例组(无状态)。如需了解详情,请参阅无状态或有状态 MIG
    3. 输入实例组的名称tutorial-sp3-mig-a
    4. 对于实例模板,请选择 tutorial-ig-template-sp3
    5. 对于位置,选择单个可用区
    6. 对于区域,请选择 us-west1
    7. 指定要在组中创建的实例数。

      对于此示例,在自动扩缩部分指定以下选项:

      • 对于自动扩缩模式,请选择 Off:do not autoscale
      • 对于实例数上限,请输入 2
    8. 点击创建

  3. 创建区域后端服务。在执行此步骤的过程中,我们还将创建健康检查,并将后端添加到后端服务。在 Google Cloud 控制台中,前往后端页面。

    前往“后端”

    1. 点击创建后端服务
    2. 创建后端服务对话框中,点击区域级后端服务旁边的创建
    3. 输入后端服务的名称tutorial-backend-service-sp3
    4. 对于区域,选择 us-west1
    5. 对于负载均衡器类型,选择区域内部应用负载均衡器 (INTERNAL_MANAGED)
    6. 后端类型设置为实例组
    7. 后端部分中,设置以下字段:
      1. 实例组设置为 tutorial-sp3-mig-a
      2. 输入端口号80
      3. 平衡模式设置为利用率
      4. 点击完成
    8. 健康检查部分中,点击创建健康检查,然后设置以下字段:
      1. 名称tutorial-regional-health-check
      2. 协议HTTP
      3. 端口80
      4. 点击保存
    9. 点击继续
    10. 点击创建
  4. 重复前面的步骤,创建一个代管式实例组 tutorial-sp3-mig-b,并将其添加到后端服务 tutorial-backend-service-sp3

gcloud

  1. 选择您创建的服务项目:
    gcloud config set project SERVICE_PROJECT_3_ID
  2. 使用 HTTP 服务器创建虚拟机实例模板 tutorial-ig-template-sp3

    gcloud compute instance-templates create tutorial-ig-template-sp3 \
        --region=us-west1 \
        --network=projects/SERVICE_PROJECT_1_ID/global/networks/lb-network \
        --subnet=projects/SERVICE_PROJECT_1_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
        --tags=allow-ssh,load-balanced-backend \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_3_ID
    

    替换以下内容:

    • SERVICE_PROJECT_1_ID:共享 VPC 宿主项目的项目 ID。
    • SERVICE_PROJECT_3_ID:在其中创建了负载均衡器的后端和后端服务的服务项目的项目 ID。
  3. 在该区域中创建一个代管式实例组 tutorial-sp3-mig-a

    gcloud compute instance-groups managed create tutorial-sp3-mig-a \
        --region=us-west1 \
        --size=2 \
        --template=tutorial-ig-template-sp3 \
        --project=SERVICE_PROJECT_3_ID
    
  4. 定义 HTTP 健康检查 tutorial-regional-health-check

    gcloud compute health-checks create http tutorial-regional-health-check \
      --region=us-west1 \
      --use-serving-port \
      --project=SERVICE_PROJECT_3_ID
    
  5. 定义后端服务 tutorial-backend-service-sp3

    gcloud compute backend-services create tutorial-backend-service-sp3 \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=tutorial-regional-health-check \
      --health-checks-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_3_ID
    
  6. 使用 gcloud compute backend-services add-backend 命令将后端添加到后端服务:

    gcloud compute backend-services add-backend tutorial-backend-service-sp3 \
      --balancing-mode=UTILIZATION \
      --instance-group=tutorial-sp3-mig-a \
      --instance-group-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_3_ID
    
  7. 在该区域中创建另一个代管式实例组 tutorial-sp3-mig-b

    gcloud compute instance-groups managed create tutorial-sp3-mig-b \
        --region=us-west1 \
        --size=2 \
        --template=tutorial-ig-template-sp3 \
        --project=SERVICE_PROJECT_3_ID
    
  8. 将后端添加到后端服务:

    gcloud compute backend-services add-backend tutorial-backend-service-sp3 \
      --balancing-mode=UTILIZATION \
      --instance-group=tutorial-sp3-mig-b \
      --instance-group-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_3_ID
    

在服务项目 1 中创建网址映射和转发规则

本部分中的所有步骤都必须在服务项目 1 中执行。

控制台

开始配置

  1. 在 Google Cloud 控制台中,前往负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步
  4. 公共或内部字段中,选择内部,然后点击下一步
  5. 跨区域或单区域部署字段中,选择最适合区域级工作负载,然后点击下一步
  6. 点击配置

基本配置

  1. 为负载均衡器输入名称,即 tutorial-url-maps
  2. 区域列表中,选择 us-west1
  3. 网络列表中,选择 lb-network(来自项目:SERVICE_PROJECT_1_ID)。

    如果您看到共享 VPC 网络中需要代理专用子网警告,请确认宿主项目管理员是否已在 lb-network 共享 VPC 网络中的 us-west1 区域创建 proxy-only-subnet。即使您无权查看此页面上的代理专用子网,负载平衡器也会成功创建。

  4. 不关闭窗口继续操作。

配置后端

  1. 点击后端配置
  2. 点击跨项目后端服务
  3. Project ID 字段中,输入服务项目 2 的项目 ID
  4. 后端服务名称字段中,输入您要使用的服务项目 2 中的后端服务的名称。在此示例中,该网址为 tutorial-backend-service-sp2
  5. 点击添加后端服务
  6. Project ID 字段中,输入服务项目 3 的项目 ID
  7. 后端服务名称字段中,输入您要使用的服务项目 3 中的后端服务的名称。在此示例中,该网址为 tutorial-backend-service-sp3
  8. 点击添加后端服务

配置路由规则

  1. 点击路由规则
  2. 主机和路径规则部分的主机 2 字段中,输入 *
  3. 路径 2 字段中,输入 /*
  4. 后端 2 下拉列表中,选择 tutorial-backend-service-sp2
  5. 点击添加主机和路径规则
  6. 主机 3 字段中,输入 tutorial-host
  7. Paths 3 字段中,输入 /*
  8. Backend 3 下拉列表中,选择 tutorial-backend-service-sp3

  9. 主机和路径规则左侧看到蓝色对勾标记后,点击更新按钮。

    如需了解流量管理,请参阅设置流量管理

配置前端

为使跨项目服务引用正常工作,前端必须使用用于创建后端服务的共享 VPC 宿主项目中的同一网络 (lb-network)。

  1. 点击前端配置
  2. 输入转发规则的名称l7-ilb-forwarding-rule
  3. 协议设置为 HTTP
  4. 子网设置为 lb-frontend-and-backend-subnet。 请勿为前端选择代理专用子网,即使它是列表中的选项也是如此。
  5. 端口设置为 80
  6. IP 地址字段中,保留默认选项:临时(自动)
  7. 点击完成

检查并最终确定配置

  • 点击创建

gcloud

  1. 选择您创建的服务项目:

    gcloud config set project SERVICE_PROJECT_1_ID

  2. 创建网址映射 tutorial-url-maps,并将默认服务设置为在服务项目 1 中创建的后端服务:

    gcloud compute url-maps create tutorial-url-maps \
        --default-service=projects/SERVICE_PROJECT_2_ID/regions/us-west1/backendServices/tutorial-backend-service-sp2 \
        --region=us-west1 \
        --project=SERVICE_PROJECT_1_ID
    

    替换以下内容:

    • SERVICE_PROJECT_2_ID:在其中创建了负载均衡器的后端和后端服务的服务项目 2 的项目 ID。
    • SERVICE_PROJECT_1_ID:在其中创建了负载均衡器前端的服务项目 1 的项目 ID。
  3. 创建目标代理 tutorial-http-proxy

    gcloud compute target-http-proxies create tutorial-http-proxy \
      --url-map=tutorial-url-maps \
      --url-map-region=us-west1 \
      --region=us-west1 \
      --project=SERVICE_PROJECT_1_ID
    
  4. 创建转发规则 l7-ilb-forwarding-rule 以处理 HTTP 流量。为使跨项目服务引用正常工作,转发规则必须使用用于创建后端服务的共享 VPC 宿主项目中的同一网络 (lb-network)。

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=projects/SERVICE_PROJECT_1_ID/global/networks/lb-network \
      --subnet=projects/SERVICE_PROJECT_1_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
      --address=l7-ilb-ip-address \
      --ports=80 \
      --region=us-west1 \
      --target-http-proxy=tutorial-http-proxy \
      --target-http-proxy-region=us-west1 \
      --project=SERVICE_PROJECT_1_ID
    
  5. 如需将流量发送到后端服务,请将网址映射与后端服务相关联。如需了解详情,请参阅使用网址映射

    1. 将服务项目 2 中的后端服务 tutorial-backend-service-sp2 与网址映射 tutorial-url-maps 和路径匹配器名称 tutorial-path-matcher-sp2 相关联:

      gcloud compute url-maps add-path-matcher tutorial-url-maps \
         --path-matcher-name=tutorial-path-matcher-sp2 \
         --default-service=projects/SERVICE_PROJECT_2_ID/regions/us-west1/backendServices/tutorial-backend-service-sp2 \
         --region=us-west1
      
    2. 将 Service Project 3 中的后端服务 tutorial-backend-service-sp3 与网址映射 tutorial-url-maps 和路径匹配器名称 tutorial-path-matcher-sp3 相关联。添加新的主机规则 tutorial-host 和给定主机,以便将路径匹配器绑定到新主机规则

      gcloud compute url-maps add-path-matcher tutorial-url-maps \
        --path-matcher-name=tutorial-path-matcher-sp3 \
        --default-service=projects/SERVICE_PROJECT_3_ID/regions/us-west1/backendServices/tutorial-backend-service-sp3 \
        --region=us-west1 \
        --new-hosts=tutorial-host
      

测试负载均衡器

如需测试负载均衡器,请先创建一个示例客户端虚拟机。然后,与虚拟机建立 SSH 会话,并将来自此虚拟机的流量发送到负载均衡器。

创建测试虚拟机实例

客户端可位于共享 VPC 宿主项目或任何连接的服务项目中。在此示例中,您将通过在指定为共享 VPC 宿主项目的服务项目 1 中部署客户端虚拟机来测试负载均衡器是否正常运行。客户端必须使用同一共享 VPC 网络,而且与负载均衡器位于同一个区域。

本部分中的所有步骤都必须在服务项目 2 中执行。

控制台

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

    转到虚拟机实例

  2. 点击创建实例

  3. 名称字段中,输入 client-vm

  4. 可用区设置为 us-west1-b

  5. 点击高级选项,然后点击网络

  6. 输入以下网络标记allow-sshload-balanced-backend

  7. 网络接口部分,选择与我共享的网络(通过宿主项目:SERVICE_PROJECT_1_ID

  8. lb-network 网络中选择 lb-frontend-and-backend-subnet 子网。

  9. 点击创建

gcloud

创建测试虚拟机实例。

gcloud compute instances create client-vm \
    --image-family=debian-12 \
    --image-project=debian-cloud \
    --subnet=projects/SERVICE_PROJECT_1_ID/regions/us-west1/subnetworks/lb-frontend-and-backend-subnet \
    --zone=us-west1-b \
    --tags=allow-ssh \
    --project=SERVICE_PROJECT_2_ID

将流量发送到负载均衡器

使用 SSH 连接到您刚刚创建的实例,通过测试确定可以通过内部应用负载均衡器的转发规则 IP 地址访问后端的 HTTP(S) 服务,并且流量正在后端实例之间进行负载均衡。

  1. 检索负载均衡器 IP 地址的值:

    gcloud compute addresses list --filter="name=( 'l7-ilb-ip-address')"
    

    您将看到类似如下所示的输出:

    NAME: l7-ilb-ip-address
    ADDRESS/RANGE: 10.1.2.2
    TYPE: INTERNAL
    PURPOSE: GCE_ENDPOINT
    NETWORK:
    REGION: us-west1
    SUBNET: lb-frontend-and-backend-subnet
    STATUS: IN_USE
    

    从输出中复制服务 ADDRESS/RANGE(例如 10.1.2.2),以便在后续步骤中使用。

  2. 通过 SSH 连接到客户端实例:

    gcloud compute ssh client-vm \
       --zone=us-west1-b \
       --project=SERVICE_PROJECT_2_ID
    
  3. 验证负载均衡器的 IP 地址是否传送其主机名:

    1. 在服务项目 2 中验证 IP 地址是否提供其主机名:

      curl 10.1.2.2
      

      您将看到类似如下所示的输出:

      Page served from: tutorial-sp2-mig-a-10xk
      

    2. 在服务项目 3 中验证 IP 地址是否提供其主机名:

      curl -H "Host: tutorial-host" 10.1.2.2
      

      您将看到类似如下所示的输出:

      Page served from: tutorial-sp3-mig-a-3d5h
      

授予 IAM 权限

为应用中心宿主项目和服务项目提供适当的 IAM 角色和权限。

控制台

  1. 在 Google Cloud 控制台中,前往“项目选择器”页面。

    转到“项目选择器”

  2. 选择 App Hub 宿主项目

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

    转到 IAM

  4. 点击 授予访问权限。 此时会打开授予访问权限窗格。

  5. 新建主账号字段中,输入将负责管理 App Hub 的个人的电子邮件地址,即 App Hub 托管项目中的 App Hub Admin 角色。

  6. 点击选择角色,然后在过滤条件字段中输入 App Hub

  7. 选择 App Hub Admin 角色,然后点击 Save(保存)。

  8. 在每个 App Hub 服务项目中,向同一用户授予 App Hub 管理员角色。

gcloud

  1. 如需向将使用 App Hub 的个人授予相应角色,请根据需要替换 IAM 角色,重复以下命令。如需了解详情,请参阅 App Hub 角色和权限

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member='user:HOST_PROJECT_ADMIN' \
        --role='roles/apphub.admin'

    HOST_PROJECT_ADMIN 替换为在 App Hub 宿主项目中具有 App Hub Admin 角色的用户。此值的格式为 username@yourdomain,例如 222larabrown@gmail.com

  2. 向管理 API Hub 的用户授予服务项目中的“API Hub 管理员”角色。他们必须拥有应用中心管理员角色,才能将服务项目添加到宿主项目。每个服务项目都需要至少有一位用户拥有此角色。

    gcloud projects add-iam-policy-binding SERVICE_PROJECT_ID \
       --member='user:HOST_PROJECT_ADMIN' \
       --role='roles/apphub.admin'

    SERVICE_PROJECT_ID 替换为服务项目的 ID。

关联服务项目

服务项目是 Google Cloud 项目,其中包含您可以注册到 App Hub 应用的基础架构资源。如需了解详情,请参阅服务项目。将您部署资源的服务项目附加到 App Hub 宿主项目。

控制台

  1. 在 Google Cloud 控制台中,前往 App Hub 设置页面。

    前往“设置”

  2. 设置页面上,点击关联项目

  3. 在随即打开的窗格中,从显示的列表中搜索项目,然后选中要添加为服务项目的项目对应的复选框。

  4. 点击选择已关联的服务项目表会显示所选的服务项目。

  5. 点击关闭

gcloud

  1. 将服务项目 1、2 和 3 附加到您的 App Hub 宿主项目。

    gcloud apphub service-projects add SERVICE_PROJECT_1_ID \
      --project=HOST_PROJECT_ID
    
    gcloud apphub service-projects add SERVICE_PROJECT_2_ID \
      --project=HOST_PROJECT_ID
    
    gcloud apphub service-projects add SERVICE_PROJECT_3_ID \
      --project=HOST_PROJECT_ID
    
  2. 确认您已将 App Hub 服务项目附加到 App Hub 宿主项目:

    gcloud apphub service-projects list --project=HOST_PROJECT_ID
    

将服务项目附加到 App Hub 宿主项目后,您可以将关联的服务项目中的所有 Google Cloud 资源视为已发现的 App Hub 服务和工作负载进行查看。如需详细了解如何查看这些发现的服务和工作负载,请参阅查看现有应用、服务和工作负载

创建应用

创建一个应用来作为服务和工作负载的容器。创建应用时,您可以分配不可变属性,例如要从中注册资源的范围类型或位置,以及重要性和环境等可变属性。您可以使用变量属性来过滤应用。如需了解详情,请参阅房源和属性

在本教程中,您将创建一个全球应用,以便在一个应用中管理全球和地区性资源。如果您想对特定区域的资源进行分组,可以创建地区性应用并注册这些资源。如需详细了解如何创建地区性应用,请参阅设置 App Hub

控制台

  1. 确保您位于 App Hub 宿主项目中。
  2. 在 Google Cloud 控制台中,前往 App Hub 的应用页面。

    打开“应用”

  3. 点击创建应用

  4. 创建应用页面的选择应用区域和名称窗格中,选择 Global

  5. 应用名称字段中,输入 tutorial-application。此名称是唯一标识符,在您创建应用后将不可更改。

  6. 输入显示名称 Tutorial,然后点击继续。这是一个简单易记的名称,您可以对其进行更新。如需了解详情,请参阅更新现有应用

  7. 添加属性窗格中,从重要性列表中选择重要性表示应用、服务或工作负载对业务运营的重要程度。

  8. 环境字段中,选择生产环境以指明软件生命周期阶段。

  9. 点击继续

  10. 添加所有者窗格中,为开发者所有者运营商所有者企业所有者添加以下详细信息。请注意,如果您添加了显示名称,则必须输入所有者的电子邮件地址。

    1. 输入所有者的显示名称。
    2. 输入所有者的电子邮件地址。此值必须采用 username@yourdomain 格式,例如 222larabrown@gmail.com
  11. 对每个开发者、运营商和企业所有者重复上述步骤。

  12. 点击创建

系统会创建新应用,并将其列在应用页面上。请注意,只有转发规则、网址映射、后端服务和托管式实例组 (MIG) 会在 App Hub 应用中作为已发现资源提供。如需了解详情,请参阅概念和数据模型

gcloud

  1. 选择您创建的 App Hub 宿主项目:

    gcloud config set project HOST_PROJECT_ID
  2. 在区域 global 中创建一个名为 tutorial-application 的新应用,并为其指定显示名称 Tutorial。此应用名称 tutorial-application 是唯一标识符,在您创建应用后将不可更改。显示名称Tutorial是您可以更新的简单易记的名称。如需了解详情,请参阅更新现有应用

    gcloud apphub applications create tutorial-application \
        --display-name='Tutorial' \
        --scope-type=GLOBAL \
        --project=HOST_PROJECT_ID \
        --location=global
    
  3. 列出 App Hub 宿主项目中的应用:

    gcloud apphub applications list \
        --project=HOST_PROJECT_ID \
        --location=global
    

    您将看到类似如下所示的输出:

    ID                    DISPLAY_NAME  CREATE_TIME
    tutorial-application  Tutorial      2023-10-31T18:33:48
    
  4. 使用 criticality-typeenvironment-type 和 owner 属性更新您的应用:

    gcloud apphub applications update tutorial-application \
      --criticality-type='HIGH' \
      --environment-type='PRODUCTION' \
      --developer-owners=display-name=DISPLAY-NAME-DEVELOPER,email=EMAIL-DEVELOPER \
      --operator-owners=display-name=DISPLAY-NAME-OPERATOR,email=EMAIL-OPERATOR \
      --business-owners=display-name=DISPLAY-NAME-BUSINESS,email=EMAIL-BUSINESS \
      --project=HOST_PROJECT_ID \
      --location=global
    

    替换以下内容:

    • DISPLAY-NAME-DEVELOPERDISPLAY-NAME-OPERATORDISPLAY-NAME-BUSINESS:分别为开发者、运营商和企业所有者的显示名称。
    • EMAIL-NAME-DEVELOPEREMAIL-NAME-OPERATOREMAIL-NAME-BUSINESS:分别为开发者、运营商和企业所有者的电子邮件地址。这些值必须采用 username@yourdomain 格式,例如 222larabrown@gmail.com

    注意:

    • criticality-type:指示应用、服务或工作负载对业务运营的重要性。
    • environment-type:表示软件生命周期的阶段。
  5. 获取您创建的应用的详细信息:

    gcloud apphub applications describe tutorial-application \
      --project=HOST_PROJECT_ID \
      --location=global
    

    该命令会以 YAML 格式返回信息,类似于以下内容:

    attributes:
    businessOwners:
    – displayName: [DISPLAY-NAME-BUSINESS]
      email: [EMAIL-BUSINESS]
    criticality:
      type: HIGH
    developerOwners:
    – displayName: [DISPLAY-NAME-DEVELOPER]
      email: [EMAIL-DEVELOPER]
    environment:
      type: PRODUCTION
    operatorOwners:
    – displayName: [DISPLAY-NAME-OPERATOR]
      email: [EMAIL-OPERATOR]
    createTime: '2023-10-31T18:33:48.199394108Z'
    displayName: Tutorial
    name: projects/HOST_PROJECT_ID/locations/global/applications/tutorial-application
    scope:
      type: REGIONAL
    state: ACTIVE
    uid: 9d991a9d-5d8a-4c0d-b5fd-85e39fb58c73
    updateTime: '2023-10-31T18:33:48.343303819Z'
    

注册服务和工作负载

注册服务和工作负载会将其添加到应用中,以便您监控添加的资源。

控制台

  1. 在 Google Cloud 控制台中,前往 App Hub 的应用页面。

    打开“应用”

  2. 点击应用名称“Tutorial”(教程)。 系统会显示服务和工作负载标签页,其中列出了 App Hub 服务项目中已注册的服务和工作负载。

  3. 注册服务:

    1. 服务和工作负载标签页上,点击注册服务/工作负载
    2. 注册服务或工作负载页面的选择资源窗格中,点击浏览,以选择服务或工作负载作为资源
    3. 选择资源窗格中,选择服务的名称 tutorial-backend-service-sp2,然后点击选择
    4. 选择资源窗格中,输入资源的名称 tutorial-service-backend-sp2
    5. 输入显示名称 Backend service (SP2),然后点击继续
    6. 添加属性窗格中的重要性列表中,选择以指明应用的重要性。
    7. 环境字段中,选择生产环境以指明软件生命周期阶段。
    8. 点击继续
    9. 添加所有者窗格中,根据开发者所有者运营商所有者企业所有者的要求,添加以下详细信息。请注意,如果您添加了显示名称,则必须输入所有者的电子邮件地址。
      1. 输入所有者的显示名称。
      2. 输入所有者的电子邮件地址。此值必须采用 username@yourdomain 格式,例如 222larabrown@gmail.com
    10. 对每个开发者、运营商和企业所有者重复上述步骤。
    11. 点击注册

    服务和工作负载标签页的已注册的服务和工作负载部分,您可以看到添加的新服务。

  4. 重复上述步骤,将其他服务分别注册为 tutorial-service-backend-sp3tutorial-service-forwarding-ruletutorial-service-url-map
  5. 重复之前用于注册服务的步骤来注册工作负载,但存在以下例外情况:
    1. 注册服务或工作负载窗格中的选择服务或工作负载部分,选择工作负载的名称 tutorial-sp2-mig-a,然后点击继续
    2. 选择资源窗格中,输入资源的名称 tutorial-workload-sp2-mig-a
    3. 输入显示名称 Instance group - A (SP2),然后点击继续
  6. 重复前面的步骤,将其他工作负载分别注册为 tutorial-workload-sp2-mig-atutorial-workload-sp2-mig-btutorial-workload-sp3-mig-atutorial-workload-sp3-mig-b

gcloud

  1. 添加具有 App Hub 编辑器权限的个人:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
      --member='user:APP_HUB_EDITOR' \
      --role='roles/apphub.editor'
    

    APP_HUB_EDITOR 替换为在 App Hub 托管项目中具有 App Hub 编辑者角色的用户。此值的格式为 username@yourdomain,例如 222larabrown@gmail.com

  2. 列出 App Hub 宿主项目中发现的所有服务。 此命令会返回可注册到应用的服务。

    gcloud apphub discovered-services list \
        --project=HOST_PROJECT_ID \
        --location=us-west1
    

    您将看到类似如下所示的输出:

    ID                             SERVICE_REFERENCE                                                                                                                      SERVICE_PROPERTIES
    BACKEND_SERVICE_SP2_ID      {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/regions/us-west1/backendServices/tutorial-backend-service-sp2'}  {'gcpProject': 'projects/SERVICE_PROJECT_2_ID', 'location': 'us-west1'}
    BACKEND_SERVICE_SP3_ID      {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/regions/us-west1/backendServices/tutorial-backend-service-sp3'}  {'gcpProject': 'projects/SERVICE_PROJECT_3_ID', 'location': 'us-west1'}
    FORWARDING_RULE_SERVICE_ID  {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_1_NUMBER]/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule'}        {'gcpProject': 'projects/SERVICE_PROJECT_1_ID', 'location': 'us-west1'}
    URL_MAP_SERVICE_ID          {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_1_NUMBER]/regions/us-west1/urlMaps/tutorial-url-maps'}                     {'gcpProject': 'projects/SERVICE_PROJECT_1_ID', 'location': 'us-west1'}
    

    从输出中复制服务 ID(例如 BACKEND_SERVICE_SP2_ID),以便在下一步中使用。

  3. 将上一步中的服务注册到您的应用。从上一步中的输出字段复制服务 ID。

    gcloud apphub applications services create tutorial-service-backend-sp2 \
        --discovered-service='projects/HOST_PROJECT_ID/locations/us-west1/discoveredServices/BACKEND_SERVICE_SP2_ID' \
        --display-name='Backend service (SP2)' \
        --criticality-type='HIGH' \
        --environment-type='PRODUCTION' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications services create tutorial-service-backend-sp3 \
        --discovered-service='projects/HOST_PROJECT_ID/locations/us-west1/discoveredServices/BACKEND_SERVICE_SP3_ID' \
        --display-name='Backend service (SP3)' \
        --criticality-type='HIGH' \
        --environment-type='PRODUCTION' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications services create tutorial-service-forwarding-rule \
        --discovered-service='projects/HOST_PROJECT_ID/locations/us-west1/discoveredServices/FORWARDING_RULE_SERVICE_ID' \
        --display-name='Forwarding rule' \
        --criticality-type='HIGH' \
        --environment-type='PRODUCTION' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications services create tutorial-service-url-map \
        --discovered-service='projects/HOST_PROJECT_ID/locations/us-west1/discoveredServices/URL_MAP_SERVICE_ID' \
        --display-name='URL map' \
        --criticality-type='HIGH' \
        --environment-type='PRODUCTION' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    

    替换以下内容:

    • BACKEND_SERVICE_SP2_ID:您要注册的服务项目 2 中的后端服务的服务 ID
    • BACKEND_SERVICE_SP3_ID:您要注册的服务项目 3 中的后端服务的服务 ID
    • FORWARDING_RULE_SERVICE_ID:您要注册的服务项目 1 中的转发规则的服务 ID
    • URL_MAP_SERVICE_ID:您要注册的服务项目 1 中网址映射的服务 ID
  4. 列出应用中的所有已注册服务:

    gcloud apphub applications services list \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    

    您将看到类似如下所示的输出:

    ID                               DISPLAY_NAME      SERVICE_REFERENCE                                                                                                                       CREATE_TIME
    tutorial-service-backend-sp2     Backend service   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/regions/us-west1/backendServices/tutorial-backend-service-sp2'}   2024-02-13T00:31:45
    tutorial-service-backend-sp3     Backend service   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/regions/us-west1/backendServices/tutorial-backend-service-sp3'}   2024-02-13T00:31:45
    tutorial-service-forwarding-rule Forwarding rule   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_1_NUMBER]/regions/us-west1/forwardingRules/l7-ilb-forwarding-rule'}         2024-02-13T00:31:45
    tutorial-service-url-map         URL map           {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_1_NUMBER]/regions/us-west1/urlMaps/tutorial-url-maps'}                      2024-02-13T00:31:45
    
    已注册但已分离的服务由 SERVICE_REFERENCE 字段中的空值表示。如需详细了解注册状态,请参阅 App Hub 的属性和特性

  5. 列出 App Hub 宿主项目中发现的所有工作负载。 此命令会返回可注册到应用的工作负载。

    gcloud apphub discovered-workloads list \
        --project=HOST_PROJECT_ID \
        --location=global
    

    您将看到类似如下所示的输出:

    ID                            WORKLOAD_REFERENCE                                                                                                          WORKLOAD_PROPERTIES
    INSTANCE_GROUP_SP3_A_ID    {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp3-mig-a'}  {'gcpProject': 'projects/SERVICE_PROJECT_3_ID', 'location': 'us-west1'}
    INSTANCE_GROUP_SP3_B_ID    {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp3-mig-b'}  {'gcpProject': 'projects/SERVICE_PROJECT_3_ID', 'location': 'us-west1'}
    INSTANCE_GROUP_SP2_A_ID    {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp2-mig-a'}  {'gcpProject': 'projects/SERVICE_PROJECT_2_ID', 'location': 'us-west1'}
    INSTANCE_GROUP_SP2_B_ID    {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp2-mig-b'}  {'gcpProject': 'projects/SERVICE_PROJECT_2_ID', 'location': 'us-west1'}
    
    从输出中复制工作负载 ID,以便在下一步中使用。

  6. 将上一步中的工作负载注册到您的应用。从上一步中的输出字段复制工作负载 ID。

    gcloud apphub applications workloads create tutorial-workload-sp3-mig-a \
        --discovered-workload='projects/HOST_PROJECT_ID/locations/us-west1/discoveredWorkloads/INSTANCE_GROUP_SP3_A_ID' \
        --display-name='Workload instance group (SP3-A)' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications workloads create tutorial-workload-sp3-mig-b \
        --discovered-workload='projects/HOST_PROJECT_ID/locations/us-west1/discoveredWorkloads/INSTANCE_GROUP_SP3_B_ID' \
        --display-name='Workload instance group (SP3-B)' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications workloads create tutorial-workload-sp2-mig-a \
        --discovered-workload='projects/HOST_PROJECT_ID/locations/us-west1/discoveredWorkloads/INSTANCE_GROUP_SP2_A_ID' \
        --display-name='Workload instance group (SP2-A)' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    
    gcloud apphub applications workloads create tutorial-workload-sp2-mig-b \
        --discovered-workload='projects/HOST_PROJECT_ID/locations/us-west1/discoveredWorkloads/INSTANCE_GROUP_SP2_B_ID' \
        --display-name='Workload instance group (SP2-B)' \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    

    替换以下内容:

    • INSTANCE_GROUP_SP3_A_IDINSTANCE_GROUP_SP3_B_ID:您要注册的 Service Project 3 中的托管实例组的工作负载 ID
    • INSTANCE_GROUP_SP2_A_IDINSTANCE_GROUP_SP2_B_ID:您要注册的 Service Project 2 中的托管实例组的工作负载 ID
  7. 列出应用中所有已注册的工作负载:

    gcloud apphub applications workloads list \
        --application=tutorial-application \
        --project=HOST_PROJECT_ID \
        --location=global
    

    您将看到类似如下所示的输出:

    ID                              DISPLAY_NAME                      SERVICE_REFERENCE                                                                                                            CREATE_TIME
    tutorial-workload-sp3-mig-a     Workload instance group (SP3-A)   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp3-mig-a'}   2024-02-13T00:31:45
    tutorial-workload-sp3-mig-b     Workload instance group (SP3-B)   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_3_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp3-mig-b'}   2024-02-13T00:31:45
    tutorial-workload-sp2-mig-a     Workload instance group (SP2-A)   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp2-mig-a'}   2024-02-13T00:31:45
    tutorial-workload-sp2-mig-b     Workload instance group (SP2-B)   {'uri': '//compute.googleapis.com/projects/[SERVICE_PROJECT_2_NUMBER]/zones/us-west1-a/instanceGroups/tutorial-sp2-mig-b'}   2024-02-13T00:31:45
    
    已注册但已分离的工作负载由 WORKLOAD_REFERENCE 字段中的空值表示。如需详细了解注册状态,请参阅 App Hub 的属性和特性

查看所有服务和工作负载

您可以查看关联到 App Hub 宿主项目的服务项目中的服务和工作负载的详细信息。

  1. 在 Google Cloud 控制台中,前往 App Hub 的服务和工作负载页面。

    前往“服务和工作负载”页面

    系统会显示关联的 App Hub 服务项目中的所有服务和工作负载。

  2. 区域列表中,选择 global。 系统会显示工作负载实例组工作负载,以及应用中心类型重要性已注册到等详细信息。

  3. 如需根据状态过滤服务或工作负载,请执行以下操作:

    1. 过滤条件字段中,选择过滤条件,例如注册状态
    2. 点击已注册。系统会显示已注册到应用的服务和工作负载的列表。

查看应用指标

您可以查看在 App Hub 托管项目中创建的应用的系统指标。这些指标对应于黄金信号(流量、错误、延迟时间和饱和度),有助于监控应用的性能和运行状况。

  1. 在 Google Cloud 控制台中,前往 App Hub 的应用页面。

    打开“应用”

  2. 点击应用名称 Tutorial

    系统会显示服务和工作负载标签页,其中包含已注册到应用的服务和工作负载的元数据。

  3. 如需查看已注册服务和工作负载的系统指标,请点击指标

清理

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

删除 App Hub 资源

控制台

  1. 在 Google Cloud 控制台中,前往 App Hub 的应用页面。

    打开“应用”

  2. 点击应用名称“Tutorial”

  3. 服务和工作负载标签页的已注册的服务和工作负载部分中,点击相应服务的名称。

  4. 服务和工作负载页面上,点击取消注册

    系统会发出提醒,告知您服务未注册。

  5. 服务和工作负载标签页的已注册的服务和工作负载部分中,点击工作负载的名称。

  6. 详细信息标签页中,点击取消注册

    系统会发出提醒,告知您工作负载已取消注册。

  7. 前往应用中心的应用页面。

    打开“应用”

  8. 点击相应应用的名称。

  9. tutorial-application 页面上,点击 Delete(删除)。

  10. 在 Google Cloud 控制台中,前往 App Hub 设置页面。

    前往“设置”

  11. 设置页面上,选中要从 App Hub 托管项目中移除的服务项目对应的复选框。

  12. 点击分离项目

gcloud

  1. 列出应用中已注册的服务:

    gcloud apphub applications services list \
      --application=tutorial-application --project=HOST_PROJECT_ID \
      --location=global
    
  2. 从应用中取消注册服务:

    gcloud apphub applications services delete SERVICE_NAME \
      --application=tutorial-application --project=HOST_PROJECT_ID \
      --location=global
    

    SERVICE_NAME 替换为服务的名称。这些服务现在是可注册到应用的已发现服务。

  3. 列出应用中已注册的工作负载:

    gcloud apphub applications workloads list \
      --application=tutorial-application --project=HOST_PROJECT_ID \
      --location=global
    
  4. 从应用中取消注册工作负载:

    gcloud apphub applications workloads delete WORKLOAD_NAME \
      --application=tutorial-application --project=HOST_PROJECT_ID \
      --location=global
    

    WORKLOAD_NAME 替换为工作负载的名称。该工作负载现在是一项已发现的工作负载,可以注册到应用。

  5. 删除应用:

    gcloud apphub applications delete tutorial-application \
      --project=HOST_PROJECT_ID \
      --location=global
    
  6. 从 App Hub 宿主项目中移除服务项目:

    gcloud apphub service-projects remove SERVICE_PROJECT_ID \
      --project=HOST_PROJECT_ID
    

    SERVICE_PROJECT_ID 替换为服务项目 1、2 和 3 的项目 ID。

删除部署

如果不再需要该解决方案,为避免继续为您在此解决方案中创建的资源计费,请删除所有资源。

如需了解详情,请参阅清理负载均衡器设置

删除项目

控制台

  1. 在 Google Cloud 控制台中,前往管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

gcloud

删除 Google Cloud 项目:

gcloud projects delete PROJECT_ID

PROJECT_ID 替换为宿主项目或服务项目 ID。

后续步骤