创建非公开拨测

本文档介绍如何配置非公开拨测。通过非公开拨测,您可以在实施 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 控制台或 API 设置专用网络并为其配置 Service Directory 资源。这些 API 示例假定专用网络和 Service Directory 服务位于拨测的范围限定项目中。不过,创建专用拨测还介绍了如何使用 API 创建在指标范围内使用 Service Directory 服务的拨测。

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

此功能仅适用于 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。

准备工作

  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 控制台中,选择要为其启用该 API 的 Google Cloud 项目,然后前往 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 服务配置为与拨测位于同一 Google Cloud 项目,请选择 API:范围限定项目标签页。

  • 如需使用 Cloud Monitoring API 并将 Service Directory 服务配置为位于受拨测项目的指标范围监控的项目中,请选择 API:受监控的项目标签页。

Google Cloud 控制台

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

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

    前往拨测

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

  2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
  3. 点击创建拨测

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

  4. 指定非公开拨测:

    1. 选择协议,可以是 HTTPHTTPSTCP

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

  5. 如果您的项目尚未配置 Service Directory 服务,或者您想要创建 Service Directory 服务,请点击查看,然后完成非公开拨测前提条件窗格:

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

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

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

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

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

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

      2. 点击创建防火墙规则

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

  6. 非公开拨测窗格中,如需指定要使用的 Service Directory 服务,请执行以下操作之一:

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

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

  7. 非公开拨测窗格中,完成对拨测目标的说明:

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

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

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

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

    3. 可选:要选择检查工具区域,或为 HTTP、HTTPS 检查配置身份验证、标头和其他值,请点击更多目标选项

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

    • 如需设置拨测的超时期限,请使用响应超时字段。如果在此期限内未收到多个位置的响应,则拨测会失败。

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

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

    • 对于 HTTP 拨测,请配置可接受的响应代码。默认情况下,HTTP 拨测会将任何 2xx 响应标记为成功响应。

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

    如需在拨测失败时收到通知,请创建提醒政策并为该政策配置通知渠道

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

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

    如果您不想创建提醒政策,请确保切换按钮对应的文本为不创建提醒

  10. 点击继续并完成拨测:

    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 控制台配置这些资源。使用控制台时,配置步骤包含在创建拨测对话框中。

Google Cloud 控制台

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

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
    • roles/servicedirectory.pscAuthorizedService,用于配置专用网络的项目,即 $NETWORK_PROJECT_ID

配置防火墙规则

您必须创建一条防火墙规则,以允许来自 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 项目设置可能禁止修改分配给服务账号的角色,而拨测正是使用该服务账号来管理与 Service Directory 服务的互动。 在这种情况下,拨测创建会失败。

本部分介绍如何授予服务账号所需的角色:

Google Cloud 控制台

当您使用 Google Cloud 控制台创建非公开拨测时, Google Cloud 控制台会发出命令,以向服务账号授予 Service Directory 角色。

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

API:确定项目范围

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

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

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

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

  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 项目中时,您不会在拨测信息中心内看到任何数据。

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

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

后续步骤