创建非公开拨测

本文档介绍如何配置非公开拨测。通过非公开拨测,您可以在实施 Identity and Access Management (IAM) 限制和 VPC Service Controls 边界时,将 HTTP 或 TCP 请求发送到客户的 Virtual Private Cloud (VPC) 网络。非公开拨测可以通过专用网络将请求发送到虚拟机 (VM) 或 L4 内部负载均衡器 (ILB) 等资源。

专用网络上的资源的内部 IP 地址由启用了专用服务访问通道Service Directory 服务记录。如需使用非公开拨测,您必须使用 Service Directory 产品配置专用服务访问通道。

存储专用正常运行时间检查的 Google Cloud 项目和存储 Service Directory 服务的 Google Cloud 项目可以是不同的项目。借助 Cloud Monitoring,您可以使用指标范围监控一个项目中多个 Google Cloud 项目中的资源。定义了正常运行时间检查的项目是指标范围的范围项目:指标范围是范围限定项目监控的所有项目的列表。Service Directory 服务可以在范围项目或指标范围内的项目中定义。如需详细了解指标范围,请参阅 指标范围概览

私有网络及其资源(例如虚拟机或负载均衡器)也可以位于其他 Google Cloud 项目中。此项目不必位于正常运行时间检查的范围限定项目的指标范围内。Service Directory 服务会收集正常运行时间指标, 它必须在指标范围内,但其封装的资源不在指标范围内。

本文档介绍了如何设置专用网络并配置 使用 Google Cloud 控制台为其 Service Directory 资源 或 API。API 示例假设 专用网络和 Service Directory 服务位于 拨测的范围项目但是,请创建 正常运行时间检查也介绍了如何使用 API 来 在 Google Cloud 控制台中创建使用 Service Directory 服务的拨测 指标范围

如需了解如何配置使用公共 IP 地址的拨测,请参阅创建公开拨测。如需了解如何管理和监控拨测,请参阅本文档的后续步骤部分。

准备工作

  1. 启用以下 API:

    • Cloud Monitoring API:monitoring.googleapis.com
    • Service Directory API:servicedirectory.googleapis.com
    • Service Networking API:servicenetworking.googleapis.com
    • Compute Engine API:compute.googleapis.com

    您可以使用 gcloud CLI 或 Google Cloud 控制台启用这些 API。以下标签介绍了如何安装 gcloud CLI 并启用 Cloud Monitoring API:

    Google Cloud 控制台

    1. 在 Google Cloud 控制台中,为 Cloud Storage 存储分区 要启用此 API 然后转至服务页面:

      转到 API 和服务

    2. 点击启用 API 和服务按钮。

    3. 搜索“Monitoring”。

    4. 在搜索结果中,点击“Stackdriver Monitoring API”。

    5. 如果显示“API 已启用”,则表示此 API 已启用。如果未显示,请点击启用

    gcloud CLI

    1. 如果您尚未在工作站上安装 Google Cloud CLI,请参阅安装 gcloud CLI

    2. 如需查看是否已启用 Monitoring API,请在将 PROJECT_ID 替换为要为其启用该 API 的项目的 ID 后在工作站上运行以下命令:

      gcloud services list --project=PROJECT_ID
      

      如果输出中显示 monitoring.googleapis.com,则表示已启用 API。

    3. 如果未启用该 API,请运行以下命令启用它。

      gcloud services enable monitoring --project=PROJECT_ID
      

      如需了解详情,请参阅 gcloud services

    您可以使用相同的步骤启用其他 API:

    • 如需使用 Google Cloud 控制台,请搜索显示名称,例如“Service Directory API”。
    • 如需使用 gcloud CLI,请指定 googleapis.com 名称,例如 servicedirectory
  2. 配置您要用于接收通知的通知渠道 通知。我们建议您创建多种类型的通知渠道。如需了解详情,请参阅创建和管理通知渠道

  3. 配置专用网络并配置一个虚拟机或 ILB, 访问该专用网络 如需了解详情,请参阅专用服务访问通道

    针对 ILB 的专用检查仅限于 以及正常运行时间检查工具的区域 拨测区域 USA 包含 USA_OREGONUSA_IOWAUSA_VIRGINIA 区域。每个 USA_* 区域都有一个检查工具,USA 包含所有三个检查工具。其他拨测区域 EUROPESOUTH_AMERICAASIA_PACIFIC 各有一个拨测工具。 如需移除此限制,您必须配置对负载均衡器的全球访问权限。如需详细了解如何配置全球访问权限,请参阅本文档配置 Service Directory 资源部分中的 ILB 标签页。

    如果您计划检查不允许全球访问权限的 ILB, 为您的 ILB 选择以下某个区域:

    • us-east4
    • us-central1
    • us-west1
    • europe-west1
    • southamerica-east1
    • asia-southeast1
  4. 确定要使用的接口:

    • Google Cloud 控制台:可让您在虚拟机处理请求时创建正常运行时间检查。此界面会引导您配置 Service Directory 资源、授权服务账号以及配置网络防火墙规则。

    • 命令行界面:您可以在 ILB 和虚拟机处理请求时使用 Google Cloud CLI 和 Cloud Monitoring API 创建非公开拨测。

  5. 如果您打算使用命令行配置非公开拨测,请完成前提步骤

创建非公开拨测

本部分介绍如何创建和配置专用拨测 Service Directory 服务:

  • 如需使用 Google Cloud 控制台,请选择 Google Cloud 控制台标签页。

  • 要使用 Cloud Monitoring API 并配置 Service Directory 服务与 则选择 API: 限定项目范围标签页。

  • 如需使用 Cloud Monitoring API 并将 Service Directory 服务配置为位于受正常运行时间检查项目的指标范围监控的项目中,请选择 API:受监控的项目标签页。

Google Cloud 控制台

如需使用 Google Cloud 控制台创建拨测,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往  拨测页面:

    前往拨测

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 点击创建拨测

    创建正常运行时间检查对话框。

  3. 指定专用拨测:

    1. 选择协议,可以是 HTTPHTTPSTCP

    2. 选择内部 IP 资源类型。

  4. 如果您未配置 Service Directory 服务 或者想要创建一个 Service Directory 服务,然后点击 View 并完成 专用拨测前提条件窗格:

    1. 如果系统提示,请启用 Compute Engine API 或 Service Directory API。启用这些 API 可能需要一分钟时间才能完成。

    2. 展开 服务账号(如果显示)。 然后点击创建服务账号

      如果监控服务账号不存在,系统会创建一个。然后,Monitoring 向该服务账号授予两个 Service Directory 角色。

    3. 展开 Service Directory 菜单并 然后执行以下操作:

      1. 展开 Region(区域),然后选择处理请求的虚拟机所在的区域。
      2. 展开 Namespace(命名空间),然后选择一个现有的 Service Directory 命名空间,或点击 Create Namespace(创建命名空间)并创建一个命名空间。
      3. 点击服务名称,然后输入服务名称。服务是非公开拨测的目标。
      4. 点击端点名称,然后输入端点名称。 端点是一对 IP 地址和端口值,可供服务用来处理请求。如果您的服务包含多个端点,系统会随机选择一个端点。
      5. 展开 Network(网络),然后选择您的专用网络。
      6. 展开 Instance,然后选择虚拟机 在处理请求的专用网络上。选择实例后,系统会显示其内部 IP 地址。
      7. 点击完成
    4. 展开 防火墙规则

      1. 展开 Network(网络),然后选择网络规则所附加的网络。

      2. 点击创建防火墙规则

        该防火墙规则允许来自路由 35.199.192.0/19 的入站 TCP 流量。从 35.199.192.0/19 到转发的路由支持连接 使用专用路由的目标 如需了解详情,请参阅 VPC 路由

  5. 非公开正常运行时间检查窗格中,如需指定要使用的 Service Directory 服务,请执行以下操作之一:

    • 选择使用完全限定服务名称,然后输入 服务的限定名称:

      projects/SERVICE_DIRECTORY_PROJECT_ID/locations/REGION/namespaces/PRIVATE_NAMESPACE/services/PRIVATE_SERVICE
      
    • 使用 菜单。如果您创建了服务,系统会为您选择这些字段。

  6. 专用拨测窗格中,填写 拨测的目标:

    1. 可选:为请求输入路径组成部分。

      使用 HTTP 或 HTTPS 协议的专用正常运行时间检查会向 http://target/path 发送请求。在本课中, 表达式中,target 是配置的内部 IP 地址 位于 Service Directory 端点中

      如果您将路径字段留空或将值设置为 /, 则请求将发送给 http://target/

    2. 可选:要设置拨测的执行频率,请使用 检查频率字段。

    3. 可选:选择检查工具区域,或配置 用于 HTTP 和 HTTPS 检查的标头以及其他值 点击更多定位选项

      • 区域:选择正常运行时间检查将从中接收请求的区域。正常运行时间检查必须至少有 3 个检查工具。除美国外,其他所有区域都有一项检查工具, 有三个棋盘格。默认设置是全局, 包括所有区域。
      • 请求方法:选择 GETPOST
      • 正文:对于 HTTP POST 检查,请输入网址编码的正文:您必须自己进行编码。对于所有其他检查,请将此字段留空。
      • 主机标头:配置专用正常运行时间检查时,请勿设置此字段。
      • 端口:您在此处设置的任何值都会替换 Service Directory 端点配置中的端口。如果您想使用端点配置,请勿在此处设置值。
      • 自定义标头:提供自定义标头,并可选择对其进行加密。加密操作会隐藏表单标头中的值。 对您不想向他人显示的身份验证相关标头使用加密。
      • Authentication:提供一个用户名和密码。这些值将作为 Authorization 标头发送。如果您在此处设置了值,请不要另外再设置 Authorization 标头;如果您设置了 Authorization 标头,则不要在此处设置值。密码将始终隐藏在表单中。
  7. 点击继续并配置响应要求。 本部分中的所有设置均采用默认值:

    • 如需为正常运行时间检查设置超时期限,请使用响应超时字段。如果在此期限内未收到多个位置的响应,则正常运行时间检查会失败。

    • 如需配置拨测以执行内容匹配,请执行以下操作: 确保切换标签为已启用内容匹配功能

      • 从选项菜单中选择响应内容匹配类型。 此字段用于确定如何将响应内容与返回的数据进行比较。例如,假设响应内容为 abcd 且内容匹配类型为包含。拨测 只有在响应数据包含 abcd 时才能成功。 如需了解详情,请参阅验证响应数据
      • 输入响应内容。响应内容必须是字符串 不能超过 1024 个字节。在 API 中,此字段是 ContentMatcher 对象。
    • 为了防止由于拨测而创建日志条目,请清除日志检查失败

    • 对于 HTTP 正常运行时间检查,请配置可接受的响应代码。默认情况下,HTTP 拨测会将任何 将 2xx 响应视为成功响应。

  8. 点击继续,然后配置提醒政策和通知。

    如需在正常运行时间检查失败时收到通知,请创建提醒政策并为该政策配置通知渠道

    1. 可选:更新提醒政策的名称。
    2. 可选:在时长字段中,选择正常运行时间检查必须失败多长时间才发送通知。默认情况下,通知 当至少两个区域报告某服务的拨测失败时发送 持续时间至少为一分钟
    3. 在标有通知渠道的框中, 展开 菜单,选择要添加的频道。 然后点击确定

      在菜单中,系统会针对每种渠道类型按字母顺序将通知渠道分组。

    如果您不想创建提醒政策,则请确保 该切换按钮的文字为不创建提醒

  9. 点击继续,完成正常运行情况检查:

    1. 为拨测输入描述性标题。

    2. 可选:如需向正常运行时间检查添加用户定义的标签,请执行以下操作:

      1. 点击 显示用户标签
      2. 字段中,输入标签的名称。 标签名称必须以小写字母开头,可以包含小写字母、数字、下划线和短划线。例如: 输入 severity
      3. 字段中,输入标签的值。标签值 可包含 小写字母、数字、下划线和短划线。例如,输入 critical
      4. 对于每个其他标签,请点击添加用户标签,然后输入标签的键和值。
    3. 要验证您的正常运行时间检查配置,请点击测试。 如果结果与您的预期不符,请参阅问题排查,更正您的配置,然后重复验证步骤。

    4. 点击创建

API:确定项目范围

如需为非公开拨测创建配置,请创建 UptimeCheckConfig 对象并将该对象传递给 Cloud Monitoring API 中的 uptimeCheckConfigs.create 方法。

非公开拨测的 UptimeCheckConfig 对象与公开拨测的该对象在以下方面有所不同:

  • 正常运行时间检查配置中指定的受监控资源必须是 servicedirectory_service 类型。此资源类型具有以下标签:

    • project_id:与 Service Directory 服务关联的项目 ID。
    • location:与该服务关联的云区域。
    • namespace_name:Service Directory 命名空间。
    • service_name:Service Directory 服务的名称。
  • 您无需在拨测配置中指定 port 值。 来自 Service Directory 端点的端口值会替换拨测配置中设置的任何值;如果 Service Directory 配置中未指定端口,则拨测会失败。

  • 拨测配置必须指定值为 VPC_CHECKERSchecker_type 字段。非公开拨测需要使用此值。默认情况下,拨测是公开的,因此公开拨测不需要指定此字段。

以下 JSON 代码使用为专用网络上的虚拟机实例配置的 Service Directory 资源说明了非公开拨测的 UptimeCheckConfig 对象:

{
  "displayName": "private-check-demo",
  "monitoredResource": {
    "type": "servicedirectory_service",
    "labels": {
      "project_id": "SERVICE_DIRECTORY_PROJECT_ID",
      "service_name": "PRIVATE_SERVICE",
      "namespace_name": "PRIVATE_NAMESPACE",
      "location": "REGION"
    }
  },
  "httpCheck": {
    "requestMethod": "GET"
  },
  "period": "60s",
  "timeout": "10s",
  "checker_type": "VPC_CHECKERS"
}'

在创建专用拨测时, Service Directory 服务 与拨测位于同一 Google Cloud 项目中,请执行以下操作:

  1. 为 gcloud CLI 设置默认 Google Cloud 项目:

    gcloud config set project PROJECT_ID
    
  2. 创建一个环境变量来存储您的项目 ID:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
  3. 创建环境变量来保存访问令牌:

    export TOKEN=`gcloud auth print-access-token`
    
  4. 使用 curl 工具调用 uptimeCheckConfigs.create 方法并向其发布配置对象:

    curl https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/uptimeCheckConfigs \
    -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    --request POST --data '{
    "displayName": "private-check-demo",
    "monitoredResource": {
      "type": "servicedirectory_service",
      "labels": {
        "project_id": "'"$PROJECT_ID"'",
        "service_name": "PRIVATE_SERVICE",
        "namespace_name": "PRIVATE_NAMESPACE",
        "location": "REGION"
      }
    },
    "httpCheck": {
      "requestMethod": "GET"
    },
    "period": "60s",
    "timeout": "10s",
    "checker_type": "VPC_CHECKERS"
    }'
    

如果拨测创建失败,请验证 拥有必要的角色如需了解详情,请参阅创建正常运行时间检查失败

API:受监控的项目

如需为非公开拨测创建配置,请创建 UptimeCheckConfig 对象并将该对象传递给 Cloud Monitoring API 中的 uptimeCheckConfigs.create 方法。

非公开拨测的 UptimeCheckConfig 对象与公开拨测的该对象在以下方面有所不同:

  • 正常运行时间检查配置中指定的受监控资源必须是 servicedirectory_service 类型。此资源类型具有以下标签:

    • project_id:与 Service Directory 服务关联的项目 ID。
    • location:与该服务关联的云区域。
    • namespace_name:Service Directory 命名空间。
    • service_name:Service Directory 服务的名称。
  • 您无需在拨测配置中指定 port 值。 来自 Service Directory 端点的端口值会替换拨测配置中设置的任何值;如果 Service Directory 配置中未指定端口,则拨测会失败。

  • 拨测配置必须指定值为 VPC_CHECKERSchecker_type 字段。非公开拨测需要使用此值。默认情况下,拨测是公开的,因此公开拨测不需要指定此字段。

以下 JSON 代码使用为专用网络上的虚拟机实例配置的 Service Directory 资源说明了非公开拨测的 UptimeCheckConfig 对象:

{
  "displayName": "private-check-demo",
  "monitoredResource": {
    "type": "servicedirectory_service",
    "labels": {
      "project_id": "SERVICE_DIRECTORY_PROJECT_ID",
      "service_name": "PRIVATE_SERVICE",
      "namespace_name": "PRIVATE_NAMESPACE",
      "location": "REGION"
    }
  },
  "httpCheck": {
    "requestMethod": "GET"
  },
  "period": "60s",
  "timeout": "10s",
  "checker_type": "VPC_CHECKERS"
}'

在创建专用拨测时, Service Directory 服务位于 Google Cloud 项目中 由拨测 Google Cloud 项目中,请执行以下操作:

  1. 将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:

    gcloud config set project PROJECT_ID
    
  2. 创建一个环境变量来存储您的项目 ID:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
  3. 创建一个环境变量来存储在其中定义了 Service Directory 服务的 Google Cloud 项目的 ID:

    export MONITORED_PROJECT_ID=MONITORED_PROJECT_ID
    

    此项目必须在拨测的指标范围内 项目。

  4. 创建环境变量来保存访问令牌:

    export TOKEN=`gcloud auth print-access-token`
    
  5. 使用 curl 工具调用 uptimeCheckConfigs.create 方法并向其发布配置对象:

    curl https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/uptimeCheckConfigs \
    -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    --request POST --data '{
    "displayName": "private-check-demo",
    "monitoredResource": {
      "type": "servicedirectory_service",
      "labels": {
        "project_id": "'"$MONITORED_PROJECT_ID"'",
        "service_name": "PRIVATE_SERVICE",
        "namespace_name": "PRIVATE_NAMESPACE",
        "location": "REGION"
      }
    },
    "httpCheck": {
      "requestMethod": "GET"
    },
    "period": "60s",
    "timeout": "10s",
    "checker_type": "VPC_CHECKERS"
    }'
    

如果拨测创建失败,请验证 拥有必要的角色如需更多信息 请参阅创建拨测失败

正常运行时间检查结果最长可能会延迟 5 分钟才开始流入 Monitoring。在此期间,正常运行时间检查信息中心会将状态报告为“no data available”。

前提步骤

如果您打算使用 Google Cloud 控制台界面,请参阅创建专用正常运行时间检查。Google Cloud 控制台会引导您完成所有前提步骤。

如果您打算使用 来配置专用拨测,那么您必须 在创建拨测之前,请完成以下步骤:

  1. 配置 Service Directory 资源
  2. 向服务账号授权
  3. 配置防火墙规则

配置 Service Directory 资源

专用正常运行时间检查使用由 Service Directory 服务记录的内部 IP 地址来确定资源的可用性。您可以为以下资源配置 Service Directory:

  • 专用网络上的虚拟机
  • L4 内部负载均衡器 (ILB)

如需使用非公开拨测,您必须配置以下 Service Directory 资源:

  • 端点:端点是一对 IP 地址和端口值, 服务用来处理请求的方法如果您的服务包含多个 端点,系统会随机选择一个端点。
  • 服务:服务是用于提供一组行为的端点的集合。服务是非公开拨测的目标。
  • 命名空间:命名空间包含一组服务名称及其关联的端点。您可以通过命名空间将服务组合在一起,以实现一致的管理。

您可以使用 gcloud CLI 或 Google Cloud 控制台。使用控制台时,配置步骤 Create Uptime Check 对话框中的提示。

Google Cloud 控制台

使用 Google Cloud 控制台时,选择内部 IP 作为 资源类型,系统会提示您创建 Service Directory 和 Service。

gcloud CLI - 虚拟机

如需了解本文档中用于服务的命令, 命名空间和端点,请参阅 gcloud service-directory 命令组

如需为虚拟机创建 Service Directory 资源,请按以下步骤操作: 执行以下操作:

  1. 将 Google Cloud CLI 配置为默认为 Google Cloud 项目, 要创建的 Service Directory 资源:

    gcloud config set project PROJECT_ID
    
  2. 创建环境变量以存储您的项目 ID 和项目编号:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
    
  3. 创建 Service Directory 命名空间:

    gcloud service-directory namespaces create PRIVATE_NAMESPACE --location=REGION
    
  4. 在该命名空间中创建 Service Directory 服务:

    gcloud service-directory services create PRIVATE_SERVICE \
    --namespace PRIVATE_NAMESPACE --location=REGION
    
  5. 创建环境变量来保存专用网络上的虚拟机的 IP 地址:

    export INTERNAL_IP=$(gcloud compute instances describe --zone=ZONE \
    PRIVATE_SERVICE_INSTANCE --format='get(networkInterfaces[0].networkIP)')
    
  6. 创建一个包含内部 IP 地址和端口的 Service Directory 端点:

    gcloud service-directory endpoints create PRIVATE_ENDPOINT \
    --location=REGION --namespace=PRIVATE_NAMESPACE \
    --service=PRIVATE_SERVICE \
    --network=projects/$PROJECT_NUMBER/locations/global/networks/PRIVATE_CHECK_NETWORK \
    --address=$INTERNAL_IP --port=80
    

gcloud CLI - L4 ILB

如需了解本文档中用于服务的命令, 命名空间和端点,请参阅 gcloud service-directory 命令组

您可以使用非公开拨测,通过为 L4 ILB 创建 Service Directory 资源来监控 L4 内部负载均衡器 (ILB) 的可用性。

创建新的 L4 ILB 时,您可以使用 Service Directory 提供的自动集成;如需了解详情,请参阅在 Service Directory 中配置内部负载均衡器

如果您未使用 Service Directory 提供的自动集成创建 L4 ILB,则可以通过执行以下操作来手动配置 Service Directory 资源:

  1. 将 Google Cloud CLI 配置为默认为 Google Cloud 项目, 要创建的 Service Directory 资源:

    gcloud config set project PROJECT_ID
    
  2. 创建环境变量以存储您的项目 ID 和项目编号:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
    
  3. 要允许所有拨测工具将数据传输到 L4 ILB, 启用对 ILB 的全球访问权限:

    gcloud compute forwarding-rules update ILB_FORWARDING_RULE_NAME \
    --region=ILB_REGION --allow-global-access
    

    如果 L4 ILB 不允许全球访问权限,则只有当 ILB_REGION 为以下各项之一时,正常运行时间指标才可用:

    • us-east4
    • us-central1
    • us-west1
    • europe-west1
    • southamerica-east1
    • asia-southeast1
  4. 创建 Service Directory 命名空间:

    gcloud service-directory namespaces create PRIVATE_NAMESPACE_FOR_ILB\
    --location=REGION
    
  5. 在该命名空间中创建 Service Directory 服务:

    gcloud service-directory services create PRIVATE_SERVICE_FOR_ILB \
    --namespace PRIVATE_NAMESPACE_FOR_ILB --location=REGION
    
  6. 创建环境变量来保存专用网络上的负载均衡器的 IP 地址:

    export INTERNAL_IP=$( gcloud compute forwarding-rules describe ILB_FORWARDING_RULE_NAME\
    --region=ILB_REGION --format='get(IPAddress)')
    
  7. 创建一个包含内部 IP 地址和端口的 Service Directory 端点:

    gcloud service-directory endpoints create PRIVATE_ENDPOINT_FOR_ILB \
    --location=ILB_REGION --namespace=PRIVATE_NAMESPACE_FOR_ILB \
    --service=PRIVATE_SERVICE_FOR_ILB \
    --network=projects/$PROJECT_NUMBER/locations/global/networks/PRIVATE_CHECK_NETWORK \
    --address=$INTERNAL_IP --port=80
    

向服务账号授权

拨测使用 Monitoring 拥有的服务账号 管理与 Service Directory 服务的交互。服务账号名称采用以下格式:

service-PROJECT_NUMBER@gcp-sa-monitoring-notification.iam.gserviceaccount.com

当此服务账号不存在时,Monitoring 会创建 服务账号。您 无法创建此服务账号。

当您创建专用拨测时,Monitoring 会尝试执行 来为服务账号授予两个 Service Directory 角色。 不过,当您使用该 API 时,您的 Google Cloud 项目设置可能会阻止 Monitoring 向服务账号授予角色。在这种情况下,创建正常运行时间检查会失败。

本部分介绍如何向 现有服务账号:

Google Cloud 控制台

使用 Google Cloud 控制台时,在您选择内部 IP 地址作为拨测的资源类型后,系统会提示您授权服务账号。

API:确定项目范围

如需向现有服务账号授予 Service Directory 角色,请执行以下操作:

  1. 将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:

    gcloud config set project PROJECT_ID
    
  2. 创建环境变量以存储项目 ID 和项目编号:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
    
  3. 运行以下命令:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member='serviceAccount:service-'$PROJECT_NUMBER'@gcp-sa-monitoring-notification.iam.gserviceaccount.com' \
    --role='roles/servicedirectory.viewer'
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member='serviceAccount:service-'$PROJECT_NUMBER'@gcp-sa-monitoring-notification.iam.gserviceaccount.com' \
    --role='roles/servicedirectory.pscAuthorizedService'
    

    上述命令会向服务账号授予以下角色:

    • roles/servicedirectory.viewer
    • roles/servicedirectory.pscAuthorizedService

API:受监控的项目

要将 Service Directory 角色授予 现有服务账号,请执行以下操作:

  1. 配置 gcloud CLI 以默认使用 Google Cloud 项目 将在其中创建拨测的位置:

    gcloud config set project PROJECT_ID
    
  2. 创建环境变量以存储项目 ID 和项目编号:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
    
  3. 创建环境变量来保存在其中定义了 Service Directory 服务的项目的 ID:

    export MONITORED_PROJECT_ID=MONITORED_PROJECT_ID
    

    此项目必须位于正常运行时间检查项目的指标范围内。

  4. 创建一个环境变量来保存定义网络的项目的 ID:

    export NETWORK_PROJECT_ID=NETWORK_PROJECT_ID
    

    此项目不需要在 拨测的项目

  5. 运行以下命令:

    gcloud projects add-iam-policy-binding $MONITORED_PROJECT_ID \
    --member='serviceAccount:service-'$PROJECT_NUMBER'@gcp-sa-monitoring-notification.iam.gserviceaccount.com' \
    --role='roles/servicedirectory.viewer'
    
    gcloud projects add-iam-policy-binding $NETWORK_PROJECT_ID \
    --member='serviceAccount:service-'$PROJECT_NUMBER'@gcp-sa-monitoring-notification.iam.gserviceaccount.com' \
    --role='roles/servicedirectory.pscAuthorizedService'
    

    上述命令会向服务账号授予以下角色:

    • roles/servicedirectory.viewer:配置了 Service Directory 服务的受监项目 $SERVICE_MONITORED_PROJECT_ID
    • 配置专用网络的项目 $NETWORK_PROJECT_IDroles/servicedirectory.pscAuthorizedService

配置防火墙规则

您必须创建一条防火墙规则,以允许来自路由 35.199.192.0/19 的入站 TCP 流量。从 35.199.192.0/19 的路由支持连接到 使用专用路由的转发目标。有关 请参阅 VPC 路由

Google Cloud 控制台

使用 Google Cloud 控制台时,选择内部 IP 作为 资源类型,系统会提示您配置 防火墙规则

gcloud CLI

创建允许入站 TCP 流量的防火墙规则 以便通过防火墙进行专用网络访问,请运行以下命令:

  1. 配置 gcloud CLI 以默认使用 Google Cloud 项目 将在其中创建拨测的位置:

    gcloud config set project PROJECT_ID
    
  2. 创建环境变量以存储项目 ID 和项目编号:

    export PROJECT_ID=$(gcloud config get-value core/project)
    
  3. 创建网络规则:

    gcloud compute firewall-rules create PRIVATE_CHECK_NETWORK_HOPE_RULE \
    --network="PRIVATE_CHECK_NETWORK"  \
    --action=allow   --direction=ingress   --source-ranges="35.199.192.0/19" \
    --rules=tcp   --project="$PROJECT_ID"
    

    在上一条命令中,PRIVATE_CHECK_NETWORK 是此规则应用到的网络 而 PRIVATE_CHECK_NETWORK_HOPE_RULE 是防火墙规则的名称。

有关此步骤的更多信息,请参阅 配置网络项目

限制

使用不公开的上线时间检查时,无论配置如何,SSL 证书的验证都将停用。

非公开上线情况检查不支持包含重定向的端点。

问题排查

本部分介绍您在使用非公开拨测时可能遇到的一些错误,并提供了解决这些错误的相关信息。

创建正常运行时间检查失败

您的 Google Cloud 项目设置可能会阻止修改分配给服务账号的角色,而该服务账号用于管理与服务目录服务的互动。在这种情况下,创建正常运行时间检查会失败。

本部分介绍如何向服务账号授予角色 要求:

Google Cloud 控制台

当您使用 Google Cloud 控制台创建非公开正常运行时间检查时,Google Cloud 控制台会发出命令,将 Service Directory 角色授予服务账号。

如需了解如何向服务账号授予角色, 请参阅向服务账号授权

API:确定项目范围

首次为某个集群创建专用拨测时, Service Directory 服务和专用资源 运行单个 Google Cloud 项目时 请求可能会成功或失败结果取决于您是否在项目中停用了为服务账号自动授予角色功能:

  • 如果您的项目允许为服务账号自动授予角色,则首次创建拨测会成功。系统会为您创建服务账号并授予必要的角色。

  • 如果您的项目不允许向服务账号授予自动角色授予,则首次正常运行时间检查创建会失败。系统会创建服务账号,但不会授予任何角色。

如果创建拨测失败,请执行以下操作:

  1. 向服务账号授权
  2. 请等待几分钟让系统传播授权。
  3. 尝试再次创建非公开拨测。

API:受监控的项目

首次创建以受监控的项目中的 Service Directory 服务或其他 Google Cloud 项目中的专用资源为目标的非公开拨测时,请求会失败并会创建 Monitoring 服务账号。

您授权服务账号的方式取决于您使用的 Google Cloud 项目数量及其关系。您最多可以涉及四个项目:

  • 您定义非公开拨测的项目。
  • 您配置 Service Directory 服务的受监控项目。
  • 您配置 VPC 网络的项目。
  • 虚拟机或负载平衡器等网络资源所在的项目 配置。此项目在服务账号授权中没有角色 此处讨论的。

如果首次创建拨测失败,请执行以下操作:

  1. 向服务账号授权
  2. 请等待几分钟让系统传播授权。
  3. 尝试再次创建非公开拨测。

访问遭拒

您的拨测会失败并显示 VPC_ACCESS_DENIED 结果。此结果意味着网络配置或服务账号授权的某些方面不正确。

检查服务账号授权是否使用范围 项目或受监控项目,如 拨测创建失败

如需详细了解如何访问专用网络,请参阅配置网络项目

非公开拨测的异常结果

您有一个包含多个虚拟机的 Service Directory 服务,并且您的服务配置包含多个端点。当您关停其中一个虚拟机时,拨测仍然显示成功。

如果您的服务配置包含多个端点 随机选择。如果与所选端点关联的虚拟机正在运行,即使其中一个虚拟机处于停机状态,正常运行时间检查也会成功。

默认标头

您的正常运行时间检查返回错误或意外结果。如果您替换了默认标头值,则可能会发生这种情况。

在向目标端点发送针对非公开拨测的请求时,该请求会包括以下标头和值:

标题
HTTP_USER_AGENT GoogleStackdriverMonitoring-UptimeChecks(https://cloud.google.com/monitoring)
HTTP_CONNECTION keep-alive
HTTP_HOST Service Directory 端点的 IP
HTTP_ACCEPT_ENCODING gzipdeflatebr
CONTENT_LENGTH 根据正常运行时间发布数据计算得出

如果您尝试替换这些值,则可能会发生以下情况:

  • 拨测会报告错误
  • 替换值会被丢弃,并替换为表中的值

不显示任何数据

在拨测信息中心 拨测位于与 Service Directory 服务。

确保包含拨测的 Google Cloud 项目 会监控包含 Service Directory 服务。

如需详细了解如何列出受监控项目以及如何添加其他 请参阅 为多个项目配置指标范围

后续步骤