AWS 网络负载均衡器和桥接模式

问题描述 投票:0回答:1

我在 AWS 上配置了两个负载均衡器: 1) 应用程序负载均衡器,具有 HTTPS 和 SSL 证书上的一个目标组,该证书指向端口 5000 上的 Nodejs 应用程序 2) 网络负载均衡器,80 和 443 上的 TCP 侦听器指向 nginx(openresty + lua 用于动态证书生成),将请求路由到端口 5000 上的 Nodejs 应用程序

两个ELB都指向同一个集群和同一个服务:

"loadBalancers": [
{
"containerName": "uppo-kb",
"targetGroupArn": "arn:aws:elasticloadbalancing:eu-central-1:496080483451:targetgroup/ecs-Uppo-uppo-kb/6965729827dccb83",
"containerPort": 5000
},
{
"containerName": "uppo-nginx",
"targetGroupArn": "arn:aws:elasticloadbalancing:eu-central-1:496080483451:targetgroup/nginx-80/1797fbb0e9dbc8db",
"containerPort": 80
},
{
"containerName": "uppo-nginx",
"targetGroupArn": "arn:aws:elasticloadbalancing:eu-central-1:496080483451:targetgroup/nginx-443/af722a3b9bf728a3",
"containerPort": 443
}
]

网络模式为桥接,实例通过动态端口映射正确连接到上面列出的每个目标组。 ALB 工作正常,但 NLB 无法通过 TCP 或 HTTPS 解析运行状况检查,且路径和curl 挂起

*   Trying 3.126.131.185...
* TCP_NODELAY set

Nginx 配置正确,本地运行容器或通过 ssh 访问 ec2 主机按预期工作,并且 nginx 响应 200 OK。 也许 NLB 不支持桥接模式,或者只是 NLB 没有开始将流量路由到那些不健康的实例?

amazon-web-services nginx amazon-ec2 amazon-ecs
1个回答
0
投票

所以我偶然发现了这个问题,并且我自己做了研究。

故障排除页面提到以下主要问题:

  • 安全组不允许流量
  • 网络访问控制列表 (ACL) 不允许流量
  • 目标位于未启用的可用区中
  • 该实例位于对等 VPC 中

具体最后一项好像不太明显:

如果您的 VPC 中有与负载均衡器 VPC 对等互连的实例,则必须通过 IP 地址(而不是实例 ID)向负载均衡器注册它们。

虽然他们声称你必须使用

ip
目标,但我发现博客文章(我认为)正是讨论了这个问题:

Hairpinning example, Figure 4

发夹

在此上下文中,发夹是指流量源自并发往同一主机并通过网络负载均衡器的场景,如图 4 所示。这种场景最有可能发生在运行容器化工作负载的环境中。由于网络负载均衡器处理客户端 IP 保留的方式,通过网络负载均衡器发夹流量时,连接可能会失败。 停用客户端 IP 保留允许发夹路由 [...]

换句话说,从负载均衡器的角度来看,源 IP 和目标 IP 相同,并且数据包可能会被丢弃。话虽这么说,安全组可能会导致相同的黑洞效应,这使得一切都更加难以调试。

© www.soinside.com 2019 - 2024. All rights reserved.