【问题标题】:How to debug a 502 error in GCP LoadBalancer如何在 GCP LoadBalancer 中调试 502 错误
【发布时间】:2021-08-28 05:09:29
【问题描述】:

我有一个 k8s 入口,背后有超过 5 个后端服务。入口生成一个 GoogleCloud LoadBalancer。

每个服务都通过 http path 规则路由到流量。例如。一个应用在/foo,另一个在/bar,等等。 他们都工作正常。然后我添加了一个新应用程序,具有后端服务和路由规则,与其他应用程序完全相同。

但是当我点击新应用的 URL 时,我经常收到此错误:

Error: Server Error
The server encountered a temporary error and could not complete your request.
Please try again in 30 seconds.

当我在 GCP 控制台中打开入口时,我可以看到以下警告:

不健康的服务是我新添加的应用程序中的服务。

奇怪的是,当我点击 URL 时,应用程序确实获得了流量。我可以在日志中看到它。但我仍然收到 502 错误,并且后端服务显示为不健康。

我不确定如何调试它以找出问题所在。

【问题讨论】:

  • 您的后端服务的健康检查 url 是否返回 200 响应?运行状况检查可能会失败,因为您的应用正在重定向到您的 liveness/readiness 探针上的登录页面(302 响应)。
  • 我在这个应用程序上没有运行状况检查端点。它只是一个服务器静态文件的 node.js 服务器。它配置为对任何端点(又名*)的命中将重定向到不同的应用程序(如果没有可用的访问令牌)或仅提供静态文件。
  • 当您设置入口资源时,GCP 会为负载均衡器中的所有后端服务创建运行状况检查。默认路径是“/”根 url。如果您希望健康检查 url 是其他内容,则需要将就绪探针附加到您的 pod。
  • 正如其他人评论的那样,如果后端收到流量并且负载均衡器报告不健康,则您的健康检查失败。解决该问题后,请发布显示问题和解决方案的答案,以造福他人。
  • 我可以看到 in the GCP ingress docs 的默认路径是 / 健康检查的根 URL。但是如果我有readiness 探测,入口会将其健康检查重定向到readiness 探测的路径。我添加了探针,但服务仍然停留在UNHEALTHY 状态。当我在 GCP 控制台中打开 healthcheck 对象时,它的路径仍然是/

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress google-cloud-load-balancer


【解决方案1】:

所以,问题在于 LB 运行状况检查命中 /,这是应用程序上不存在的端点(也就是它没有返回 OK 200)。

我在 k8s Deployment 中添加了readiness 探针。根据GCP Ingress docs,如果有readiness 探测,入口将拾取它并将其用作LB 健康检查。

我还必须手动更新后端服务的运行状况检查对象所访问的路径。我猜在设置入口之前应该存在带有就绪探针的 pod,否则它不会自动更新健康检查对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2020-10-10
    • 2020-05-08
    • 1970-01-01
    • 2017-06-29
    • 2017-05-09
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多