【发布时间】: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.
不健康的服务是我新添加的应用程序中的服务。
奇怪的是,当我点击 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