在AWS ECS上使用应用程序负载均衡器进行服务发现

11

我想问您是否有一个基于Spring Boot的微服务架构,其中涉及Amazon Elastic Container Service(ECS)和Application Load Balancer(ALB),平台会自动执行服务发现,还是需要特殊的机制(如Eureka或Consul)?

从文档(ECS和ALB)中并不清楚是否提供了此功能。

2个回答

12

我已经与Amazon支持团队进行了交流,他们给出了以下回答: "...在AWS ECS上使用服务发现[..]只需要使用ALB."

因此,这里有三个选项: 1)使用ALB/ELB作为服务端点(对于ALB来说是目标组,如果使用ELB则需要分开设置ELB)

2)使用Route53和DNS进行服务发现

3)使用Consul.io等第三方产品与Nginx结合使用。

让我分别介绍一下这些选项。

使用ALBs/ELBs

对于这个选项,思路是在每个服务的前面使用ELBs或ALB目标组。 我们定义一个Amazon CloudWatch Events过滤器,监听来自AWS CloudTrail的所有ECS服务创建消息,并触发Amazon Lambda函数。 此函数识别新服务使用的Elastic Load Balancing负载平衡器(或ALB目标组),并使用Amazon Route 53插入指向它的DNS资源记录(CNAME)。 Lambda函数还处理服务删除,以确保DNS记录反映运行在您的集群中的应用程序的当前状态。

这里的缺点是,如果您使用ELBs,则可能会产生更高的成本-因为每个服务都需要一个ELB。而且可能不是最简单的解决方案。 如果您想要了解更多信息,可以在这里[1]了解更多。

使用Route53

这种方法涉及使用Route53并在ECS容器实例上运行一个简单的代理[2]。 当您的容器停止/启动时,代理将更新Route53 DNS记录。它会创建一个SRV记录。同样,一旦容器停止,它也会删除这些记录。

此方法的另一部分是一个Lambda函数,对ECS容器实例执行健康检查,并在失败的情况下从R53中删除它们。

您可以在我们的博客文章[3]中阅读更多关于此方法的信息。

使用像Consul.io这样的第三方工具

使用像Consul.io这样的工具在ECS上可以运行,但AWS不支持它。所以您可以自由使用它,但我们很遗憾不能为其提供支持。

总之,在AWS ECS上实现服务发现有几种方法 - 我在这里展示了使用AWS资源的两种方法,当然还可以使用第三方应用程序的方式。


是的,我已经尝试了所有的方法,目前为止最终选择了第一个选项。但是考虑到微服务数量的增加,我计划转向第三个选项,因为Consul可以让我相应地修改事物。目前在ECS服务中创建后无法编辑负载均衡器选项。 - mohit
1
很棒的答案。假设您只需要为一个域路由到不同的服务,那么您可以通过应用程序负载均衡器路由到不同的服务:https://aws.amazon.com/blogs/aws/new-host-based-routing-support-for-aws-application-load-balancers/ 。多个服务指向一个负载均衡器,该负载均衡器具有路由到不同目标组的规则。 - J Cole Morrison
@florins:我想在AWS Lambda和EC2实例之间实现服务发现。您能告诉我如何做吗? - Khwaja Sanjari

1

1
感谢回复。根据这篇文章,ALB仅使用它就解决了服务自动发现的问题:https://convox.com/blog/alb/。有什么想法吗? - florins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接