创建健康检查

Google Cloud 提供的健康检查机制可确定后端实例是否能够正确响应流量。本文档介绍如何为负载均衡器和 Traffic Director 创建和使用健康检查。

本页面假定您熟悉以下概念:

健康检查类别、协议和端口

Google Cloud 按类别和协议组织健康检查。

健康检查分为两种类别,即健康检查旧式健康检查。每种健康检查类别都支持一组不同的协议,并且都允许指定用于执行健康检查的端口。

Traffic Director 和大多数负载均衡器使用非旧版健康检查,但是基于目标池的网络负载均衡要求使用旧版健康检查。如需了解如何确定适当的类别、协议以及如何指定适当的端口,请参阅健康检查概览页面中的选择健康检查

您为健康检查选择的协议不必与负载均衡器本身使用的协议匹配,在某些情况下,两者也不能相同。如需了解详情,请参阅协议和负载均衡器

“健康检查”一词不代指旧式健康检查。在本文中,我们会用术语“旧式健康检查”来明确指明此类检查。

列出健康检查

控制台

  1. 转到 Google Cloud 控制台中的“健康检查”页面。
    转到“健康检查”页面
  2. 点击一项健康检查即可查看其详情。

gcloud

如需列出健康检查,请使用 compute health-checks list 命令:

  • 如需列出全球健康检查,请执行以下操作:

    gcloud compute health-checks list \
       --global
    
  • 列出区域性健康检查:将 REGION_LIST 替换为要查询的 Google Cloud 区域的英文逗号分隔列表。

    gcloud compute health-checks list \
       --regions=REGION_LIST
    

在了解健康检查的名称和范围后,请使用 compute health-checks describe 命令查看其当前配置。

  • 如需描述全球健康检查,请将 NAME 替换为其名称。

    gcloud compute health-checks describe NAME \
       --global
    
  • 如需描述区域性健康检查,请将 NAMEREGION 分别替换为其名称和区域。

    gcloud compute health-checks describe NAME \
       --region=REGION
    

API

如需列出健康检查,请使用以下 API 调用:

如需描述健康检查的当前配置,请使用以下 API 调用:

创建健康检查

当您在 Google Cloud 中完成负载均衡器的后端配置时,控制台允许您创建或选择健康检查。

您还可以在控制台中创建与负载均衡器配置无关的健康检查。如果您需要首先创建运行状况检查,或者需要将一项运行状况检查用于多个负载均衡器,这将非常有用。您可以使用控制台、Google Cloud CLI 或 REST API 创建健康检查。

控制台

  1. 转到 Google Cloud 控制台中的“健康检查”页面。
    转到“健康检查”页面
  2. 点击创建健康检查
  3. 在“创建健康检查”页面上,提供以下信息:
    • 名称:提供健康检查的名称。
    • 说明:提供说明(可选)。
    • 范围:选择全球级区域级具体取决于负载均衡器的类型
      • 如果选择区域级,请从下拉列表中选择区域
    • 协议:选择一项健康检查协议
    • 端口:提供端口号。在控制台中创建健康检查时,您必须使用端口号指定端口
    • 代理协议:您可以选择在健康检查探测系统发出的请求中附加一个代理标头。
    • 请求路径和响应 (Request path and Response):对于 HTTP、HTTPS 和 HTTP2 协议,您可以选择提供可供健康检查探测系统联系的网址路径。如需了解详情,请参阅用于 HTTP、HTTPS 和 HTTP/2 健康检查的额外标志
    • 请求响应:对于 TCP 和 SSL 协议,您可以指定要发送的 ASCII 文本字符串和预期的文本响应字符串。如需了解详情,请参阅用于 SSL 和 TCP 健康检查的额外标志
    • 检查间隔:定义从一次探测开始到下一次探测开始之间的时间。
    • 超时:定义 Google Cloud 等待探测响应的时间。其值必须小于或等于检查间隔时间。
    • 状况良好判断阈值:定义要将虚拟机实例视为运行状况良好所必须成功的连续探测次数。
    • 状况不佳判断阈值:定义要将虚拟机实例视为运行状况不佳所必须失败的连续探测次数。
  4. 点击创建

gcloud

  • 如需创建全球健康检查,请使用适当的 compute health-checks create 命令:

    gcloud compute health-checks create PROTOCOL NAME \
        --global \
        --description=DESCRIPTION \
        --check-interval=CHECK_INTERVAL \
        --timeout=TIMEOUT \
        --healthy-threshold=HEALTHY_THRESHOLD \
        --unhealthy-threshold=UNHEALTHY_THRESHOLD \
        PORT_SPECIFICATION \
        ADDITIONAL_FLAGS
    
  • 如需创建区域性健康检查,请使用适当的 compute health-checks create 命令:

    gcloud compute health-checks create PROTOCOL NAME \
        --region=REGION \
        --description=DESCRIPTION \
        --check-interval=CHECK_INTERVAL \
        --timeout=TIMEOUT \
        --healthy-threshold=HEALTHY_THRESHOLD \
        --unhealthy-threshold=UNHEALTHY_THRESHOLD \
        PORT_SPECIFICATION \
        ADDITIONAL_FLAGS
    

替换以下内容:

  • PROTOCOL 定义用于健康检查的协议。有效选项包括 grpchttphttpshttp2ssltcp
  • NAME 是健康检查的名称。在给定项目中:每个全球健康检查都必须具有唯一的名称,而区域性健康检查在给定区域内必须具有唯一的名称。
  • REGION:除了区域级外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器之外,其他所有负载均衡器都使用全球健康检查 (--global)。内部 HTTP(S) 负载均衡器使用区域性健康检查,其区域必须与后端服务的区域匹配。
  • DESCRIPTION 是可选说明。
  • CHECK_INTERVAL 是从一次健康检查探测系统的连接开始到下一次相应连接开始之间的时间。该时间以秒为单位。如果省略,Google Cloud 使用的值为 5s(5 秒)。
  • TIMEOUT 是 Google Cloud 等待探测响应的时间量。TIMEOUT 的值必须小于或等于 CHECK_INTERVAL。该时间以秒为单位。如果省略,Google Cloud 使用的值为 5s(5 秒)。
  • HEALTHY_THRESHOLDUNHEALTHY_THRESHOLD 指定虚拟机实例被视为运行状况良好或运行状况不佳所必须成功或失败的连续探测次数。如果省略了其中任何一项,Google Cloud 使用的默认阈值为 2
  • PORT_SPECIFICATION:使用端口指定标志之一定义端口指定方式。
  • ADDITIONAL_FLAGS 是用于指定 PROTOCOL 特定端口和选项的其他标志。请参阅用于 HTTP、HTTPS 和 HTTP/2 健康检查的额外标志用于 SSL 和 TCP 健康检查的额外标志用于 gRPC 健康检查的额外标志

API

修改健康检查

您无法通过修改健康检查将其转换为旧式健康检查(反之亦然)。此外,您也无法更改健康检查的名称或范围(例如,将范围从全球更改为区域)。

控制台

  1. 转到 Google Cloud 控制台中的“健康检查”页面。
    转到“健康检查”页面
  2. 点击一项健康检查即可查看其详情。
  3. 如果您需要修改一项健康检查,请点击修改,然后执行以下操作:
    • 根据需要更改其参数。
    • 点击保存

gcloud

  1. 确定健康检查的名称和范围。如需了解相关说明,请参阅列出健康检查

  2. 除了健康检查的名称、协议和范围之外,您可以修改任何通用标志端口指定标志可选标志。如需修改现有健康检查,请使用适当的 compute health-checks update 命令。对于您省略的标志,系统将保留预配置的设置。

    • 全球健康检查的修改示例:以下命令通过更改检查间隔、超时和请求路径来修改一个名为 hc-http-port-80 的全球 HTTP 健康检查:

      gcloud compute health-checks update http hc-http-port-80 \
          --global \
          --check-interval=20s \
          --timeout=15s \
          --request-path="/health"
      
    • 区域性健康检查的修改示例:以下命令通过更改端口指定方式来修改 us-west1 中一个名为 hc-west1-tcp-ldap 的区域性 TCP 健康检查:

      gcloud compute health-checks update tcp hc-west1-tcp-ldap \
          --region=us-west1 \
          --port=631
      

API

  1. 确定健康检查的名称和范围。如需了解相关说明,请参阅列出健康检查

  2. 除了健康检查的名称、协议和范围之外,您可以使用以下 API 调用修改任何通用标志端口指定标志可选标志。使用 patch API 调用来保留请求中未明确设置的任何预配置设置。

额外的标志

本部分介绍了在创建或修改健康检查时可以使用的额外标志。某些标志(例如端口指定)必须使用 gcloud 或 API 进行设置。

端口指定标志

如果您使用 Google Cloud CLI 或 API 创建健康检查,可以通过两个选项来指定健康检查的端口。下表展示了各种有效的负载均衡器和后端组合所对应的端口指定选项。“实例组”一词指的是非代管式实例组、可用区代管式实例组或区域代管式实例组。

每个健康检查只能使用一种类型的端口指定方式。

产品 后端类型 端口指定选项
网络负载均衡器 实例组 --port:按编号指定 TCP 端口(从 165535
对于与网络负载均衡器关联的健康检查,--use-serving-port 标志将被忽略,因为网络负载均衡器的后端服务没有端口指定机制。
内部 TCP/UDP 负载均衡器 实例组 --port:按编号指定 TCP 端口(从 165535
对于与内部 TCP/UDP 负载均衡器关联的健康检查,--use-serving-port 标志将被忽略,因为内部 TCP/UDP 负载均衡器的后端服务没有端口指定机制。
内部 HTTP(S) 负载均衡器

外部 TCP 代理负载均衡器

内部区域 TCP 代理负载均衡器预览版

外部 SSL 代理负载均衡器

全球外部 HTTP(S) 负载均衡器

区域外部 HTTP(S) 负载均衡器

Traffic Director
可用区级 NEG --port:按编号指定 TCP 端口(从 165535
--use-serving-port:使用网络端点组中每个端点的端口。
实例组 --port:按编号指定 TCP 端口(从 165535
--use-serving-port:使用后端服务订阅的相同实例组已命名端口。

如果您省略端口指定方式,Google Cloud 会使用以下默认值:

  • 如果健康检查的协议是 TCPHTTP,则它使用 --port=80
  • 如果健康检查的协议是 SSLHTTPSHTTP2,则它使用 --port=443
  • 如果健康检查的协议为 GRPC,则没有隐含的默认值;您必须添加端口指定方式。

用于 HTTP、HTTPS 和 HTTP/2 健康检查的额外标志

除了通用的标志和端口指定方式之外,您还可以为 HTTP、HTTPS 和 HTTP/2 健康检查使用以下可选标志。此示例使用端口 80 及默认间隔、超时和健康状况阈值条件来创建名为 hc-http-port-80 的 HTTP 健康检查。

gcloud compute health-checks create HTTP_PROTOCOL hc-http-port-80 \
    COMMON_FLAGS \
    PORT_SPECIFICATION \
    --host=HOST \
    --proxy-header=PROXY_HEADER \
    --request-path=REQUEST_PATH \
    --response=RESPONSE
  • HTTP_PROTOCOL:可以是 http(不使用 TLS 的 HTTP/1.1)、https(使用 TLS 的 HTTP/1.1)或 http2(使用 TLS 的 HTTP/2)。
  • COMMON_FLAGS:定义通用标志。请参阅创建过程
  • PORT_SPECIFICATION:使用端口指定标志之一定义端口指定方式。
  • HOST 允许您提供 Host HTTP 标头。如果省略,系统会使用负载均衡器的转发规则的 IP 地址。
  • PROXY_HEADER 必须是 NONEPROXY_V1 中的一个。如果省略,Google Cloud 会使用 NONEPROXY_V1 的值会添加标头 PROXY UNKNOWN\r\n
  • REQUEST_PATH 指定在发送健康检查请求时 Google Cloud 使用的网址路径。如果省略,则健康检查请求将发送到 /
  • RESPONSE 定义可选的预期响应。响应字符串必须符合以下规则:
    • 响应字符串必须包含 ASCII 字母、数字和空格。
    • 响应字符串的长度最多为 1024 个字符。
    • 支持通配符匹配。
    • 基于内容的检查不支持反转;例如,不支持 HAProxy 中的 ! 之类的运算符。

如果 Google Cloud 在接收到的响应正文的前 1024 字节中的任意位置找到了预期响应字符串,且 HTTP 状态为 200 (OK),则视为探测成功。

--request-path--response 标志修改健康检查探测的成功标准

用于 SSL 和 TCP 健康检查的额外标志

除了通用标志和端口指定方式之外,您还可以为 SSL 和 TCP 健康检查使用下面介绍的可选标志。此示例使用端口 3268 及默认间隔、超时和健康状况阈值条件来创建名为 hc-tcp-3268 的 TCP 健康检查。

gcloud compute health-checks create tcp hc-tcp-3268 \
    COMMON_FLAGS \
    PORT_SPECIFICATION \
    --proxy-header=PROXY_HEADER \
    --request=REQUEST_STRING \
    --response=RESPONSE_STRING
  • 协议可以是 tcp(如此示例中所示),也可以是 ssl
  • COMMON_FLAGS:定义通用标志。请参阅创建过程
  • PORT_SPECIFICATION:使用端口指定标志之一定义端口指定方式。
  • PROXY_HEADER 必须是 NONEPROXY_V1 中的一个。如果省略,Google Cloud 会使用 NONEPROXY_V1 的值会添加标头 PROXY UNKNOWN\r\n
  • REQUEST_STRING:您可以提供最长 1024 个 ASCII 字符的字符串,以便在建立 TCP 或 SSL 会话后发送。
  • RESPONSE_STRING:您可以提供最长 1024 个 ASCII 字符的字符串作为预期响应。

--request--response 标志修改健康检查探测的成功标准。如果您使用了 --response 标志,无论是单独使用还是与 --request 标志结合使用,返回的响应都必须与预期响应字符串完全匹配。

用于 gRPC 健康检查的额外标志

您的后端 gRPC 服务器必须实现 gRPC 健康状况服务(如 gRPC 健康检查协议中所述)。Google Cloud 通过调用您的后端运行状况服务的 Check 方法向您的后端发送 HealthCheckRequest 消息。除非指定了 gRPC 服务名称,否则请求中的服务参数会被设置为空字符串。

gRPC 健康检查可以检查 gRPC 服务的状态。您可以添加一个字符串(最多 1024 个 ASCII 字符),即在后端虚拟机或 NEG 上运行的特定 gRPC 服务的名称。为此,请为 gRPC 健康检查使用以下可选标志:

--grpc-service-name=GRPC_SERVICE_NAME

例如,您可能拥有后端服务器向后端的 gRPC 运行状况服务注册的服务和状态。

  • MyPackage.ServiceA,服务状态为 SERVING
  • MyPackage.ServiceB,服务状态为 NOT_SERVING
  • 空服务名称,服务状态为 NOT_SERVING

如果您针对 MyPackage.ServiceA 创建健康检查(如下所示),健康检查探测会返回 HEALTHY,因为服务的状态为 SERVING

gcloud beta compute health-checks create grpc MyGrpcHealthCheckServiceA \
    --grpc-service-name=MyPackage.ServiceA

如果您针对 MyPackage.ServiceB 创建健康检查,健康检查探测会返回 UNHEALTHY,因为服务的状态为 NOT_SERVING

如果您针对未向 gRPC 健康状况服务注册的 MyPackage.ServiceC 创建健康检查,健康检查探测会返回 gRPC 状态 NOT_FOUND,这相当于 UNHEALTHY

如果您针对空服务名称创建健康检查,健康检查探测会返回状态 UNHEALTHY,因为空服务名称注册状态为 NOT_SERVING

旧式健康检查

本部分介绍如何列出、创建和修改旧版 HTTP 健康检查以及旧版 HTTPS 健康检查。

如果旧版健康检查探测收到的响应是 HTTP 200 OK,则探测被视为成功。所有其他 HTTP 响应代码(包括重定向 301302)均被视为运行状况不佳。

列出旧版健康检查

控制台

  1. 转到 Google Cloud 控制台中的“健康检查”页面。
    转到“健康检查”页面
  2. 点击一项旧式健康检查即可查看其详情。

gcloud

  1. 如需列出旧式 HTTP 健康检查,请使用 compute http-health-checks list 命令:

    gcloud compute http-health-checks list
    

    如需列出旧式 HTTPS 健康检查,请使用 compute https-health-checks list 命令:

    gcloud compute https-health-checks list
    
  2. 如需描述旧式 HTTP 健康检查,请使用 compute http-health-checks describe 命令,并将 NAME 替换为其名称。

    gcloud compute http-health-checks describe NAME
    

    如需描述旧式 HTTPS 健康检查,请使用 compute https-health-checks describe 命令,并将 NAME 替换为其名称。

    gcloud compute https-health-checks describe NAME
    

API

  1. 如需列出旧式健康检查,请执行以下操作:

  2. 如需描述旧式健康检查,请执行以下操作:

创建旧式健康检查

控制台

虽然控制台的健康检查页面同时列出了健康检查和旧式健康检查并允许您进行修改,但您无法从控制台的健康检查页面创建新的旧式健康检查。

只有创建基于目标池的网络负载均衡器时,才能在控制台中创建旧式健康检查。如需自行创建旧式健康检查,请使用本部分的 gcloud 或 API 指令。

gcloud

如需创建旧式健康检查,请使用 compute http-health-checks create 命令:

gcloud compute LEGACY_CHECK_TYPE create NAME \
    --description=DESCRIPTION \
    --check-interval=CHECK_INTERVAL \
    --timeout=TIMEOUT \
    --healthy-threshold=HEALTHY_THRESHOLD \
    --unhealthy-threshold=UNHEALTHY_THRESHOLD \
    --host=HOST \
    --port=PORT \
    --request-path=REQUEST_PATH

替换以下内容:

  • LEGACY_CHECK_TYPE 是旧式 HTTP 健康检查的 http-health-checks 或旧式 HTTPS 健康检查的 https-health-checks。如果要为基于目标池的网络负载均衡器创建旧版健康检查,则必须使用 http-health-checks
  • NAME 是旧式健康检查的名称。每个旧式健康检查在给定项目中都必须具有唯一的名称。
  • DESCRIPTION 是可选说明。
  • CHECK_INTERVAL 是从一次探测开始到下一次探测开始之间的时间间隔。该时间以秒为单位。如果省略,Google Cloud 使用的值为 5s(5 秒)。
  • TIMEOUT 是 Google Cloud 等待探测响应的时间量。TIMEOUT 的值必须小于或等于 CHECK_INTERVAL。该时间以秒为单位。如果省略,Google Cloud 使用的值为 5s(5 秒)。
  • HEALTHY_THRESHOLDUNHEALTHY_THRESHOLD 指定虚拟机实例被视为运行状况良好或运行状况不佳所必须成功或失败的连续探测次数。如果省略了其中任何一项,Google Cloud 使用的默认阈值为 2
  • HOST 允许您提供主机 HTTP 标头。如果省略,系统会使用负载均衡器的转发规则的 IP 地址。
  • PORT 允许您提供端口号。如果省略,Google Cloud 会使用 80
  • REQUEST_PATH 指定在发送健康检查请求时 Google Cloud 使用的网址路径。如果省略,则健康检查请求将发送到 /

API

修改旧式健康检查

控制台

  1. 转到 Google Cloud 控制台中的“健康检查”页面。
    转到“健康检查”页面
  2. 点击一项健康检查即可查看其详情。
  3. 点击修改 ,进行更改,然后点击保存

gcloud

  • 如需修改旧式 HTTP 健康检查,请使用 compute http-health-checks update 命令,并将 NAME 替换为其名称。使用 gcloud 修改旧式健康检查时,系统会保留您省略的标志的预配置设置。OTHER_OPTIONS创建旧式健康检查中所述的选项。

    gcloud compute http-health-checks update NAME \
      OTHER_OPTIONS
    
  • 如需修改旧式 HTTPS 健康检查,请使用 compute https-health-checks update 命令,并将 NAME 替换为其名称。使用 gcloud 修改旧式健康检查时,系统会保留您省略的标志的预配置设置。OTHER_OPTIONS创建旧式健康检查中所述的选项。

    gcloud compute https-health-checks update NAME \
      OTHER_OPTIONS
    

API

除了旧式健康检查的名称和类型之外,您可以修改任何用于创建旧式健康检查的标志patch API 调用会保留未在 patch 请求中明确设置的任何预配置设置。

必需的防火墙规则

您需要创建适用于经过负载均衡处理的所有虚拟机的入站防火墙规则,以允许来自健康检查探测工具 IP 地址范围的流量。下面的示例通过目标标记创建适用于虚拟机实例的防火墙规则。如需了解为防火墙规则指定目标的详情,请参阅“防火墙规则概览”中的目标说明配置网络标记

每个示例都允许从 Google Cloud 健康检查系统传送到虚拟机实例的所有 TCP 流量。(TCP 流量包括 SSL、HTTP、HTTPS、HTTP/2 流量。)如果愿意,您可以在指定 TCP 协议的同时指定端口;不过如果指定了端口,那么您的防火墙规则可能专用于特定的健康检查。如果您为协议和端口使用 tcp:80,则会允许端口 80 上的 TCP 流量,这让 Google Cloud 可以使用 HTTP 协议通过端口 80 联系您的虚拟机,但无法使用 HTTPS 协议通过端口 443 联系这些虚拟机。

用于健康检查的防火墙规则

下面的示例为以下负载均衡器创建入站防火墙规则:

  • 内部 TCP/UDP 负载均衡器
  • 内部 HTTP(S) 负载均衡器
  • 外部 TCP 代理负载均衡器
  • 内部区域 TCP 代理负载均衡器(预览版
  • 外部 SSL 代理负载均衡器
  • 全球外部 HTTP(S) 负载均衡器
  • 区域外部 HTTP(S) 负载均衡器

对于这些负载均衡器,健康检查(包括用于 HTTP(S) 负载均衡的旧版健康检查)的来源 IP 地址范围如下所示:

  • 35.191.0.0/16
  • 130.211.0.0/22

如果您需要创建网络负载均衡规则,请参阅下一部分,即网络负载均衡规则

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 点击创建防火墙规则
  3. 在“创建防火墙规则”页面上,提供如下信息:
    • 名称:提供规则的名称。本示例使用的是 fw-allow-health-checks
    • 网络:选择一个 VPC 网络。
    • 优先级:输入一个表示优先级的数字。这个数字越小,优先级就越高。请确保防火墙规则的优先级高于可能会拒绝入站流量的其他规则的优先级。
    • 流量方向:选择入站
    • 匹配时执行的操作:选择允许
    • 目标:选择指定的目标标记,然后在目标标记文本框中输入标记。本示例使用的是 allow-health-checks
    • 来源过滤条件:选择 IP 地址范围
    • 来源 IP 地址范围35.191.0.0/16,130.211.0.0/22
    • 允许的协议和端口:使用 tcp 和健康检查中配置的端口。TCP 是所有健康检查协议的底层协议。
    • 点击创建
  4. 在您经过负载均衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用 allow-health-checks 作为网络标记。

gcloud

  1. 使用以下 gcloud 命令创建一条名为 fw-allow-health-checks 的防火墙规则,用于允许从 Google Cloud 健康检查系统到 VPC 网络中具有 allow-health-checks 标记的实例的传入 TCP 连接。将 NETWORK_NAME 替换为您的 VPC 网络的名称,并将 PORT 替换为负载均衡器使用的端口。

    gcloud compute firewall-rules create fw-allow-health-checks \
        --network=NETWORK_NAME \
        --action=ALLOW \
        --direction=INGRESS \
        --source-ranges=35.191.0.0/16,130.211.0.0/22 \
        --target-tags=allow-health-checks \
        --rules=tcp:PORT
  2. 在您经过负载均衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用 allow-health-checks 作为网络标记。

如需了解详情,请参阅 gcloud 防火墙规则文档 API 文档

网络负载均衡规则

以下示例为网络负载均衡创建入站防火墙规则。

对于处理 IPv4 流量的网络负载均衡器,您必须允许来自以下来源 IP 地址范围的运行状况检查探测:

对于进入后端的 IPv4 流量:

  • 35.191.0.0/16
  • 209.85.152.0/22
  • 209.85.204.0/22

对于进入后端的 IPv6 流量:

  • 2600:1901:8001::/48

这些范围适用于两种网络负载均衡器:使用旧版健康检查的基于目标池的网络负载均衡器和使用非旧版健康检查的基于后端服务的网络负载均衡器

控制台

  1. 转到 Google Cloud Console 中的“防火墙”页面。
    转到“防火墙”页面
  2. 点击创建防火墙规则
  3. 在“创建防火墙规则”页面上,提供如下信息:
    • 名称:提供规则的名称。本示例使用的是 fw-allow-network-lb-health-checks
    • 网络:选择一个 VPC 网络。
    • 优先级:输入一个表示优先级的数字。这个数字越小,优先级就越高。请确保防火墙规则的优先级高于可能会拒绝入站流量的其他规则的优先级。
    • 流量方向:选择入站
    • 匹配时执行的操作:选择允许
    • 目标:选择指定的目标标记,然后在目标标记文本框中输入标记。本示例使用的是 allow-network-lb-health-checks
    • 来源过滤条件:选择 IP 地址范围
    • 来源 IP 地址范围35.191.0.0/16, 209.85.152.0/22, 209.85.204.0/22
    • 允许的协议和端口:使用 tcp。TCP 是 HTTP 和 HTTPS 的底层协议。
    • 点击创建
  4. 在您经过负载均衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用 allow-network-lb-health-checks 作为网络标记。

gcloud

  1. 使用以下 gcloud 命令创建一条名为 fw-allow-network-lb-health-checks 的防火墙规则,用于允许从 Google Cloud 健康检查系统到 VPC 网络中具有 allow-network-lb-health-checks 标记的实例的传入 TCP 连接。将 NETWORK_NAME 替换为您的 VPC 网络名称。

    gcloud compute firewall-rules create fw-allow-network-lb-health-checks \
        --network=NETWORK_NAME \
        --action=ALLOW \
        --direction=INGRESS \
        --source-ranges=35.191.0.0/16,209.85.152.0/22,209.85.204.0/22 \
        --target-tags=allow-network-lb-health-checks \
        --rules=tcp
  2. 在您经过负载均衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用 allow-network-lb-health-checks 作为网络标记。

如需了解详情,请参阅 gcloud 防火墙规则文档 API 文档

将健康检查与负载均衡器和 Traffic Director 关联

本部分介绍将健康检查与负载均衡器或 Traffic Director 关联之前必须满足的一些健康检查建议和要求。

匹配协议

使用健康检查(或旧式健康检查)时,最好使用协议与负载均衡器的后端服务或目标池使用的协议相匹配的检查。 不过,健康检查协议和负载均衡器协议并一定要相同。例如:

  • 对于内部 TCP/UDP 负载均衡,您只能为后端服务的协议使用 TCPUDP。如果您通过内部 TCP/UDP 负载均衡器后的虚拟机提供 HTTP 流量,那么使用 HTTP 协议进行健康检查是一种有意义的做法。

  • 基于目标池的网络负载均衡器必须使用旧版 HTTP 健康检查。它不能使用旧版 HTTPS 健康检查或任何非旧版健康检查。如果您使用基于目标池的网络负载均衡器对 TCP 流量进行负载均衡,则需要在负载均衡虚拟机上运行 HTTP 服务,以便这些虚拟机能够响应健康检查探测。

    基于后端服务的网络负载均衡器可以使用非旧版健康检查。也就是说,您可以使用其协议与网络负载均衡器的后端服务使用的协议相匹配的健康检查。

  • 对于使用 gRPC 协议的后端服务,请仅使用 gRPC 或 TCP 健康检查。不要使用 HTTP(S) 或 HTTP/2 健康检查。

针对后端服务的健康检查

本部分介绍了如何将健康检查与以下类型的负载均衡器的后端服务相关联:

  • 内部 TCP/UDP 负载均衡器
  • 内部 HTTP(S) 负载均衡器
  • 外部 TCP 代理负载均衡器
  • 内部区域 TCP 代理负载均衡器(预览版
  • 外部 SSL 代理负载均衡器
  • 外部 HTTP(S) 负载均衡器
  • 基于后端服务的网络负载均衡器

本部分假设您已经完成以下操作:

如需将健康检查与新的内部 TCP/UDP 负载均衡器、外部 TCP 代理负载均衡器、外部 SSL 代理负载均衡器、外部 HTTP(S) 负载均衡器或基于后端服务的网络负载均衡器关联,请参阅相应负载均衡器的设置指南。

控制台

如需将健康检查与现有负载均衡器关联,请执行以下操作:

  1. 前往 Google Cloud 控制台中的“负载均衡”页面。
    转到“负载均衡”页面
  2. 点击负载均衡器即可查看其详情。
  3. 点击修改 ,然后点击后端配置
  4. 健康检查菜单中选择一项健康检查。
  5. 点击更新

gcloud

要将健康检查与现有后端服务相关联,请按以下步骤操作。

  1. 确定后端服务的名称和范围。对于网络负载均衡器、内部 TCP/UDP 负载均衡器、内部区域 TCP 代理负载均衡器、外部 TCP 代理负载均衡器和外部 SSL 代理负载均衡器,每个负载均衡器只有一个后端服务。外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器具有一个或多个与单个网址映射关联的后端服务。

    • 如需列出内部 TCP/UDP 负载均衡器的后端服务,请运行以下命令,并将 REGION_LIST 替换为要查询的 Google Cloud 区域列表(以英文逗号分隔)。

      gcloud compute backend-services list \
          --filter="region:( REGION1 REGION2 ... ) AND loadBalancingScheme=INTERNAL"
      
    • 如需列出网络负载均衡器的后端服务,请运行以下命令,并将每个 REGION 替换为要查询的 Google Cloud 区域。

      gcloud compute backend-services list \
          --filter="region:( REGION1 REGION2 ... ) AND loadBalancingScheme=EXTERNAL"
      
    • 如需列出外部 TCP 代理负载均衡器的后端服务,请运行以下命令。无论网络服务层级如何,外部 TCP 代理负载均衡器的后端服务始终是全球性服务。

      gcloud compute backend-services list \
          --global \
          --filter="loadBalancingScheme=EXTERNAL" \
          --filter="protocol=TCP"
      
    • 如需列出内部区域 TCP 代理负载均衡器的后端服务,请运行以下命令,并将 REGION_LIST 替换为要查询的 Google Cloud 区域列表(以英文逗号分隔)。

      gcloud beta compute backend-services list \
          --filter="region:( REGION1 REGION2 ... ) AND loadBalancingScheme=INTERNAL_MANAGED"
      
    • 如需列出外部 SSL 代理负载均衡器的后端服务,请运行以下命令。无论网络服务层级如何,外部 SSL 代理负载均衡器的后端服务始终是全球性服务。

      gcloud compute backend-services list \
          --global \
          --filter="loadBalancingScheme=EXTERNAL" \
          --filter="protocol=SSL"
      
    • 如需确定外部 HTTP(S) 负载均衡器的后端服务,请先确定网址映射,然后再描述映射。无论网络服务层级如何,外部 HTTP(S) 负载均衡器的网址映射和后端服务始终为全球性。将 URL_MAP_NAME 替换为网址映射的名称。响应中会列出负载均衡器使用的后端服务。

      gcloud compute url-maps list \
          --global
      
      gcloud compute url-maps describe URL_MAP_NAME \
          --global
      
    • 如需确定区域级外部 HTTP(S) 负载均衡器或内部 HTTP(S) 负载均衡器的后端服务,请先确定网址映射,然后再描述映射。内部 HTTP(S) 负载均衡器的网址映射和后端服务为区域性。将 REGION_LIST 替换为要查询的 Google Cloud 区域列表(以英文逗号分隔)。将 URL_MAP_NAME 替换为网址映射的名称,并将 REGION 替换为其区域。响应中会列出负载均衡器使用的后端服务。

      gcloud compute url-maps list \
          --regions=REGION_LIST
      
      gcloud compute url-maps describe URL_MAP_NAME \
          --region=REGION
      
  2. 确定健康检查。请参阅列出健康检查

  3. 使用 compute backend-services update 命令将健康检查与后端服务相关联。每个后端服务都必须引用一个健康检查。在以下命令中,将 BACKEND_SERVICE_NAME 替换为后端服务的名称,将 HEALTH_CHECK_NAME 替换为健康检查的名称。如有必要,将 REGION 替换为后端服务和/或健康检查的 Google Cloud 区域。

    • 更改内部 TCP/UDP 负载均衡器的健康检查:内部 TCP/UDP 负载均衡器的后端服务是区域性的。它可以引用全球或区域健康检查。以下示例展示了一个区域健康检查引用。如果您通过内部 TCP/UDP 负载均衡器使用全球健康检查,请使用 --global-health-checks 而不是 --health-checks-region

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
          --region=REGION \
          --health-checks=HEALTH_CHECK_NAME \
          --health-checks-region=REGION
      
    • 更改内部区域 TCP 代理负载均衡器的健康检查:后端服务和健康检查都是区域性的。

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
          --region=REGION \
          --health-checks=HEALTH_CHECK_NAME \
          --health-checks-region=REGION
      
    • 更改基于后端服务的网络负载均衡器的健康检查:网络负载均衡器的后端服务是区域性的。它可以引用区域性健康检查。

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
          --region=REGION \
          --health-checks=HEALTH_CHECK_NAME \
          --health-checks-region=REGION
      
    • 更改外部 TCP 代理负载均衡器、外部 SSL 代理负载均衡器或外部 HTTP(S) 负载均衡器的健康检查:对于这些负载均衡器来说,后端服务和健康检查都是全球性服务和检查。如果外部 HTTP(S) 负载均衡器引用多个后端服务,则它可能引用多个健康检查。

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
          --global \
          --health-checks HEALTH_CHECK_NAME \
          --global-health-checks
      
    • 更改区域级外部 HTTP(S) 负载均衡器或内部 HTTP(S) 负载均衡器的健康检查:后端服务和健康检查都是区域性的。如果内部 HTTP(S) 负载均衡器引用多个后端服务,则它可能引用多个健康检查。

      gcloud compute backend-services update BACKEND_SERVICE_NAME \
          --region=REGION \
          --health-checks=HEALTH_CHECK_NAME \
          --health-checks-region=REGION
      

API

  1. 您可以使用 backendServices.list API 调用列出后端服务。

  2. 查看健康检查

  3. 如需将健康检查与后端服务相关联,请使用以下 API 调用之一:

基于目标池的网络负载均衡的旧版健康检查

本部分介绍如何将用于网络负载均衡的旧式健康检查与目标池相关联。本部分假设您已经完成以下操作:

如需将旧版健康检查与新的网络负载均衡器关联,请参阅使用目标池设置网络负载均衡。创建网络负载均衡器时,您必须将旧版健康检查与其目标池关联。

控制台

如需将健康检查与现有基于目标池的网络负载均衡器关联,请执行以下操作:

  1. 前往 Google Cloud 控制台中的“负载均衡”页面。
    转到“负载均衡”页面
  2. 点击网络负载均衡器即可查看其详情。
  3. 点击修改 ,然后点击后端配置
  4. 健康检查菜单中选择一项旧式健康检查。(此处仅显示符合条件的旧式健康检查。)
  5. 点击更新

gcloud

如需将健康检查与现有基于目标池的网络负载均衡器关联,请执行以下操作:

  1. 确定目标池。网络负载均衡器至少有一个目标池,还可能有辅助备用池。

    gcloud compute target-pools list
    
  2. 使用 HTTP 协议确定旧式健康检查。查看旧式健康检查(如有必要)。

  3. 将旧式健康检查与目标池相关联。在以下命令中,将 TARGET_POOL_NAMEREGION 分别替换为目标池的名称和区域,将 LEGACY_CHECK_NAME 替换为旧式健康检查的名称。旧式健康检查必须使用 HTTP 协议。

    • 如需从目标池移除旧式 HTTP 健康检查,请运行以下命令:

      gcloud compute target-pools remove-health-checks TARGET_POOL_NAME \
          --region=REGION \
          --http-health-check LEGACY_CHECK_NAME
      
    • 如需将旧式 HTTP 健康检查添加到目标池,请运行以下命令:

      gcloud compute target-pools add-health-checks TARGET_POOL_NAME \
          --region=REGION \
          --http-health-check LEGACY_CHECK_NAME
      

API

  1. 您可以使用 targetPools.list API 调用列出目标池。

  2. 查看旧式健康检查并确定一项旧式 HTTP 健康检查。

  3. 如需将旧式 HTTP 健康检查与目标池关联,请使用 targetPools.addHealthCheck API 调用。

检查健康检查状态

将健康检查与后端服务或目标池关联后,您可以获取负载均衡器的后端的即时健康检查状态。

控制台

  1. 转到负载均衡摘要页面。
    转到“负载均衡”页面
  2. 点击负载均衡器的名称。
  3. 后端下,检查运行状况良好列。系统会为每个后端实例组或网络端点组报告运行状况。

gcloud

  • 对于除基于目标池的网络负载均衡器之外的所有负载均衡器,请确定后端服务的名称和范围。基于后端服务的网络负载均衡器、内部 TCP/UDP 负载均衡器、区域级外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器使用区域性后端服务。外部 TCP 代理负载均衡器、外部 SSL 代理负载均衡器和外部 HTTP(S) 负载均衡器使用全球性后端服务。

    使用 compute backend-services get-health 命令,并将 NAMEREGION 分别替换为后端服务的名称和区域(如果需要)。

    • 如需获取全球后端服务的即时运行状况,请运行以下命令:

      gcloud compute backend-services get-health GLOBAL_BACKEND_SERVICE_NAME \
          --global
      
    • 如需获取区域性后端服务的即时运行状况,请运行以下命令:

      gcloud compute backend-services get-health REGIONAL_BACKEND_SERVICE_NAME \
          --region=REGION
      
  • 对于基于目标池的网络负载均衡器,确定负载均衡器的目标池的名称和区域,然后使用 compute target-pools get-health 命令,并将 NAME 替换为目标池的名称,将 REGION 替换为其区域。

    gcloud compute target-pools get-health TARGET_POOL_NAME \
        --region=REGION
    

API

  • 对于除基于目标池的网络负载均衡器之外的所有负载均衡器,请确定后端服务的名称和范围。基于后端服务的网络负载均衡器、内部 TCP/UDP 负载均衡器、区域级外部 HTTP(S) 负载均衡器和内部 HTTP(S) 负载均衡器使用区域性后端服务。外部 TCP 代理负载均衡器、外部 SSL 代理负载均衡器和外部 HTTP(S) 负载均衡器使用全球性后端服务。

  • 对于基于目标池的网络负载均衡器,请使用 targetPools.getHealth