backend_connection_closed_before_data_sent_to_client
GKE负载平衡出现以下错误
{
"insertId": "2s6fnng1hodqg9",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry",
"statusDetails": "backend_connection_closed_before_data_sent_to_client"
},
"httpRequest": {
"requestMethod": "POST",
"requestUrl": "https://myhost.com/xxx",
"requestSize": "2105",
"status": 502,
"responseSize": "1749",
"userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; PACM00 Build/QP1A.190711.020)",
"remoteIp": "108.2.118.7",
"latency": "0.196275s"
},
"resource": {
"type": "http_load_balancer",
"labels": {
"url_map_name": "k8s2-um-ncl1za1o-server-4asvtfi2",
"forwarding_rule_name": "k8s2-fs-ncl1za1o-server-4asvtfi2",
"target_proxy_name": "k8s2-ts-ncl1za1o-server-4asvtfi2",
"backend_service_name": "",
"project_id": "project_xxx",
"zone": "global"
}
},
"timestamp": "2021-03-30T08:56:14.246839Z",
"severity": "WARNING",
"logName": "projects/project_xxx/logs/requests",
"trace": "projects/project_xxx/traces/0da5955f95fa5ff8ee4e5",
"receiveTimestamp": "2021-03-30T08:56:16.439355873Z",
"spanId": "6c480f02d61ed310"
}
据此_
在将响应代理到客户端之前,后端意外关闭了与负载均衡器的连接。如果负载均衡器将流量发送到另一个实体,则可能会发生这种情况。另一个实体可能是第三方负载平衡器,其 TCP 超时时间短于外部 HTTP(S) 负载平衡器的 10 分钟(600 秒)超时。第三方负载均衡器可能在 VM 实例上运行。手动将目标服务上的 TCP 超时(keepalive)设置为大于 600 秒可能会解决此问题。
我们所做的
-
- 将超时更改为 620 秒以在后端保持活动状态
-
- 将 LB 后端服务超时设置的超时更改为 620 秒
receiveTimestamp
但是,和的时间跨度timestamp
是2秒,这让我们很困惑,为什么超时这么短?
还有一个问题,502 仅来自特定代理“Dalvik/2.1.0”,这是一件奇怪的事情。所有其他客户端都可以正确地将数据发布到后端服务器。
我们如何在 GKE 中调试这个问题?