【问题标题】:Health checking redis container with ALB使用 ALB 进行健康检查 redis 容器
【发布时间】:2021-09-20 23:19:43
【问题描述】:

我使用 Amazon ECS 在应用程序负载均衡器后面部署了一个 redis 容器。尽管容器正在运行并准备好接受连接,但健康检查似乎失败了。它似乎失败了,因为健康检查是HTTP,而redis当然不是http服务器。

# Possible SECURITY ATTACK detected. It looks like somebody is sending 
POST or Host: commands to Redis. This is likely due to an attacker 
attempting to use Cross Protocol Scripting to compromise your Redis 
instance. Connection aborted.

很公平。

我认为经典负载平衡器会很好,因为我可以显式 ping TCP。将redis与ALB一起使用是否可行?

【问题讨论】:

  • 您能解释一下为什么要在负载均衡器后面运行 Redis 吗?通常,如果您要在一组 Redis 节点之间进行平衡,那么在这种情况下,您应该在 Redis 客户端而不是负载平衡器中执行此操作。
  • @AndyShinn 我不需要负载平衡,但我想要一个静态点来访问 redis 实例,这样我就可以将它传递给 Web 应用程序配置。负载均衡器 dns 可以完成此任务。动态端口映射非常适合在单个集群中部署多个非生产 redis 实例。
  • 你是如何解决这个问题的,@bluescores?
  • @San 这是几年前的事了,我不能告诉你!不过,据我所知,ALB 是第 7 层负载均衡器,这意味着它们仅处理 HTTP/HTTPS。网络负载均衡器在第 4 层 (TCP) 上运行,并且可能像我试图做的那样放置在 Redis 前面。作为第 4 层的 NLB 是无上下文的,它只是路由 TCP 流量而不评估或检查数据包。您还可以将 TCP(或 HTTP/HTTPS)用于带有 NLB 的健康检查协议,这应该会成功,因为 RESP 使用 TCP 客户端/服务器连接。

标签: amazon-web-services docker redis amazon-ecs amazon-alb


【解决方案1】:

将您的健康检查更改为协议 HTTPS。所有 Amazon 负载均衡器都支持这一点。您的健康检查越接近用户访问的内容越好。检查 HTML 页面优于 TCP 检查。检查需要后端服务响应的页面会更好。即使您的 Web 服务器不提供页面,TCP 有时也会成功。

【讨论】:

    【解决方案2】:

    部署安装了 nginx 的容器,并将运行状况检查定向到 nginx 处理端口。

    【讨论】:

      【解决方案3】:

      我最近遇到了类似的问题:我的 Redis 容器已启动并正常工作,但 # Possible SECURITY ATTACK detected 消息每分钟出现在日志中一次。健康检查是curl -fs http://localhost:6379 || exit 1;这被Redis code 拒绝(搜索“安全攻击”)。

      我的解决方案是使用非 CURL 健康检查:redis-cli ping || exit 1(取自 this post)。健康检查状态显示“健康”,并且日志是干净的。

      我知道上述解决方案对所有各方来说都不够用,但希望它有助于形成您自己的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多