Cloud Foundry 健康检查

Health Check on Cloud Foundry

我有一个关于应用程序“健康检查”的问题。我指的是文档: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)

Can you tell me which one of the above response acts as the health check port ? ( or am I looking at the wrong place ??)

我怀疑这是你的申请。

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

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

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

I understand that CF connects this port to do a health check for the deployed app. Is it possible to connect to this Health Check Port of a deployed application manually ( similar to what CF does internally) ?

是的。 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

How to do so from a Mac system ( which has the cf cli installed )

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

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

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