Traefik 对已删除 Pods 的连接做了什么?

What does Traefik do to connections to deleted Pods?

假设您有一个 k8s 集群,使用 Traefik 作为 Ingress Controller。

一个 HTTP API 应用程序被部署到能够处理 SIGTERM 并且在处理完所有活动请求之前不会退出的集群(具有入口资源)。

假设您使用 10 个副本部署应用程序,获取一些流量并将部署缩减为 5 个副本。这 5 Pods 将从匹配的 Service 资源中拉出。

对于这 5 个 Pods,应用程序将收到 SIGTERM 并开始正常关闭。

问题是,Traefik 将如何处理那些与拔出的 5 Pods 的活动连接?

Traefik 会做第一个:它会优雅地让那些挂起的、进行中的请求完成,但不会将任何进一步的请求转发给终止 pods。

添加一些技术背景:从 Kubernetes 的角度来看,一旦 pod 被视为终止,端点控制器(也是 Kubernetes 控制平面的一部分)将从关联的端点对象中删除其 IP 地址。 Traefik 监视端点上的更新,接收通知,并相应地更新其转发规则。因此,从技术上讲,它无法转发任何进一步的流量,而那些最终请求将继续得到服务(通过先前从 Go 的 http 包中建立的 goroutines)。