健康檢查 (proto)

  • 健康檢查 架構概觀

  • 如果為叢集設定了健康檢查,則會發出額外的統計資訊。這些資訊記錄在此處

config.core.v3.HealthStatusSet

[config.core.v3.HealthStatusSet proto]

{
  "statuses": []
}
statuses

(重複 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, 必要) 等待健康檢查回應的時間。如果達到逾時時間,則健康檢查嘗試將被視為失敗。

interval

(Duration, 必要) 健康檢查之間的間隔。

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, 必要) 主機被標記為不健康之前所需的不健康健康檢查次數。請注意,對於 http 健康檢查,如果主機的回應程式碼不在 expected_statusesretriable_statuses 中,則會忽略此閾值,並且主機會立即被視為不健康。

healthy_threshold

(UInt32Value, 必要) 主機被標記為健康之前所需的健康健康檢查次數。請注意,在啟動期間,只需要一次成功的健康檢查即可將主機標記為健康。

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) .. 注意:: 此欄位已棄用,改用延伸模組 event_logger 和檔案接收器延伸模組中的 event_log_path

指定健康檢查事件記錄的路徑。

event_logger

(重複 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 項目。這允許為健康檢查使用不同的傳輸通訊端功能,而不是代理到端點。

如果指定的鍵/值對與任何傳輸層 Socket 匹配不符,則叢集的傳輸層 Socket將用於健康檢查 Socket 設定。

config.core.v3.HealthCheck.Payload

[config.core.v3.HealthCheck.Payload proto]

描述 Payload 中位元組的編碼方式。

{
  "text": ...,
  "binary": ...
}
text

(string) 十六進位編碼的 Payload。例如,「000000FF」。

textbinary 必須設定其中一個。

binary

(bytes) 二進位 Payload。

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 健康檢查請求中 host 標頭的值。如果留空 (預設值),將使用與此健康檢查相關聯的叢集名稱。可以透過設定 hostname 欄位來自訂特定端點的 host 標頭。

path

(string, REQUIRED) 指定健康檢查期間將請求的 HTTP 路徑。例如 /healthcheck

receive

(repeated config.core.v3.HealthCheck.Payload) 指定 HTTP 預期回應的清單,以在回應主體的首 response_buffer_size 個位元組中進行匹配。如果設定了此項,則預期的回應檢查和狀態碼都會決定健康檢查的結果。檢查回應時,會執行「模糊」匹配,以便找到每個 Payload 區塊,並且按照指定的順序,但不一定是連續的。

Note

建議根據 Payload 的總大小設定 response_buffer_size 以提高效率。未設定時,預設的緩衝區大小為 1024 位元組。

response_buffer_size

(UInt64Value) 指定用於 Payload 匹配的回應緩衝區大小,以位元組為單位。預設值為 1024。設定為 0 表示 Payload 將與整個回應進行匹配。

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) 空白的 Payload 表示僅連接的健康檢查。

receive

(repeated config.core.v3.HealthCheck.Payload) 檢查回應時,會執行「模糊」匹配,以便找到每個 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

(重複的 config.core.v3.HeaderValueOption) 指定應新增至發送到健康檢查叢集的每個 GRPC 呼叫中繼資料的鍵值對列表。如需更多資訊,包括標頭值語法的詳細資訊,請參閱關於自訂請求標頭的文件。

config.core.v3.HealthCheck.CustomHealthCheck

[config.core.v3.HealthCheck.CustomHealthCheck proto]

自訂健康檢查。

{
  "name": ...,
  "typed_config": {...}
}
name

(字串必要) 已註冊的自訂健康檢查器名稱。

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

(重複的 字串) 指定健康檢查連線的 ALPN 協定。如果對應的上游使用基於 ALPN 的 FilterChainMatch 以及健康檢查與資料連線使用不同的協定,這會很有用。如果為空,則不會在健康檢查連線上設定任何 ALPN 協定。

列舉 config.core.v3.HealthStatus

[config.core.v3.HealthStatus proto]

端點健康狀態。

UNKNOWN

(預設) ⁣健康狀態未知。Envoy 將其解釋為 HEALTHY

HEALTHY

⁣健康。

UNHEALTHY

⁣不健康。

DRAINING

⁣連線正在耗盡中。例如,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

TIMEOUT

⁣健康檢查逾時。這是 HDS 的一部分,Envoy 將其解釋為 UNHEALTHY

DEGRADED

⁣降級。