本文档介绍如何配置非公开拨测。通过非公开拨测,您可以在实施 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 地址的拨测,请参阅创建公开拨测。如需了解如何管理和监控拨测,请参阅本文档的后续步骤部分。
准备工作
启用以下 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 控制台
在 Google Cloud 控制台中,选择要为其启用该 API 的 Google Cloud 项目,然后转到 API 和服务页面:
点击启用 API 和服务按钮。
搜索“Monitoring”。
在搜索结果中,点击“Stackdriver Monitoring API”。
如果显示“API 已启用”,则表示此 API 已启用。如果未显示,请点击启用。
gcloud CLI
如果您尚未在工作站上安装 Google Cloud CLI,请参阅安装 gcloud CLI。
如需查看是否已启用 Monitoring API,请在将 PROJECT_ID 替换为要为其启用该 API 的项目的 ID 后在工作站上运行以下命令:
gcloud services list --project=PROJECT_ID
如果输出中显示
monitoring.googleapis.com
,则表示已启用 API。如果未启用该 API,请运行以下命令启用它。
gcloud services enable monitoring --project=PROJECT_ID
如需了解详情,请参阅
gcloud services
。
您可以使用相同的步骤启用其他 API:
- 如需使用 Google Cloud 控制台,请搜索显示名称,例如“Service Directory API”。
- 如需使用 gcloud CLI,请指定
googleapis.com
名称的第一个元素,例如servicedirectory
。
- Cloud Monitoring API:
配置您要用于接收通知的通知渠道。我们建议您创建多种类型的通知渠道。如需了解详情,请参阅创建和管理通知渠道。
配置专用网络,并配置虚拟机或 ILB 以访问该专用网络。如需了解详情,请参阅专用服务访问通道。
针对 ILB 的专用检查仅限于具有正常运行时间检查工具的区域。拨测区域
USA
包含USA_OREGON
、USA_IOWA
和USA_VIRGINIA
区域。每个USA_*
区域都有一个检查工具,USA
包含所有三个检查工具。其他拨测区域EUROPE
、SOUTH_AMERICA
和ASIA_PACIFIC
各有一个拨测工具。 如需移除此限制,您必须配置对负载均衡器的全球访问权限。如需详细了解如何配置全球访问权限,请参阅本文档配置 Service Directory 资源部分中的 ILB 标签页。如果您计划检查不允许全球访问权限的 ILB,请为 ILB 选择以下某个区域:
us-east4
us-central1
us-west1
europe-west1
southamerica-east1
asia-southeast1
确定要使用的接口:
Google Cloud 控制台:可让您在虚拟机处理请求时创建正常运行时间检查。此界面会引导您配置 Service Directory 资源、授权服务账号以及配置网络防火墙规则。
命令行界面:您可以在 ILB 和虚拟机处理请求时使用 Google Cloud CLI 和 Cloud Monitoring API 创建非公开拨测。
如果您打算使用命令行配置非公开拨测,请完成前提步骤。
创建非公开拨测
本部分介绍了如何创建和配置 Service Directory 服务的专用拨测:
如需使用 Google Cloud 控制台,请选择 Google Cloud 控制台标签页。
如需使用 Cloud Monitoring API 并将 Service Directory 服务配置为与正常运行时间检查位于同一 Google Cloud 项目中,请选择 API 范围划定项目标签页。
如需使用 Cloud Monitoring API 并将 Service Directory 服务配置为位于受正常运行时间检查项目的指标范围监控的项目中,请选择 API:受监控的项目标签页。
Google Cloud 控制台
如需使用 Google Cloud 控制台创建正常运行时间检查,请执行以下操作:
-
在 Google Cloud 控制台中,前往 拨测页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
点击创建拨测。
指定非公开拨测:
选择协议,可以是 HTTP、HTTPS 或 TCP。
选择内部 IP 资源类型。
如果您尚未为项目配置 Service Directory 服务,或者您想创建 Service Directory 服务,请点击查看,然后填写非公开拨测前提条件窗格:
如果系统提示,请启用 Compute Engine API 或 Service Directory API。启用 API 可能需要一分钟才能完成。
展开 arrow_drop_down Service Account(服务账号,如果显示),然后点击 Create Service Account(创建服务账号)。
如果监控服务账号不存在,系统会创建一个。然后,Monitoring 向该服务账号授予两个 Service Directory 角色。
展开 arrow_drop_down Service Directory 菜单,然后执行以下操作:
- 展开 arrow_drop_down Region(区域),然后选择处理请求的虚拟机所在的区域。
- 展开 arrow_drop_down Namespace(命名空间),然后选择一个现有的 Service Directory 命名空间,或点击 Create Namespace(创建命名空间)并创建一个命名空间。
- 点击服务名称,然后输入服务名称。服务是非公开拨测的目标。
- 点击端点名称,然后输入端点名称。端点是一对 IP 地址和端口值,可供服务用来处理请求。如果您的服务包含多个端点,系统会随机选择一个端点。
- 展开 arrow_drop_down Network(网络),然后选择您的专用网络。
- 展开 arrow_drop_down Instance(实例),然后选择正在处理请求的私有网络上的虚拟机。选择实例后,系统会显示其内部 IP 地址。
- 点击完成。
展开 arrow_drop_down 防火墙规则:
展开 arrow_drop_down Network(网络),然后选择网络规则所附加的网络。
点击创建防火墙规则。
该防火墙规则允许来自路由 35.199.192.0/19 的入站 TCP 流量。从 35.199.192.0/19 出发的路由支持连接到使用专用路由的转发目标。如需了解详情,请参阅 VPC 路由。
在非公开正常运行时间检查窗格中,如需指定要使用的 Service Directory 服务,请执行以下操作之一:
选择使用完全限定服务名称,然后输入服务的完全限定名称:
projects/SERVICE_DIRECTORY_PROJECT_ID/locations/REGION/namespaces/PRIVATE_NAMESPACE/services/PRIVATE_SERVICE
使用菜单选择区域、命名空间和服务。如果您创建了服务,系统会为您选择这些字段。
在 Private Uptime Check 窗格中,填写正常运行时间检查目标的说明:
可选:输入请求的路径组件。
使用 HTTP 或 HTTPS 协议的专用正常运行时间检查会向
http://target/path
发送请求。在此表达式中,target
是在 Service Directory 端点中配置的内部 IP 地址。如果您将路径字段留空或将值设置为
/
,则将向http://target/
发出请求。可选:如需设置正常运行时间检查的执行频率,请使用检查频率字段。
可选:如需选择检查工具区域,或为 HTTP 和 HTTPS 检查配置身份验证、标头和其他值,请点击更多目标选项:
- 区域:选择正常运行时间检查将从中接收请求的区域。正常运行时间检查必须至少有 3 个检查工具。除美国有 3 个拨测工具外,其他所有区域都只有 1 个拨测工具。默认设置全球包括所有区域。
- 请求方法:选择
GET
或POST
。 - 正文:对于 HTTP
POST
检查,请输入网址编码的正文:您必须自己进行编码。对于所有其他检查,请将此字段留空。 - 主机标头:配置专用正常运行时间检查时,请勿设置此字段。
- 端口:您在此处设置的任何值都会替换 Service Directory 端点配置中的端口。如果您想使用端点配置,请勿在此处设置值。
- 自定义标头:提供自定义标头,并可选择对其进行加密。加密后表单中标头的值会被隐藏。 对您不想向他人显示的身份验证相关标头使用加密。
- Authentication:提供一个用户名和密码。这些值将作为 Authorization 标头发送。如果您在此处设置了值,请不要另外再设置 Authorization 标头;如果您设置了 Authorization 标头,则不要在此处设置值。密码将始终隐藏在表单中。
点击继续,然后配置响应要求。 本部分中的所有设置均采用默认值:
如需为正常运行时间检查设置超时期限,请使用响应超时字段。如果在此期限内未收到多个位置的响应,则正常运行时间检查会失败。
如需配置拨测以执行内容匹配,请确保切换标签为已启用内容匹配功能:
- 从选项菜单中选择响应内容匹配类型。此字段用于确定如何将响应内容与返回的数据进行比较。例如,假设响应内容为
abcd
且内容匹配类型为包含。只有在响应数据包含abcd
时,正常运行时间检查才会成功。如需了解详情,请参阅验证响应数据。 - 输入响应内容。响应内容必须是长度不超过 1024 个字节的字符串。在 API 中,此字段是
ContentMatcher
对象。
- 从选项菜单中选择响应内容匹配类型。此字段用于确定如何将响应内容与返回的数据进行比较。例如,假设响应内容为
为了防止由于拨测而创建日志条目,请清除日志检查失败。
对于 HTTP 拨测,请配置可接受的响应代码。默认情况下,HTTP 拨测会将任何
2xx
响应标记为成功响应。
点击继续,然后配置提醒政策和通知。
如需在正常运行时间检查失败时收到通知,请创建提醒政策并为该政策配置通知渠道:
- 可选:更新提醒政策的名称。
- 可选:在时长字段中,选择拨测必须失败多长时间才发送通知。默认情况下,当至少两个区域报告正常运行时间检查失败的时长达到 1 分钟时,系统会发送通知。
在标记为通知渠道的框中,展开 arrow_drop_down Menu,选择要添加的渠道,然后点击 OK。
在菜单中,系统会针对每种渠道类型按字母顺序将通知渠道分组。
如果您不想创建提醒政策,请确保切换按钮对应的文本为不创建提醒。
点击继续,完成正常运行情况检查:
为正常运行时间检查输入一个描述性标题。
可选:如需向正常运行时间检查添加用户定义的标签,请执行以下操作:
- 点击 expand_more 显示用户标签。
- 在键字段中,输入标签的名称。
标签名称必须以小写字母开头,可以包含小写字母、数字、下划线和短划线。例如,输入
severity
。 - 在值字段中,输入标签的值。标签值可以包含小写字母、数字、下划线和短划线。例如,输入
critical
。 - 对于每个其他标签,请点击添加用户标签,然后输入标签的键和值。
要验证您的正常运行时间检查配置,请点击测试。 如果结果与您的预期不符,请参阅问题排查,更正您的配置,然后重复验证步骤。
点击创建。
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_CHECKERS
的checker_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 项目中时创建非公开正常运行时间检查,请执行以下操作:
为 gcloud CLI 设置默认 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建一个环境变量来存储您的项目 ID:
export PROJECT_ID=$(gcloud config get-value core/project)
创建环境变量来保存访问令牌:
export TOKEN=`gcloud auth print-access-token`
使用
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_CHECKERS
的checker_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 项目中时创建非公开正常运行时间检查,请执行以下操作:
将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建一个环境变量来存储您的项目 ID:
export PROJECT_ID=$(gcloud config get-value core/project)
创建一个环境变量来存储在其中定义了 Service Directory 服务的 Google Cloud 项目的 ID:
export MONITORED_PROJECT_ID=MONITORED_PROJECT_ID
此项目必须位于正常运行时间检查项目的指标范围内。
创建环境变量来保存访问令牌:
export TOKEN=`gcloud auth print-access-token`
使用
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 控制台会引导您完成所有前提步骤。
如果您打算使用命令行配置非公开拨测,则必须先完成以下步骤,然后才能创建拨测:
配置 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 资源,请执行以下操作:
将 Google Cloud CLI 配置为默认使用要创建 Service Directory 资源的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建环境变量以存储您的项目 ID 和项目编号:
export PROJECT_ID=$(gcloud config get-value core/project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
创建 Service Directory 命名空间:
gcloud service-directory namespaces create PRIVATE_NAMESPACE --location=REGION
在该命名空间中创建 Service Directory 服务:
gcloud service-directory services create PRIVATE_SERVICE \ --namespace PRIVATE_NAMESPACE --location=REGION
创建环境变量来保存专用网络上的虚拟机的 IP 地址:
export INTERNAL_IP=$(gcloud compute instances describe --zone=ZONE \ PRIVATE_SERVICE_INSTANCE --format='get(networkInterfaces[0].networkIP)')
创建一个包含内部 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 资源:
将 Google Cloud CLI 配置为默认使用要创建 Service Directory 资源的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建环境变量以存储您的项目 ID 和项目编号:
export PROJECT_ID=$(gcloud config get-value core/project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
如需允许所有正常运行时间检查工具将数据传输到 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
创建 Service Directory 命名空间:
gcloud service-directory namespaces create PRIVATE_NAMESPACE_FOR_ILB\ --location=REGION
在该命名空间中创建 Service Directory 服务:
gcloud service-directory services create PRIVATE_SERVICE_FOR_ILB \ --namespace PRIVATE_NAMESPACE_FOR_ILB --location=REGION
创建环境变量来保存专用网络上的负载均衡器的 IP 地址:
export INTERNAL_IP=$( gcloud compute forwarding-rules describe ILB_FORWARDING_RULE_NAME\ --region=ILB_REGION --format='get(IPAddress)')
创建一个包含内部 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 会尝试向该服务账号授予两个 Service Directory 角色。不过,在您使用该 API 时,您的 Google Cloud 项目设置可能会阻止 Monitoring 向服务账号授予角色。在这种情况下,创建正常运行时间检查会失败。
本部分介绍了如何向现有服务账号授予所需的角色:
Google Cloud 控制台
使用 Google Cloud 控制台时,在您选择内部 IP 地址作为拨测的资源类型后,系统会提示您授权服务账号。
API:确定项目范围
如需向现有服务账号授予 Service Directory 角色,请执行以下操作:
将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建环境变量以存储项目 ID 和项目编号:
export PROJECT_ID=$(gcloud config get-value core/project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
运行以下命令:
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 角色,请执行以下操作:
将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建环境变量以存储项目 ID 和项目编号:
export PROJECT_ID=$(gcloud config get-value core/project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='get(projectNumber)')
创建环境变量来保存在其中定义了 Service Directory 服务的项目的 ID:
export MONITORED_PROJECT_ID=MONITORED_PROJECT_ID
此项目必须位于正常运行时间检查项目的指标范围内。
创建一个环境变量来保存定义了影音平台的项目的 ID:
export NETWORK_PROJECT_ID=NETWORK_PROJECT_ID
此项目不需要位于正常运行时间检查项目的指标范围内。
运行以下命令:
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_ID
的roles/servicedirectory.pscAuthorizedService
。
配置防火墙规则
您必须创建一条防火墙规则,以允许来自路由 35.199.192.0/19 的入站 TCP 流量。从 35.199.192.0/19 出发的路由支持连接到使用专用路由的转发目标。如需了解详情,请参阅 VPC 路由。
Google Cloud 控制台
使用 Google Cloud 控制台时,在您选择内部 IP 地址作为拨测的资源类型后,系统会提示您配置防火墙规则。
gcloud CLI
如需创建一条允许入站 TCP 流量通过防火墙以实现专用网络访问的防火墙规则,请运行以下命令:
将 gcloud CLI 配置为默认使用要创建正常运行时间检查的 Google Cloud 项目:
gcloud config set project PROJECT_ID
创建环境变量以存储项目 ID 和项目编号:
export PROJECT_ID=$(gcloud config get-value core/project)
创建网络规则:
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 服务和专用资源创建非公开正常运行时间检查时,请求可能会成功或失败。结果取决于您是否在项目中停用了为服务账号自动授予角色功能:
如果您的项目允许为服务账号自动授予角色,则首次创建拨测会成功。系统会为您创建服务账号并授予必要的角色。
如果您的项目不允许向服务账号授予自动角色授予,则首次正常运行时间检查创建会失败。系统会创建服务账号,但不会授予任何角色。
如果创建拨测失败,请执行以下操作:
- 向服务账号授权。
- 请等待几分钟让系统传播授权。
- 尝试再次创建非公开拨测。
API:受监控的项目
首次创建以受监控的项目中的 Service Directory 服务或其他 Google Cloud 项目中的专用资源为目标的非公开拨测时,请求会失败并会创建 Monitoring 服务账号。
您授权服务账号的方式取决于您使用的 Google Cloud 项目数量及其关系。您最多可以涉及四个项目:
- 您定义非公开拨测的项目。
- 您配置 Service Directory 服务的受监控项目。
- 您配置 VPC 网络的项目。
- 配置虚拟机或负载平衡器等网络资源的项目。此项目在本文所述的服务账号授权中没有任何作用。
如果首次创建拨测失败,请执行以下操作:
- 向服务账号授权。
- 请等待几分钟让系统传播授权。
- 尝试再次创建非公开拨测。
访问遭拒
您的拨测会失败并显示 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 |
gzip 、deflate 、br |
CONTENT_LENGTH |
根据正常运行时间发布数据计算得出 |
如果您尝试替换这些值,则可能会发生以下情况:
- 拨测会报告错误
- 替换值会被丢弃,并替换为表中的值
没有显示数据
如果您的正常运行时间检查所在的 Google Cloud 项目与 Service Directory 服务所在的项目不同,您在正常运行时间检查信息中心内不会看到任何数据。
确保包含正常运行时间检查的 Google Cloud 项目监控包含 Service Directory 服务的 Google Cloud 项目。
如需详细了解如何列出受监控的项目并添加其他项目,请参阅为多个项目配置指标范围。