-1

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

1 回答 1

2

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

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

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

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

但这不是回应。您的应用程序正在侦听该端口上的连接。$PORT健康检查(TCP 健康检查)将定期运行并与通过分配的值(即 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)执行此操作

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

如果您想完成这项工作,您可能可以使用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从那里运行。

于 2021-12-30T02:12:50.340 回答