【问题标题】:Check health of main container using a sidecar in Kubernetes?在 Kubernetes 中使用 sidecar 检查主容器的运行状况?
【发布时间】:2020-11-28 00:37:42
【问题描述】:

是否有通用的方法来查询容器的健康状况?

我想在每个 pod 中注入一个通用的 sidecar 容器,从而在不同的端点上公开“主”容器的健康状况。

我的主容器受到oauth2 的保护,因此我无法使用StatusCake 进行任何正常运行时间检查。

这个想法是注入一个 sidecar,它只能报告暴露路径上的容器运行状况。然后我可以配置StatusCake 来查询那个端点。

我可以在 Sidecar 中查询“官方”健康端点,但我不知道如何一般注入路径。

我还想知道是否可以通过一些kubectl 命令检查健康状况?

【问题讨论】:

  • 在没有 oauth2 的情况下暴露容器的 health(z) 端点没有任何问题
  • 是的,其实我忘记了。我希望我不需要接触所有的 Ingress,而只需注入 sidecar。
  • 啊,有些 Ingress 来自我无法控制的图表。

标签: kubernetes


【解决方案1】:

你基本上不能做你想做的事,我将解释原因:如果你向 Kubernetes 注册健康检查并且它返回未准备好,你的服务不会将请求路由到它。这意味着,如果您还没有准备好,那么通过 HTTP 公开的任何内容都不会起作用。

不过,有一种解决方法:编写一个代理到所有其他 pod 端点的服务。

作为参考,这是 Kubernetes 打算你要做的

  • 为您的 pod 创建实时且就绪的探针。
  • 这些应该是未经身份验证的,并且通常除了健康/不健康之外基本上不提供任何信息。
  • 向 Kubernetes 注册这些探测后,将使用 kubectl 查看最后一次成功/失败。
  • 如果您真的不希望人们查看它们,请不要将该 URL 暴露给外界。
  • 您始终可以提供提供详细信息的替代方案。这可能需要身份验证。

【讨论】:

    【解决方案2】:

    我建议使用kubernetes提供的readiness probe作为sidecar容器的健康检查。然后你可以使用kubectl来检查sidecar容器的健康以及使用StatusCake

    作为 Sidecar 的就绪探测实施的一部分,您对主容器进行健康检查。由于 sidecar 容器和 main 容器是同一个 pod 的一部分,localhost 可用于从 sidecar 容器连接到主容器。

    【讨论】:

    • 我不明白这将如何解决我的问题。我希望能够在不提供任何凭据且不损害集群安全性的情况下从集群外部 ping 我的 pod 的运行状况。 kubectl 只能使用凭据。
    • kubectl 在没有凭据的情况下是不可能的..但是在这个 caae 中你不需要使用 kubectl..你可以通过 curl 或任何东西从集群外部击中 sidecar 的未受保护端点..当你击中了 sidecar 的未受保护端点,它将击中主容器的受保护端点。就绪探针有助于在发生故障时监控和重新启动容器
    猜你喜欢
    • 2019-04-25
    • 2016-07-12
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2019-11-28
    • 2021-01-30
    相关资源
    最近更新 更多