当前位置: 首页 > 知识库问答 >
问题:

Spring Boot管理端口的ECS健康检查问题

乜业
2023-03-14

设置-1:(不工作)

我有一个任务正在ECS集群中运行。但由于在它开始后立即进行了健康检查,它正在下降。

我的服务是基于spring boot的,它有流量(用于服务调用)和管理端口(用于健康检查)。我有“*/health”路径的“permitAll()权限。

PFA:我也通过在TG运行状况检查选项卡中选择覆盖端口选项进行了相同的配置。

service:
  image: repo/a:name
  container_name: container-1
  ports:
    - "9904:9904" # traffic port
    - "8084:8084". # management Port

因此,我尝试在容器部分的任务定义上配置管理端口。我尝试为TD的最新版本更新相应的服务,但是当我保存此服务时,我收到一个错误。这是正确的处理方法吗?

ECS控制台出错:

Failed updating Service : The task definition is configured to use a dynamic host port, 
but the target group with targetGroupArn arn:aws:elasticloadbalancing:us-east-2:{accountId}:targetgroup/ecs-container-tg/{someId} has a health check port specified.
Service

两种可能的解决方案:

  1. 有没有办法在docker文件中指定此端口映射?
  2. 在ECS内任务定义的容器配置中配置管理端口映射的另一种方法?(首选)
  3. 摆脱Spring Boot的执行器endpoint并实现我们自己的健康endpoint?(坏:因为我需要实现很多东西来显示Spring boot返回的所有详细信息)

共有2个答案

杨良平
2023-03-14

因此,在做了两天不同的事情之后:

  1. 在任务定义中,网络模式应为“桥接”类型
  2. 在任务定义中,将CPU和内存单元留空。在容器级别提供它们就足够了
颛孙镜
2023-03-14

任务定义配置为使用动态主机端口,但目标具有指定的健康检查端口。

根据错误,您似乎在任务定义中配置了动态端口映射,您可以在任务定义中验证这一点。

了解amazon ecs中的动态端口映射

所以在动态端口中,ECS调度会在主机中分配和发布与8082不同的随机端口,因此根据流量端口相应地更改健康检查设置。

这将解决健康问题,现在请回答您的问题

有没有办法在docker文件中指定此端口映射?

不,端口映射发生在运行时而不是构建时,您可以在任务定义中指定它。

在ECS内任务定义的容器配置中配置管理端口映射的另一种方法?(首选)

您可以分配静态端口映射,这意味着发布端口和公开端口将相同。在本健康检查中,将使用静态端口映射。

摆脱Spring Boot的执行器endpoint,实现我们自己的健康endpoint?(坏:因为我需要实现很多东西来显示spring boot返回的所有细节)

Healthcheck是一个简单的HTTP获取一个调用,ALB期望得到200个HTTP状态码作为响应,因此您可以创建一个简单的endpoint,该endpoint将返回200个HTTP状态码。

 类似资料:
  • Amazon ECS支持两种不同类型的健康检查: 目标组健康检查发出可配置的网络请求 容器健康检查在docker容器中运行,可以配置为运行容器支持的任何shell命令 如果两个健康检查都配置了,那么哪一个会赢?如果其中一个失败,服务是否标记为不健康?或者两者都有?我可以将一个配置为覆盖另一个吗? 我非常希望目标组的健康状态不会导致ECS不断跳出服务,我希望可以使用容器健康检查来覆盖它。

  • 当我使用动态端口设置时,我的ECS设置在运行状况检查中不断失败。 这是我的设置: 我有一个spring boot web应用程序,它使用端口10440。因此,在我的任务定义中,我使用端口0作为我的主机端口来启用动态移植,并使用10440作为我的容器端口。我有两个2 ec2实例,在我的服务中运行2个任务。但由于健康检查失败,我的任务一直在终止。 屏幕截图: -任务事件日志 -目标组中注册的ec2实例

  • 我正在尝试设置aws ecs fargate部署配置。我能够在没有容器健康检查的情况下运行容器。但是,我也想运行容器健康检查。我尝试了所有可能的场景来实现这一点。但是,没有运气。 我尝试使用下面的aws recommeded命令从列出的URL验证容器健康检查。 https://docs.aws.amazon.com/amazonecs/latest/developerguide/task_defi

  • 我需要改变频率来检查springboot执行器中的DB运行状况。默认DB运行状况检查查询每毫秒执行一次。我想让这个查询每1分钟后执行一次,而不是毫秒。有什么方法可以自定义它吗?

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 因此,我们正在使用全局MTL部署istio 1.0.2,目前进展顺利。对于健康检查,我们为服务添加了单独的端口,并根据文档进行了配置: https://istio.io/docs/tasks/traffic-management/app-health-check/#mutual-tls-is-enabled 我们的应用程序端口现在位于 8080 上,运行状况检查端口位于 8081 上。完成此操作后