滚动更新部署后 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 微服务,因此该端点适用于我们所有的应用程序。
我有一个 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 微服务,因此该端点适用于我们所有的应用程序。