我们有一个由 kubernetes 入口创建的HTTP(s) 负载均衡器,它指向由一组运行 nginx 和 Ruby on Rails 的 pod 形成的后端。
查看负载均衡器日志,我们检测到越来越多的请求的响应代码为0
and statusDetails
= client_disconnected_before_any_response
。
我们正试图了解他为什么会发生这种情况,但我们没有发现任何相关信息。nginx 访问或错误日志中没有任何内容。
这发生在从 GET 到 POST 的多种请求中。
我们还怀疑,有时尽管请求记录了该错误,但请求实际上已传递到后端。例如,我们看到 PG::UniqueViolation 错误,这是由于在我们的注册端点中向后端发送了两次相同的注册请求。
任何形式的帮助将不胜感激。谢谢!
更新 1
这里要求的是入口资源的 yaml文件:
更新 2
我创建了一个基于日志的 Stackdriver 指标,以计算呈现此行为的请求数。这是图表:
大峰值与这些 kubernetes 事件的时间戳大致匹配:
完整错误:Readiness probe failed: Get http://10.48.1.28:80/health_check: net/http: request canceled (Client.Timeout exceeded while awaiting headers)"
因此,有时后端后面的 pod 的就绪性探测似乎会失败,但并非总是如此。
这是readinessProbe的定义
readinessProbe:
failureThreshold: 3
httpGet:
httpHeaders:
- name: X-Forwarded-Proto
value: https
- name: Host
value: [redacted]
path: /health_check
port: 80
scheme: HTTP
initialDelaySeconds: 1
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 5