健康检查 (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_statusesretriable_statuses 中,则会忽略此阈值,并且主机将被立即视为不健康。

healthy_threshold

(UInt32Value, REQUIRED) 在主机被标记为健康之前所需的健康检查健康次数。请注意,在启动期间,只需一次成功的健康检查即可将主机标记为健康。

reuse_connection

(BoolValue) 在健康检查之间重用健康检查连接。默认值为 true。

http_health_check

(config.core.v3.HealthCheck.HttpHealthCheck) HTTP 健康检查。

必须设置以下一项:http_health_checktcp_health_checkgrpc_health_checkcustom_health_check

tcp_health_check

(config.core.v3.HealthCheck.TcpHealthCheck) TCP 健康检查。

必须设置以下一项:http_health_checktcp_health_checkgrpc_health_checkcustom_health_check

grpc_health_check

(config.core.v3.HealthCheck.GrpcHealthCheck) gRPC 健康检查。

必须设置以下一项:http_health_checktcp_health_checkgrpc_health_checkcustom_health_check

custom_health_check

(config.core.v3.HealthCheck.CustomHealthCheck) 自定义健康检查。

必须设置以下一项:http_health_checktcp_health_checkgrpc_health_checkcustom_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_loggerevent_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": ...
}
text

(string) 十六进制编码的有效负载。例如,“000000FF”。

必须且仅必须设置以下字段之一:textbinary

binary

(bytes) 二进制负载。

必须且仅必须设置以下字段之一:textbinary

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": ...
}
host

(string) HTTP 健康检查请求中的主机头值。如果为空(默认值),将使用与该健康检查关联的集群的名称。可以通过设置 hostname 字段来为特定端点自定义主机头。

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

降级

⁣降级。