创建非公开拨测

本文档介绍如何配置非公开拨测。通过非公开拨测,您可以在实施 Identity and Access Management (IAM) 限制和 VPC Service Controls 边界时,将 HTTP 请求发送到客户的 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 地址的拨测,请参阅创建公开拨测。如需了解如何管理和监控拨测,请参阅本文档的后续步骤部分。

准备工作

  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: Monitored project 标签页。

Google Cloud 控制台

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

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  拨测

    前往拨测

  2. 点击创建拨测

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

  3. 指定专用拨测:

    1. 选择协议,即 HTTPHTTPS。请勿为专用拨测选择 TCP

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

  4. 如果您没有为项目配置 Service Directory 服务或者想要创建 Service Directory 服务,请点击查看并完成 Private Uptime Check Preresites 窗格:

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

    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 路由

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

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

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

  6. Private Uptime Check 窗格中,填写拨测目标的说明:

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

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

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

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

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

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

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

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

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

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

  8. 点击 Continue 并配置提醒政策和通知。

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

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

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

    如果您不想创建提醒政策,请确保切换按钮的文本为 Do not create an alert

  9. 点击 Continue(继续)并完成拨测:

    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 和服务。

gcloud CLI - 虚拟机

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

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

  1. 配置 Google Cloud CLI 以默认为将在其中创建 Service Directory 资源的 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 命名空间:

    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 以默认为将在其中创建 Service Directory 资源的 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. 如需允许所有正常运行时间检查工具将数据转移到您的 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

如果您的 Google Cloud 项目包含通知渠道,则该服务帐号已存在。如果服务帐号不存在,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'
    

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

    • 针对配置了 Service Directory 服务的受监控项目的 roles/servicedirectory.viewer 权限,即 $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 项目。

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

后续步骤