我一直在寻找使用ECS Fargate在自己的服务/任务中连接多个错误服务的不同方法。
通常,如果所有微服务都定义在相同的任务定义中,我们可以使用带有相应端口的本地ip,但这意味着我们不能扩展单个微服务。据我所知,当我们将这些服务分解为多个服务时,有两种"主要"方式来实现这种通信:
-
为每个服务添加一个负载均衡器,并使用负载均衡器的公共ip作为从一个服务到另一个服务的单点访问。
我的问题是:
。所有需要通信的服务都需要位于同一个VPC中,并且具有服务的传入规则设置为负载平衡器的安全组吗?
b。假设我们现在已经配置了整个设置,并需要在一个微服务代码库中设置一个负载均衡器公共DNS,实现这一点的最佳方法是什么,我猜某种"假设"将添加到它的公共DNS的地形脚本?
-
使用AWS服务发现,这意味着我们可以用一个简单的建立标识符查询服务到服务。
我的问题是:
。我们是否仍然可以将负载平衡器附加到服务上,并且仍然可以使用服务发现?或服务发现是否已经配置了一个底层负载均衡器?
提前感谢您的帮助!
1。a同一VPC中的所有业务及其安全组
我假设你说的是每个服务都有自己的负载平衡器(LB)的情况。由于lb是公共的,它们可以在任何VPC中。
通常设置SGs,使服务的传入规则只允许来自LB的SG的连接。
1。b DNS
每个任务都可以有环境变量。这是传递DNS值的好方法。如果您正在讨论地形(TF),那么TF将提供lb,然后创建任务并使用lb的DNS值设置环境变量。因此,您将知道LBs的DNS,因为它们将在您的服务之前创建。
2。a服务发现(SD)
SD仅用于私有通信服务之间。不涉及互联网,所以所有东西都必须在同一个VPC或对等VPC中。所以它基本上与第一个带LBs的解决方案相反。
我认为你也应该能够使用公共LB和SD。
SD不使用LB。相反,当您通过SD查询服务的DNS时,您将以随机顺序获得任务的私有IP地址。因此,随机顺序近似于服务中任务之间连接的负载平衡。