健康检查 (proto)
config.core.v3.HealthStatusSet
[config.core.v3.HealthStatusSet proto]
{
"statuses": []
}
- statuses
(repeated config.core.v3.HealthStatus) 一组与顺序无关的健康状态。
config.core.v3.HealthCheck
[config.core.v3.HealthCheck proto]
{
"timeout": {...},
"interval": {...},
"initial_jitter": {...},
"interval_jitter": {...},
"interval_jitter_percent": ...,
"unhealthy_threshold": {...},
"healthy_threshold": {...},
"reuse_connection": {...},
"http_health_check": {...},
"tcp_health_check": {...},
"grpc_health_check": {...},
"custom_health_check": {...},
"no_traffic_interval": {...},
"no_traffic_healthy_interval": {...},
"unhealthy_interval": {...},
"unhealthy_edge_interval": {...},
"healthy_edge_interval": {...},
"event_log_path": ...,
"event_logger": [],
"always_log_health_check_failures": ...,
"always_log_health_check_success": ...,
"tls_options": {...},
"transport_socket_match_criteria": {...}
}
- timeout
(Duration, REQUIRED) 等待健康检查响应的时间。如果超时,则健康检查尝试将被视为失败。
- interval
(Duration, REQUIRED) 健康检查之间的间隔。
- initial_jitter
(Duration) 可选的抖动量(以毫秒为单位)。如果指定,Envoy 将在 0 到 initial_jitter 毫秒之间随机时间后开始健康检查。这仅适用于第一次健康检查。
- interval_jitter
(Duration) 可选的抖动量(以毫秒为单位)。如果指定,在每个间隔期间,Envoy 将向等待时间添加 interval_jitter。
- interval_jitter_percent
(uint32) 可选的抖动量,作为 interval_ms 的百分比。如果指定,在每个间隔期间,Envoy 将向等待时间添加
interval_ms
*interval_jitter_percent
/ 100。如果 interval_jitter_ms 和 interval_jitter_percent 都设置,则两者都将用于增加等待时间。
- unhealthy_threshold
(UInt32Value, REQUIRED) 在主机被标记为不健康之前所需的健康检查不健康次数。请注意,对于
http
健康检查,如果主机响应的代码不在 expected_statuses 或 retriable_statuses 中,则会忽略此阈值,并且主机将被立即视为不健康。
- healthy_threshold
(UInt32Value, REQUIRED) 在主机被标记为健康之前所需的健康检查健康次数。请注意,在启动期间,只需一次成功的健康检查即可将主机标记为健康。
- reuse_connection
(BoolValue) 在健康检查之间重用健康检查连接。默认值为 true。
- http_health_check
(config.core.v3.HealthCheck.HttpHealthCheck) HTTP 健康检查。
必须设置以下一项:http_health_check、tcp_health_check、grpc_health_check、custom_health_check。
- tcp_health_check
(config.core.v3.HealthCheck.TcpHealthCheck) TCP 健康检查。
必须设置以下一项:http_health_check、tcp_health_check、grpc_health_check、custom_health_check。
- grpc_health_check
(config.core.v3.HealthCheck.GrpcHealthCheck) gRPC 健康检查。
必须设置以下一项:http_health_check、tcp_health_check、grpc_health_check、custom_health_check。
- custom_health_check
(config.core.v3.HealthCheck.CustomHealthCheck) 自定义健康检查。
必须设置以下一项:http_health_check、tcp_health_check、grpc_health_check、custom_health_check。
- no_traffic_interval
(Duration) “无流量间隔”是一个特殊的健康检查间隔,当集群从未有流量路由到它时使用。这个较低的间隔允许集群信息保持最新,而不会毫无理由地发送可能大量的活动健康检查流量。一旦集群被用于流量路由,Envoy 将恢复使用定义的标准健康检查间隔。请注意,此间隔优先于任何其他间隔。
“无流量间隔”的默认值为 60 秒。
- no_traffic_healthy_interval
(Duration) “无流量健康间隔”是一个特殊的健康检查间隔,用于当集群没有接收流量时,当前正在通过活动健康检查(包括新主机)的主机。
当我们希望使用
no_traffic_interval
发送频繁的健康检查,然后在集群中的主机被标记为健康后恢复到较低频率的no_traffic_healthy_interval
时,这很有用。一旦集群被用于流量路由,Envoy 将恢复使用定义的标准健康检查间隔。
如果未设置 no_traffic_healthy_interval,它将默认为无流量间隔,并无论健康状态如何发送该间隔。
- unhealthy_interval
(Duration) “不健康间隔”是一个健康检查间隔,用于被标记为不健康的主机。一旦主机被标记为健康,Envoy 将恢复使用定义的标准健康检查间隔。
“不健康间隔”的默认值与“间隔”相同。
- unhealthy_edge_interval
(Duration) “不健康边缘间隔”是一个特殊的健康检查间隔,用于主机被标记为不健康后的第一次健康检查。对于后续的健康检查,Envoy 将恢复使用“不健康间隔”(如果存在)或定义的标准健康检查间隔。
“不健康边缘间隔”的默认值与“不健康间隔”相同。
- healthy_edge_interval
(Duration) “健康边缘间隔”是一个特殊的健康检查间隔,用于主机被标记为健康后的第一次健康检查。对于后续的健康检查,Envoy 将恢复使用定义的标准健康检查间隔。
“健康边缘间隔”的默认值与默认间隔相同。
- event_log_path
(string) .. attention:: 此字段已弃用,取而代之的是扩展 event_logger 和 event_log_path 在文件接收器扩展中。
指定 健康检查事件日志 的路径。
- event_logger
(repeated config.core.v3.TypedExtensionConfig) 用于处理健康检查事件的事件日志接收器列表。
- always_log_health_check_failures
(bool) 如果设置为 true,则始终记录健康检查失败事件。如果设置为 false,则只记录初始健康检查失败事件。默认值为 false。
- always_log_health_check_success
(bool) 如果设置为 true,则始终记录健康检查成功事件。如果设置为 false,则仅在它是第一次成功的健康检查,或者达到健康阈值时记录主机添加事件。默认值为 false。
- tls_options
(config.core.v3.HealthCheck.TlsOptions) 这允许覆盖集群 TLS 设置,仅用于健康检查连接。
- transport_socket_match_criteria
(Struct) 可选的键值对,将用于从集群中指定的那些 传输套接字匹配 中匹配传输套接字。例如,以下匹配条件
transport_socket_match_criteria: useMTLS: true
将匹配以下 集群套接字匹配
transport_socket_matches: - name: "useMTLS" match: useMTLS: true transport_socket: name: envoy.transport_sockets.tls config: { ... } # tls socket configuration
如果设置了此字段,则对于健康检查,它将取代 LbEndpoint.Metadata 中的
envoy.transport_socket
条目。这允许对健康检查使用不同的传输套接字功能,而不是代理到端点。
config.core.v3.HealthCheck.Payload
[config.core.v3.HealthCheck.Payload proto]
描述有效负载字节中有效负载的编码。
{
"text": ...,
"binary": ...
}
config.core.v3.HealthCheck.HttpHealthCheck
[config.core.v3.HealthCheck.HttpHealthCheck proto]
{
"host": ...,
"path": ...,
"receive": [],
"response_buffer_size": {...},
"request_headers_to_add": [],
"request_headers_to_remove": [],
"expected_statuses": [],
"retriable_statuses": [],
"codec_client_type": ...,
"service_name_matcher": {...},
"method": ...
}
- path
(string, REQUIRED) 指定健康检查期间将请求的 HTTP 路径。例如
/healthcheck
。
- receive
(repeated config.core.v3.HealthCheck.Payload) 指定一个 HTTP 预期响应列表,这些响应将在响应正文的前
response_buffer_size
字节中匹配。如果设置了该字段,则预期响应检查和状态码都将决定健康检查。检查响应时,将执行“模糊”匹配,以便必须找到每个负载块,并且必须按指定的顺序排列,但不一定必须是连续的。注意
建议根据总的负载大小来设置
response_buffer_size
,以提高效率。如果未设置,默认缓冲区大小为 1024 字节。
- response_buffer_size
(UInt64Value) 指定用于负载匹配的响应缓冲区大小(以字节为单位)。默认值为 1024。设置为 0 表示将对整个响应进行负载匹配。
- request_headers_to_add
(repeated config.core.v3.HeaderValueOption) 指定一个 HTTP 头列表,这些头应添加到发送到健康检查集群的每个请求中。有关更多信息(包括有关头值语法的详细信息),请参阅有关 自定义请求头 的文档。
- request_headers_to_remove
(repeated string) 指定一个 HTTP 头列表,这些头应从发送到健康检查集群的每个请求中删除。
- expected_statuses
(repeated type.v3.Int64Range) 指定一个被视为健康的 HTTP 响应状态列表。如果提供,将替换默认的仅 200 策略 - 200 必须根据需要显式包含。范围遵循 Int64Range 的半开语义。每个范围的起点和终点都是必需的。仅允许范围 [100, 600) 中的状态。
- retriable_statuses
(repeated type.v3.Int64Range) 指定一个被视为可重试的 HTTP 响应状态列表。如果提供,此范围内的响应将计入配置的 unhealthy_threshold,但不会导致主机立即被视为不健康。范围遵循 Int64Range 的半开语义。每个范围的起点和终点都是必需的。仅允许范围 [100, 600) 中的状态。对于与该字段重叠的任何范围,expected_statuses 字段优先,即如果状态码 200 既是可重试的又是预期的,则 200 响应将被视为成功的健康检查。默认情况下,所有不在 expected_statuses 中的响应将导致主机立即被视为不健康,即如果状态码 200 是预期的,并且没有配置可重试的状态,则任何非 200 响应都将导致主机被标记为不健康。
- codec_client_type
(type.v3.CodecClientType) 对健康检查使用指定的应用程序协议。
- service_name_matcher
(type.matcher.v3.StringMatcher) 一个可选的服务名称参数,用于使用 StringMatcher 验证健康检查集群的身份。有关更多信息,请参阅 架构概述。
- method
(config.core.v3.RequestMethod) 用于健康检查的 HTTP 方法,默认值为“GET”。支持 GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE、PATCH 方法,但不支持制作请求正文。CONNECT 方法不允许,因为它不适合健康检查请求。如果方法期望非 200 响应,则需要在 expected_statuses 中设置。
config.core.v3.HealthCheck.TcpHealthCheck
[config.core.v3.HealthCheck.TcpHealthCheck proto]
{
"send": {...},
"receive": [],
"proxy_protocol_config": {...}
}
- send
(config.core.v3.HealthCheck.Payload) 空负载意味着仅连接健康检查。
- receive
(repeated config.core.v3.HealthCheck.Payload) 检查响应时,将执行“模糊”匹配,以便必须找到每个负载块,并且必须按指定的顺序排列,但不一定必须是连续的。
- proxy_protocol_config
(config.core.v3.ProxyProtocolConfig) 设置此值时,它尝试使用 ProxyProtocol 执行健康检查请求。当存在
send
时,它们将在前面的 ProxyProtocol 头部之后发送。当不存在send
时,仅发送 ProxyProtocol 头部。它允许使用 ProxyProtocol V1 和 V2。在 V1 中,它表示 L3/L4。在 V2 中,它包括 LOCAL 命令,不包括 L3/L4。
config.core.v3.HealthCheck.RedisHealthCheck
[config.core.v3.HealthCheck.RedisHealthCheck proto]
{
"key": ...
}
- key
(string) 如果设置,则可选地执行
EXISTS <key>
而不是PING
。Redis 的返回值为 0(不存在)被视为通过健康检查。非 0 的返回值被视为失败。这允许用户通过将指定键设置为任何值并等待流量耗尽来标记 Redis 实例以进行维护。
config.core.v3.HealthCheck.GrpcHealthCheck
[config.core.v3.HealthCheck.GrpcHealthCheck proto]
grpc.health.v1.Health 基于健康检查。有关详细信息,请参阅 gRPC 文档。
{
"service_name": ...,
"authority": ...,
"initial_metadata": []
}
- service_name
(string) 一个可选的服务名称参数,它将发送到 grpc.health.v1.HealthCheckRequest 中的 gRPC 服务。有关更多信息,请参阅 gRPC 健康检查概述。
- authority
(string) gRPC 健康检查请求中 :authority 头部的值。如果为空(默认值),将使用与该健康检查关联的集群的名称。可以通过设置 hostname 字段来为特定端点自定义 authority 头部。
- initial_metadata
(repeated config.core.v3.HeaderValueOption) 指定一个键值对列表,这些键值对应添加到发送到健康检查集群的每个 GRPC 调用的元数据中。有关更多信息(包括有关头值语法的详细信息),请参阅有关 自定义请求头 的文档。
config.core.v3.HealthCheck.CustomHealthCheck
[config.core.v3.HealthCheck.CustomHealthCheck proto]
自定义健康检查。
{
"name": ...,
"typed_config": {...}
}
- name
(string, REQUIRED) 自定义健康检查器的注册名称。
- typed_config
(Any) 自定义健康检查器特定配置,取决于要实例化的自定义健康检查器。有关参考,请参阅 envoy/config/health_checker。
config.core.v3.HealthCheck.TlsOptions
[config.core.v3.HealthCheck.TlsOptions proto]
健康检查发生在为集群指定的传输套接字上。这意味着,如果集群使用启用 TLS 的传输套接字,健康检查也会在 TLS 上进行。
这允许覆盖集群 TLS 设置,仅用于健康检查连接。
{
"alpn_protocols": []
}
- alpn_protocols
(repeated string) 指定健康检查连接的 ALPN 协议。这在相应的上游使用基于 ALPN 的 FilterChainMatch 以及健康检查与数据连接的不同协议时非常有用。如果为空,则不会在健康检查连接上设置任何 ALPN 协议。
Enum config.core.v3.HealthStatus
[config.core.v3.HealthStatus proto]
端点健康状态。
- UNKNOWN
(DEFAULT) 健康状态未知。Envoy 将其解释为
HEALTHY
。
- HEALTHY
健康。
- UNHEALTHY
不健康。
- 排水
连接正在进行排水。例如,https://aws.amazon.com/blogs/aws/elb-connection-draining-remove-instances-from-service-with-care/ 或 https://cloud.google.com/compute/docs/load-balancing/enabling-connection-draining。Envoy 将此解释为
UNHEALTHY
。
- 超时
健康检查超时。这是 HDS 的一部分,Envoy 将其解释为
UNHEALTHY
。
- 降级
降级。