amazon-web-services - 带有 ECS 的 AWS 应用程序负载均衡器
问题描述
我有以下 AWS 设置:
- 具有 2 个 EC2 实例的 ECS 集群,每个实例在不同 AZ 内的自己的子网中运行
- 几个微服务,它们只运行每个任务,因为它们是有状态的
- 一个内部应用程序负载均衡器,每个微服务的目标组按端口映射
现在想象以下场景:服务 1 想要与在另一个 AZ 中的另一个 EC2 实例上运行的服务 2 通信。作为服务 2 的 URL,我使用负载均衡器的 DNS 名称和端口:internal-load-balancer:8082/path
。这是必要的,因为我正在使用滚动部署,因此每次部署后微服务在两个 EC2 实例之间移动。
现在,如果我执行host internal-load-balancer
,我会返回 2 个 IP 地址,一个用于运行在子网 1 中的负载均衡器,一个用于运行在子网 2 中:
- 10.0.0.11
- 10.0.32.11
如果我现在在服务 1 上执行以下 curl 命令:
curl 10.0.0.11:8082/
我找回了网关超时curl 10.0.32.11:8082/
按预期工作,我得到了 200curl 10.0.32.10:8082/
也有效
那么,如果我在同一个子网中使用负载均衡器而不是在另一个子网中,那么为什么这会起作用呢?如果我直接联系其他 AZ 中的 EC2 实例,它也可以工作。问题是 DNS 记录解析为两个 IP 地址,而微服务只是随机使用其中一个,所以我的一半请求在另一半超时。
那么我在这里做错了什么???在此先感谢您的支持:)
解决方案
所以好像我在这里找到了解决这个问题的方法。基本上我为解决这个问题所做的是将应用程序负载均衡器移动到连接了互联网网关的公共子网,现在两个负载均衡器都可以正常工作......我不知道为什么它只能这样工作,但我很高兴我找到了解决这个问题的方法:)
谁能向我解释为什么 ALB 需要位于公共子网中?
推荐阅读
- html - 如何在 css/div 容器中调整背景图像的大小?
- javascript - 将结果推送到对象
- android - 由于 Hilt 错误,应用程序未初始化
- python-3.x - 计算均匀性的度量标准,对较低的值进行惩罚
- r - 根据一组字符串条件创建一个新列
- javascript - Javascript reverse() 在循环中不起作用
- vue.js - 如何使用 Vue js 添加上一个和下一个按钮?
- c - 不同的 gcc 版本给出不同的输出
- java - Spring Boot for Oracle 19c 数据库中映射实体的问题
- php - 将 MYSQL 搜索结果限制为大于变量的日期