通过 kubernetes 注释进行 Traefik 健康检查

Traefik health checks via kubernetes annotation

我想通过 Kubernetes 注释设置 Traefik 后端健康检查,但根据官方文档,看起来 Kubernetes Ingress 不支持该功能。

Traefik 不支持 Kubernetes Ingress 的功能有什么特别的原因吗?我想知道,因为 Mesos 支持后端健康检查。

我知道在 Kubernetes 中你可以为 pods 配置 readiness/liveness 探测,但我有 leader/follower 时尚服务,所以 Traefik 应该只将流量路由到领导者。

更新:

Traefik 依靠 Kubernetes 来指示底层 pods 的健康状况,以确定它们是否准备好提供服务。 Kubernetes 在 pod 中公开了两种机制来将信息传递给编排层:

  • 活动检查 以在 pod 中的进程 运行 已转换为中断状态时向 Kubernetes 提供指示。失败的活性检查将导致 Kubernetes 销毁 pod 并重新创建它。
  • 准备情况检查 以确定 pod 何时准备好提供服务。失败的就绪检查将导致端点控制器从其提供的任何服务的端点列表中删除 pod。但是,它将保持 运行.

在这种情况下,您将通过就绪检查向 Traefik 公开信息。配置您的 pods 准备就绪检查,如果它们处于不应接收任何流量的状态,则该检查失败。当就绪状态发生变化时,Kubernetes 将针对将流量路由到 pod 以添加或删除 pod 的任何服务更新端点列表。 Traefik 将相应地更新其世界观,以从支持 Ingress 的端点列表中添加或删除 pod。

此模型没有理由与您的 master/follower 架构不兼容,前提是每个 pod 都可以确定它是主节点还是从节点,并在其就绪检查中提供适当的指示。但是,如果不特别注意, 会在 master/follower 状态更改和 Kubernetes 更新其端点之间进行竞争,因为就绪性探测只是定期进行。我建议假设情况会是这样,并建立逻辑来拒绝非主 pods.

收到的请求

作为未来增加健壮性的考虑,您可以将服务的入口层与实现 master/follower 系统的业务逻辑分开,允许所有实例与 Traefik 通信并将工作排队以供考虑此时的 "master" 节点。