健康檢查 (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_statuses 或 retriable_statuses 中,則會忽略此閾值,並且主機會立即被視為不健康。
- healthy_threshold
(UInt32Value, 必要) 主機被標記為健康之前所需的健康健康檢查次數。請注意,在啟動期間,只需要一次成功的健康檢查即可將主機標記為健康。
- 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) .. 注意:: 此欄位已棄用,改用延伸模組 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": ...
}
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
降級。