Google Cloud 提供的运行状况检查机制可确定后端实例是否能够正确响应流量。本文档介绍如何为负载平衡器和 Traffic Director 创建和使用运行状况检查。
本页面假定您熟悉以下概念:
运行状况检查类别、协议和端口
Google Cloud 按类别和协议组织运行状况检查。
运行状况检查分为两种类别,即运行状况检查和旧式运行状况检查。每种运行状况检查类别都支持一组不同的协议,并且都允许指定用于执行运行状况检查的端口。
Traffic Director 和大多数负载平衡器使用非旧版运行状况检查,但是基于目标池的网络负载平衡要求使用旧版运行状况检查。如需了解如何确定适当的类别、协议以及如何指定适当的端口,请参阅运行状况检查概览页面中的选择运行状况检查。
您为运行状况检查选择的协议不必与负载平衡器本身使用的协议匹配,在某些情况下,两者也不能相同。如需了解详情,请参阅协议和负载平衡器。
“运行状况检查”一词不代指旧式运行状况检查。在本文中,我们会用术语“旧式运行状况检查”来明确指明此类检查。
列出运行状况检查
控制台
- 转到 Google Cloud Console 中的“运行状况检查”页面。
转到“运行状况检查”页面 - 点击一项运行状况检查即可查看其详情。
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
如需描述地区性运行状况检查,请将
NAME
和REGION
分别替换为其名称和地区。gcloud compute health-checks describe NAME \ --region=REGION
API
如需列出运行状况检查,请使用以下 API 调用:
列出全球运行状况检查:healthChecks.list
列出地区性运行状况检查:regionHealthChecks.list
如需描述运行状况检查的当前配置,请使用以下 API 调用:
描述全球运行状况检查:healthChecks.get
描述地区性运行状况检查:regionHealthChecks.get
创建运行状况检查
当您在 Google Cloud 中完成负载平衡器的后端配置时,Cloud Console 允许您创建或选择运行状况检查。
您还可以在 Cloud Console 中创建与负载平衡器配置无关的运行状况检查。如果您需要首先创建运行状况检查,或者需要将一项运行状况检查用于多个负载平衡器,这将非常有用。您可以使用 Cloud Console、gcloud
命令行工具或 REST API 创建运行状况检查。
控制台
- 转到 Google Cloud Console 中的“运行状况检查”页面。
转到“运行状况检查”页面 - 点击创建运行状况检查。
- 在“创建运行状况检查”页面上,提供以下信息:
- 名称:提供运行状况检查的名称。
- 说明:提供说明(可选)。
- 协议:选择一项运行状况检查协议。
- 端口:提供端口号。在 Cloud Console 中创建运行状况检查时,您必须使用端口号指定端口。
- 代理协议:您可以选择在运行状况检查探测系统发出的请求中附加一个代理标头。
- 请求路径和响应 (Request path and Response):对于 HTTP、HTTPS 和 HTTP2 协议,您可以选择提供可供运行状况检查探测系统联系的网址路径。如需了解详情,请参阅用于 HTTP、HTTPS 和 HTTP/2 运行状况检查的额外标志。
- 请求和响应:对于 TCP 和 SSL 协议,您可以指定要发送的 ASCII 文本字符串和预期的文本响应字符串。如需了解详情,请参阅用于 SSL 和 TCP 运行状况检查的额外标志。
- 检查间隔:定义从一次探测开始到下一次探测开始之间的时间。
- 超时:定义 Google Cloud 等待探测响应的时间。其值必须小于或等于检查间隔时间。
- 状况良好判断阈值:定义要将虚拟机实例视为运行状况良好所必须成功的连续探测次数。
- 状况不佳判断阈值:定义要将虚拟机实例视为运行状况不佳所必须失败的连续探测次数。
- 点击创建。
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
定义用于运行状况检查的协议。有效选项包括grpc
、http
、https
、http2
、ssl
、tcp
。NAME
是运行状况检查的名称。在给定项目中:每个全球运行状况检查都必须具有唯一的名称,而地区性运行状况检查在给定地区内必须具有唯一的名称。REGION
:除了内部 HTTP(S) 负载平衡器之外,其他所有负载平衡器都使用全球运行状况检查 (--global
)。内部 HTTP(S) 负载平衡器使用地区性运行状况检查,其地区必须与后端服务的地区匹配。DESCRIPTION
是可选说明。CHECK_INTERVAL
是从一次运行状况检查探测系统的连接开始到下一次相应连接开始之间的时间。该时间以秒为单位。如果省略,Google Cloud 使用的值为5s
(5 秒)。TIMEOUT
是 Google Cloud 等待探测响应的时间量。TIMEOUT
的值必须小于或等于CHECK_INTERVAL
。该时间以秒为单位。如果省略,Google Cloud 使用的值为5s
(5 秒)。HEALTHY_THRESHOLD
和UNHEALTHY_THRESHOLD
指定虚拟机实例被视为运行状况良好或运行状况不佳所必须成功或失败的连续探测次数。如果省略了其中任何一项,Google Cloud 使用的默认阈值为2
。PORT_SPECIFICATION
:使用端口指定标志之一定义端口指定方式。ADDITIONAL_FLAGS
是用于指定PROTOCOL
特定端口和选项的其他标志。请参阅用于 HTTP、HTTPS 和 HTTP/2 运行状况检查的额外标志、用于 SSL 和 TCP 运行状况检查的额外标志或用于 gRPC 运行状况检查的额外标志。
API
如需创建全球运行状况检查,请使用 healthChecks.insert
如需创建地区性运行状况检查,请使用 regionHealthChecks.insert
修改运行状况检查
您无法通过修改运行状况检查将其转换为旧式运行状况检查(反之亦然)。此外,您也无法更改运行状况检查的名称或范围(例如,将范围从全球更改为地区)。
控制台
- 转到 Google Cloud Console 中的“运行状况检查”页面。
转到“运行状况检查”页面 - 点击一项运行状况检查即可查看其详情。
- 如果您需要修改一项运行状况检查,请点击修改,然后执行以下操作:
- 根据需要更改其参数。
- 点击保存。
gcloud
确定运行状况检查的名称和范围。如需了解相关说明,请参阅列出运行状况检查。
除了运行状况检查的名称、协议和范围之外,您可以修改任何通用标志、端口指定标志和可选标志。如需修改现有运行状况检查,请使用适当的
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
确定运行状况检查的名称和范围。如需了解相关说明,请参阅列出运行状况检查。
除了运行状况检查的名称、协议和范围之外,您可以使用以下 API 调用修改任何通用标志、端口指定标志和可选标志。使用
patch
API 调用来保留请求中未明确设置的任何预配置设置。如需修改全球运行状况检查,请使用 healthChecks.update 或 healthChecks.patch。
如需修改地区性运行状况检查,请使用 regionHealthChecks.update 或 regionHealthChecks.patch。
额外的标志
本部分介绍了在创建或修改运行状况检查时可以使用的额外标志。某些标志(例如端口指定)必须使用 gcloud
或 API 进行设置。
端口指定标志
如果您使用 gcloud
命令行工具或 API 创建运行状况检查,可以通过两个选项来指定运行状况检查的端口。下表展示了各种有效的负载平衡器和后端组合所对应的端口指定选项。“实例组”一词指的是非代管实例组、区域性代管实例组或地区性代管实例组。
每个运行状况检查只能使用一种类型的端口指定方式。
产品 | 后端类型 | 端口指定选项 |
---|---|---|
网络负载平衡 | 实例组 | • --port :按编号指定 TCP 端口(从 1 到 65535 )对于与网络负载平衡器关联的运行状况检查, --use-serving-port 标志将被忽略,因为网络负载平衡器的后端服务没有端口指定机制。 |
内部 TCP/UDP 负载平衡 | 实例组 | • --port :按编号指定 TCP 端口(从 1 到 65535 )对于与内部 TCP/UDP 负载平衡器关联的运行状况检查, --use-serving-port 标志将被忽略,因为内部 TCP/UDP 负载平衡器的后端服务没有端口指定机制。 |
内部 HTTP(S) 负载平衡 TCP 代理负载平衡 SSL 代理负载平衡 外部 HTTP(S) 负载平衡 Traffic Director |
区域 NEG | • --port :按编号指定 TCP 端口(从 1 到 65535 )• --use-serving-port :使用网络端点组中每个端点的端口。 |
实例组 | • --port :按编号指定 TCP 端口(从 1 到 65535 )• --use-serving-port :使用后端服务订阅的相同实例组已命名端口。 |
如果您省略端口指定方式,Google Cloud 会使用以下默认值:
- 如果运行状况检查的协议是
TCP
或HTTP
,则它使用--port=80
。 - 如果运行状况检查的协议是
SSL
、HTTPS
或HTTP2
,则它使用--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
必须是NONE
或PROXY_V1
中的一个。如果省略,Google Cloud 会使用NONE
。PROXY_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
必须是NONE
或PROXY_V1
中的一个。如果省略,Google Cloud 会使用NONE
。PROXY_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 响应代码(包括重定向 301
、302
)均被视为运行状况不佳。
列出旧式运行状况检查
控制台
- 转到 Google Cloud Console 中的“运行状况检查”页面。
转到“运行状况检查”页面 - 点击一项旧式运行状况检查即可查看其详情。
gcloud
如需列出旧式 HTTP 运行状况检查,请使用
compute http-health-checks list
命令:gcloud compute http-health-checks list
如需列出旧式 HTTPS 运行状况检查,请使用
compute https-health-checks list
命令:gcloud compute https-health-checks list
如需描述旧式 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
如需列出旧式运行状况检查,请执行以下操作:
使用 httpHealthChecks.list 列出旧式 HTTP 运行状况检查。
使用 httpsHealthChecks.list 列出旧式 HTTPS 运行状况检查。
如需描述旧式运行状况检查,请执行以下操作:
使用 httpHealthChecks.get 描述旧式 HTTP 运行状况检查。
使用 httpsHealthChecks.get 描述旧式 HTTPS 运行状况检查。
创建旧式运行状况检查
控制台
虽然 Cloud Console 的运行状况检查页面同时列出了运行状况检查和旧式运行状况检查并允许您进行修改,但您无法从 Cloud Console 的运行状况检查页面创建新的旧式运行状况检查。
如需创建旧式运行状况检查,请使用 Cloud Console 的网络负载平衡器页面或使用本部分的 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_THRESHOLD
和UNHEALTHY_THRESHOLD
指定虚拟机实例被视为运行状况良好或运行状况不佳所必须成功或失败的连续探测次数。如果省略了其中任何一项,Google Cloud 使用的默认阈值为2
。HOST
允许您提供主机 HTTP 标头。如果省略,系统会使用负载平衡器的转发规则的 IP 地址。PORT
允许您提供端口号。如果省略,Google Cloud 会使用80
。REQUEST_PATH
指定在发送运行状况检查请求时 Google Cloud 使用的网址路径。如果省略,则运行状况检查请求将发送到/
。
API
如需创建旧式 HTTP 运行状况检查,请使用 httpHealthChecks.insert API 调用。
如需创建旧式 HTTPS 运行状况检查,请使用 httpsHealthChecks.insert
修改旧式运行状况检查
控制台
- 转到 Google Cloud Console 中的“运行状况检查”页面。
转到“运行状况检查”页面 - 点击一项运行状况检查即可查看其详情。
- 点击修改 ,进行更改,然后点击保存。
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 请求中明确设置的任何预配置设置。
如需修改旧式 HTTP 运行状况检查,请使用 httpHealthChecks.update 或 httpHealthChecks.patch。
如需修改旧式 HTTPS 运行状况检查,请使用 httpsHealthChecks.update 或 httpsHealthChecks.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 代理负载平衡(运行状况检查)
- SSL 代理负载平衡(运行状况检查)
- HTTP(S) 负载平衡(运行状况检查和旧式运行状况检查)
对于这些负载平衡器,运行状况检查(包括用于 HTTP(S) 负载平衡的旧式运行状况检查)的来源 IP 地址范围如下所示:
35.191.0.0/16
130.211.0.0/22
对于内部 HTTP(S) 负载平衡,来源 IP 地址范围是代理专用子网中的所有 IP 地址。
如果您需要创建网络负载平衡规则,请参阅下一部分,即网络负载平衡规则。
控制台
- 转到 Google Cloud Console 中的“防火墙”页面。
转到“防火墙”页面 - 点击创建防火墙规则。
- 在“创建防火墙规则”页面上,提供如下信息:
- 名称:提供规则的名称。本示例使用的是
fw-allow-health-checks
。 - 网络:选择一个 VPC 网络。
- 优先级:输入一个表示优先级的数字。这个数字越小,优先级就越高。请确保防火墙规则的优先级高于可能会拒绝入站流量的其他规则的优先级。
- 流量方向:选择入站。
- 匹配时执行的操作:选择允许。
- 目标:选择指定的目标标记,然后在目标标记文本框中输入标记。本示例使用的是
allow-health-checks
。 - 来源过滤条件:选择 IP 地址范围。
- 来源 IP 地址范围:
35.191.0.0/16,130.211.0.0/22
- 允许的协议和端口:使用
tcp
。TCP 是所有运行状况检查协议的底层协议。 - 点击创建。
- 名称:提供规则的名称。本示例使用的是
- 在您经过负载平衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用
allow-health-checks
作为网络标记。
gcloud
使用以下
gcloud
命令创建一条名为fw-allow-health-checks
的防火墙规则,用于允许从 Google Cloud 运行状况检查系统到 VPC 网络中具有allow-health-checks
标记的实例的传入 TCP 连接。将NETWORK_NAME
替换为您的 VPC 网络名称。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
在您经过负载平衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用
allow-health-checks
作为网络标记。
如需了解详情,请参阅 gcloud
防火墙规则文档和 API 文档。
网络负载平衡规则
以下示例为网络负载平衡创建入站防火墙规则。网络负载平衡的来源 IP 地址范围如下:
35.191.0.0/16
209.85.152.0/22
209.85.204.0/22
这些范围适用于两种网络负载平衡器:使用旧版运行状况检查的基于目标池的网络负载平衡器和使用非旧版运行状况检查的基于后端服务的网络负载平衡器。
控制台
- 转到 Google Cloud Console 中的“防火墙”页面。
转到“防火墙”页面 - 点击创建防火墙规则。
- 在“创建防火墙规则”页面上,提供如下信息:
- 名称:提供规则的名称。本示例使用的是
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 的底层协议。 - 点击创建。
- 名称:提供规则的名称。本示例使用的是
- 在您经过负载平衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用
allow-network-lb-health-checks
作为网络标记。
gcloud
使用以下
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
在您经过负载平衡处理的每个实例上,添加网络标记,以将这条新的入站防火墙规则应用于这些实例。此示例使用
allow-network-lb-health-checks
作为网络标记。
如需了解详情,请参阅 gcloud
防火墙规则文档和 API 文档。
将运行状况检查与负载平衡器和 Traffic Director 关联
本部分介绍将运行状况检查与负载平衡器或 Traffic Director 关联之前必须满足的一些运行状况检查建议和要求。
匹配协议
使用运行状况检查(或旧式运行状况检查)时,最好使用协议与负载平衡器的后端服务或目标池使用的协议相匹配的检查。 不过,运行状况检查协议和负载平衡器协议并不一定要相同。例如:
对于内部 TCP/UDP 负载平衡,您只能为后端服务的协议使用
TCP
或UDP
。如果您通过内部 TCP/UDP 负载平衡器后的虚拟机提供 HTTP 流量,那么使用 HTTP 协议进行运行状况检查是一种有意义的做法。基于目标池的网络负载平衡器必须使用旧版 HTTP 运行状况检查。它不能使用旧版 HTTPS 运行状况检查或任何非旧版运行状况检查。如果您使用基于目标池的网络负载平衡器对 TCP 流量进行负载平衡,则需要在负载平衡虚拟机上运行 HTTP 服务,以便这些虚拟机能够响应运行状况检查探测。
基于后端服务的网络负载平衡器可以使用非旧版运行状况检查。也就是说,您可以使用其协议与网络负载平衡器的后端服务使用的协议相匹配的运行状况检查。对于使用 gRPC 协议的后端服务,请仅使用 gRPC 或 TCP 运行状况检查。不要使用 HTTP(S) 或 HTTP/2 运行状况检查。
针对后端服务的运行状况检查
本部分介绍了如何将运行状况检查与以下类型的负载平衡器的后端服务相关联:
- 内部 TCP/UDP 负载平衡
- 内部 HTTP(S) 负载平衡
- TCP 代理负载平衡
- SSL 代理负载平衡
- HTTP(S) 负载平衡
- 基于后端服务的网络负载平衡
本部分假设您已经完成以下操作:
- 创建了内部 TCP/UDP 负载平衡器、基于后端服务的网络负载平衡器、TCP 代理负载平衡器、SSL 代理负载平衡器或外部 HTTP(S) 负载平衡器。
- 创建了运行状况检查。
- 配置了用于运行状况检查的防火墙规则。 对于基于后端服务的网络负载平衡器,请参阅网络负载平衡的防火墙规则。
如需将运行状况检查与新的内部 TCP/UDP 负载平衡器、TCP 代理负载平衡器、SSL 代理负载平衡器、外部 HTTP(S) 负载平衡器或基于后端服务的网络负载平衡器关联,请参阅相应负载平衡器的设置指南。
控制台
要将运行状况检查与现有内部 TCP/UDP 负载平衡器、TCP 代理负载平衡器、SSL 代理负载平衡器、外部 HTTP(S) 负载平衡器或基于后端服务的网络负载平衡器关联,请执行以下操作:
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡”页面 - 点击负载平衡器即可查看其详情。
- 点击修改 ,然后点击后端配置。
- 从运行状况检查菜单中选择一项运行状况检查。
- 点击更新。
gcloud
要将运行状况检查与现有后端服务相关联,请按以下步骤操作。
确定后端服务的名称和范围。对于网络负载平衡器、内部 TCP/UDP 负载平衡器、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"
如需列出 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) 负载平衡器的网址映射和后端服务是地区性映射和服务。将
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
确定运行状况检查。请参阅列出运行状况检查。
使用
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
更改基于后端服务的网络负载平衡器的运行状况检查:网络负载平衡器的后端服务是区域性的。它可以引用区域运行状况检查。
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) 负载平衡器引用多个后端服务,则它可能引用多个运行状况检查。
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --health-checks-region=REGION
API
您可以使用 backendServices.list API 调用列出后端服务。
如需将运行状况检查与后端服务相关联,请使用以下 API 调用之一:
基于目标池的网络负载平衡的旧版运行状况检查
本部分介绍如何将用于网络负载平衡的旧式运行状况检查与目标池相关联。本部分假设您已经完成以下操作:
- 创建了基于目标池的网络负载平衡器。
- 创建了旧式运行状况检查。
- 配置了用于网络负载平衡的防火墙规则。
如需将旧版运行状况检查与新的网络负载平衡器关联,请参阅使用目标池设置网络负载平衡。创建网络负载平衡器时,您必须将旧版运行状况检查与其目标池关联。
控制台
如需将运行状况检查与现有基于目标池的网络负载平衡器关联,请执行以下操作:
- 转到 Google Cloud Console 中的“负载平衡”页面。
转到“负载平衡”页面 - 点击负载平衡器即可查看其详情。
- 点击修改 ,然后点击后端配置。
- 从运行状况检查菜单中选择一项旧式运行状况检查。(此处仅显示符合条件的旧式运行状况检查。)
- 点击更新。
gcloud
如需将运行状况检查与现有基于目标池的网络负载平衡器关联,请执行以下操作:
确定目标池。网络负载平衡器至少有一个目标池,还可能有辅助备用池。
gcloud compute target-pools list
使用
HTTP
协议确定旧式运行状况检查。查看旧式运行状况检查(如有必要)。将旧式运行状况检查与目标池相关联。在以下命令中,将
TARGET_POOL_NAME
和REGION
分别替换为目标池的名称和地区,将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
您可以使用 targetPools.list API 调用列出目标池。
查看旧式运行状况检查并确定一项旧式 HTTP 运行状况检查。
如需将旧式 HTTP 运行状况检查与目标池关联,请使用 targetPools.addHealthCheck API 调用。
检查运行状况检查状态
将运行状况检查与后端服务或目标池关联后,您可以获取负载平衡器的后端的即时运行状况检查状态。
控制台
- 转到负载平衡摘要页面。
转到“负载平衡”页面 - 点击负载平衡器的名称。
- 在后端下,检查运行状况良好列。系统会为每个后端实例组或网络端点组报告运行状况。
gcloud
对于除基于目标池的网络负载平衡器之外的所有负载平衡器,请确定后端服务的名称和范围。基于后端服务的网络负载平衡、内部 TCP/UDP 负载平衡和内部 HTTP(S) 负载平衡使用区域后端服务。TCP 代理负载平衡、SSL 代理负载平衡和 HTTP(S) 负载平衡使用全球后端服务。
使用
compute backend-services get-health
命令,并将NAME
和REGION
分别替换为后端服务的名称和地区(如果需要)。如需获取全球后端服务的即时运行状况,请运行以下命令:
gcloud compute backend-services get-health NAME \ --global \ --format=get(name, healthStatus)
如需获取地区性后端服务的即时运行状况,请运行以下命令:
gcloud compute backend-services get-health NAME \ --region=REGION \ --format=get(name, healthStatus)
对于基于目标池的网络负载平衡器,确定负载平衡器的目标池的名称和区域,然后使用
compute target-pools get-health
命令,并将NAME
替换为目标池的名称,将REGION
替换为其区域。gcloud compute target-pools get-health NAME \ --region=REGION \ --format=get(name, healthStatus)
API
对于除基于目标池的网络负载平衡器之外的所有负载平衡器,请确定后端服务的名称和范围。基于后端服务的网络负载平衡、内部 TCP/UDP 负载平衡和内部 HTTP(S) 负载平衡使用区域后端服务。TCP 代理负载平衡、SSL 代理负载平衡和 HTTP(S) 负载平衡使用全球后端服务。
如需获取全球后端服务的即时运行状况,请使用 backendServices.getHealth
如需获取地区性后端服务的即时运行状况,请使用 regionBackendServices.getHealth
对于基于目标池的网络负载平衡器,请使用 targetPools.getHealth