介紹
您可以讓Kong代理的API使用ring-balancer,通過添加包含一個或多個目標實體的 upstream 實體進行配置,每個 target指向不同的IP地址(或主機名)和端口。ring-balancer將在各種目標之間負載,並基於上游對目標執行健康檢查,使它們無論是否響應都是健康的或不健康的。然后,ring-balancer 只會將流量路由到健康的目標。
Kong有兩種健康檢查方法,可分別或同時使用:
- active checks主動檢查,其中定期請求目標中的特定HTTP或HTTPS端點,並根據其響應確定目標的健康狀態;
 - passive checks被動檢查(也稱為斷路器),Kong在其中分析正在代理的流量,並根據目標的行為響應請求來確定目標的健康狀況。
 
健康與不健康目標
健康檢查功能的目標是為給定的Kong節點動態地將目標標記為健康或不健康。沒有集群范圍內的健康信息同步:每個Kong節點分別決定其目標的健康。這是可取的,因為某個Kong節點可以連接到一個目標,但另一個Kong節點未必能連接該目標:第一個節點將考慮它健康,而另一個將其標記為不健康的,將請求路由到其他目標(健康)。
主動探測(在主動健康檢查上)或代理請求(在被動健康檢查上)都會生成用於確定目標是否健康的數據。請求可能會產生TCP錯誤、超時或HTTP狀態代碼。基於此信息,健康檢查器更新一系列內部計數器:
- 如果返回的狀態碼是配置為“健康”的狀態碼,將增加目標的“success”計數器,並清除其所有其他計數器;
 - 如果連接失敗,則增加目標的“TCP failure”計數器,清除“success”計數器;
 - 如果超時,將增加目標的“超時”計數器,清除“成功”計數器;
 - 如果返回的狀態代碼被配置為“不健康”,它將增加目標的“HTTP故障”計數器,並清除“成功”計數器。
 
如果任何“TCP失敗”、“HTTP失敗”或“超時”計數器達到其配置的閾值,目標將被標記為不健康。
如果“成功”計數器達到其配置的閾值,則將目標標記為健康。
HTTP狀態碼為“健康”或“不健康”的列表,並且每個計數器的獨立閾值可以在每個上游的基礎上進行配置。下面,我們有一個上游實體的配置示例,展示了用於配置健康檢查的各種字段的默認值。每個字段的描述包含在Admin API 參考文檔中。
{ "name": "service.v1.xyz", "healthchecks": { "active": { "concurrency": 10, "healthy": { "http_statuses": [ 200, 302 ], "interval": 0, "successes": 0 }, "http_path": "/", "timeout": 1, "unhealthy": { "http_failures": 0, "http_statuses": [ 429, 404, 500, 501, 502, 503, 504, 505 ], "interval": 0, "tcp_failures": 0, "timeouts": 0 } }, "passive": { "healthy": { "http_statuses": [ 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308 ], "successes": 0 }, "unhealthy": { "http_failures": 0, "http_statuses": [ 429, 500, 503 ], "tcp_failures": 0, "timeouts": 0 }