【问题标题】:Traefik health checks via kubernetes annotation通过 kubernetes 注释进行 Traefik 健康检查
【发布时间】:2019-02-15 22:22:36
【问题描述】:

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

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

我知道在 Kubernetes 中你可以为 Pod 配置就绪/活跃度探测,但我有领导/追随者时尚服务,所以 Traefik 应该只将流量路由到领导者。

UPD:

  • 唯一的leader可以接受来自Traefik的连接;追随者将拒绝连接。
  • 我有两个准备情况检查:
    • 服务已启动并正在运行,并准备好被选为领导者(kubernetes 就绪探测)
    • 服务已启动并运行并提升为领导者(traefik 健康检查)

【问题讨论】:

    标签: kubernetes traefik kubernetes-ingress


    【解决方案1】:

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

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

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

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


    作为提高稳健性的未来考虑,您可以将服务的入口层与实现主/从系统的业务逻辑分开,允许所有实例与 Traefik 通信并将工作排入队列以供任何“主”考虑节点。

    【讨论】:

    • 我对 kubernetes 就绪探测不太满意,因为很难区分是处于健康状态但被选为跟随者的 pod,还是不健康的 pod。
    • 我同意这是次优的。如果您不想使用就绪检查,则需要考虑重新构建应用程序以在其他地方做出路由决策。
    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多