【问题标题】:ECS instance can't connect to itself behind network load balancerECS 实例无法在网络负载均衡器后面连接到自身
【发布时间】:2022-03-12 01:55:03
【问题描述】:

我们有一个服务(基于 java)和 mysql 都作为 ECS 服务运行。该服务希望通过网络 ELB 与 mysql 数据库通信。

当我们的服务和mysql数据库在同一个EC2实例上运行时,无法连接到mysql数据库。我可以使用 telnet 重现这一点 - 如果我从另一台可以连接的计算机通过 ELB 远程登录到 mysql 数据库,但是如果我 ssh 到运行 mysql 的 EC2 实例,然后尝试通过 ELB 远程登录到它,它只是挂起。

发生了什么事?

【问题讨论】:

  • 为什么要通过负载均衡器与数据库通信?你有多个数据库吗?另外,使用的安全组配置是什么?
  • @JohnRotenstein 我有点犹豫要不要回答你的问题,因为我担心它是在解决问题的上下文而不是问题的核心,我可能通过提供 TMI 来混淆了。将问题想象成一个简单的问题:“当我通过网络负载均衡器路由时,我无法从一个 ECS 服务连接到在同一台机器上运行的另一个 ECS 服务”。为了回答你的问题,我们这样做是为了给数据库分配一个端口号,然后连接到它的客户端不需要关心它的位置。只要它保留它的端口,我们就可以将它移动到另一个地方。

标签: amazon-elb


【解决方案1】:

如果一个实例需要通过网络负载均衡器连接到自身,我认为让它工作的唯一方法是禁用负载均衡器目标组上的客户端 IP 保留。

来自https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html

检查您的目标组是否启用了客户端 IP 保留。 启用客户端 IP 保留的负载均衡器不支持 发夹或环回。如果实例是负载均衡器的客户端 它已注册并启用了客户端 IP 保留, 只有当请求被路由到不同的 实例。否则,源 IP 地址和目标 IP 地址是 一样,连接超时。

如果一个实例必须向它所在的负载均衡器发送请求 注册,请执行以下操作之一:

禁用客户端 IP 保留。

确保必须通信的容器位于不同的 容器实例。

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2015-05-02
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多