滚动更新部署后 AWS ALB 不健康目标

AWS ALB unhealthy target after rolling update of deployment

我有一个 EKS 集群,aws-alb-ingress-controller 控制指向 EKS 集群的 AWS ALB 的设置。

对其中​​一个部署进行滚动更新后,应用程序失败,导致 Pod 永远无法启动(pod 卡在状态 CrashLoopBackOff)。不过之前的版本Pod还是运行。但是好像服务的状态还是不健康:

这意味着现在所有流量都被重定向到默认后端,这是一项不同的服务。在这种情况下,在 Kubernetes 中,部署的相关服务类型为 NodePort:

Type:                     NodePort
IP:                       172.20.186.130
Port:                     http-service  80/TCP
TargetPort:               5000/TCP
NodePort:                 http-service  31692/TCP
Endpoints:                10.0.3.55:5000

是什么导致端点变得不健康?我希望它只是将流量重定向到仍然是 运行 的 Pod 的旧版本。有什么方法可以确保端点保持健康?

问题是,虽然在 Kubernetes 中应用程序是健康的,但 ALB 负载均衡器执行它自己的健康检查。此健康检查默认配置为期望来自 / 端点的 200 响应,但是对于此特定应用程序,它没有 return 该端点上的 200 响应。

由于 ALB 是由 alb-ingress-controller 控制的,我在我的 ingress 上添加了一个注解来配置正确的路径:alb.ingress.kubernetes.io/healthcheck-path: /health。由于我们正在使用 Spring 微服务,因此该端点适用于我们所有的应用程序。