【问题标题】:Health Check on Cloud FoundryCloud Foundry 的健康检查
【发布时间】:2021-12-29 14:04:10
【问题描述】:

我有一个关于应用程序“健康检查”的问题。我指的是文档:https://docs.cloudfoundry.org/devguide/deploy-apps/healthchecks.html,我知道当我们部署应用程序时,会创建一个默认的“健康检查”,其类型为 PORT。 CloudFoundry 会自动检查此端口的运行状况。

我的问题是:

  1. 我已经在 CF 上部署了一个带有默认运行状况检查的应用程序。当我ssh 进入已部署的应用程序并尝试使用命令lsof -i -P -n 搜索可用端口时,我看到以下响应:
     COMMAND   PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
    java                 7 vcap   47u  IPv4 474318791      0t0  TCP *:8080 (LISTEN)
    diego-ssh       8 vcap    3u  IPv4 474330297      0t0  TCP *:2222 (LISTEN)
    diego-ssh       8 vcap    7u  IPv4 474330524      0t0  TCP 10.XXX.XX.XXX:2222->10.YYY.YY.YYY:58858 (ESTABLISHED)

您能告诉我上述响应中的哪一个作为健康检查端口吗? (还是我看错地方了??)

  1. 我了解到 CF 连接此端口以对已部署的应用程序进行健康检查。是否可以手动连接到已部署应用程序的此健康检查端口(类似于 CF 在内部所做的)?如何在 Mac 系统(已安装 cf cli)上执行此操作

【问题讨论】:

    标签: cloud-foundry health-check sap-cloud-foundry


    【解决方案1】:

    您能告诉我上述响应中的哪一个作为健康检查端口吗? (还是我看错地方了??)

    我怀疑这是你的应用程序。

    java 7 vcap 47u IPv4 474318791 0t0 TCP *:8080 (LISTEN)

    它正在侦听端口 8080,这几乎总是 Cloud Foundry 会告诉您的应用程序侦听的端口(即$PORT)。

    但这不是回应。您的应用程序正在侦听该端口上的连接。健康检查(TCP 健康检查)将定期运行并与通过$PORT(即 8080)分配的值建立 TCP 连接。如果该 TCP 连接成功,则健康检查通过。如果无法连接或超时,则健康检查失败并且平台确定您的应用程序已崩溃。然后它将重新启动应用程序实例。

    我了解 CF 连接此端口以对已部署的应用程序进行运行状况检查。是否可以手动连接到已部署应用程序的此健康检查端口(类似于 CF 内部所做的)?

    是的。 cf ssh 进入您的应用程序。然后运行nc -v localhost 8080。这将建立一个 TCP 连接。 -v 标志为您提供详细的输出。

    例如:

    > nc -v localhost 8080 # successful
    Connection to localhost port 8080 [tcp/http-alt] succeeded!
    
    > nc -v localhost 8081  # failure
    nc: connectx to localhost port 8081 (tcp) failed: Connection refused
    nc: connectx to localhost port 8081 (tcp) failed: Connection refused
    

    如何在 Mac 系统(已安装 cf cli)上执行此操作

    默认情况下,您无权直接执行此操作。这也不是一个公平的比较。运行状况检查从容器内部运行,因此从技术上讲,在您 cf ssh 之后从容器内部运行 nc 是最准确的比较。

    如果你想完成这项工作,你可以在cf ssh 中使用use the tunneling capability。我没有测试,但我认为这样的事情会起作用:cf ssh -L 8080:localhost:8080 YOUR-HOST-APP

    然后您可以将nc -v localhost 8080nc 连接到ssh 正在侦听的本地端口(即<local-port>:<destination>:<destination-port>)。同样,如果您想要准确,那么您应该 cf ssh 进入容器并从那里运行 nc

    【讨论】:

    • 非常感谢@Daniel。很清楚的解释:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2021-09-13
    • 2019-11-03
    相关资源
    最近更新 更多