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

在对其中一个部署进行滚动更新后,应用程序失败,导致Pod永不启动( pods 卡在CrashLoopBackOff状态中)。但是,早期版本的Pod仍在运行。但是,该服务的状态似乎仍然不健康:

kubernetes - 滚动更新部署后,AWS ALB的运行状况不佳-LMLPHP

这意味着现在所有流量都被重定向到默认后端,即另一个服务。在这种情况下,在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端点发出/响应,但是对于此特定应用程序,它没有在该端点上返回200响应。

由于ALB由alb-ingress-controller控制,因此我在入口处添加了一个注释以配置正确的路径:alb.ingress.kubernetes.io/healthcheck-path: /health。由于我们正在使用Spring Microservices,因此该端点适用于我们所有的应用程序。

关于kubernetes - 滚动更新部署后,AWS ALB的运行状况不佳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55831507/

10-09 08:23