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

flo*_*ins 6 amazon-web-services microservices

我想问你是否有一个涉及Amazon Elastic Container Service(ECS)和应用程序负载均衡器(ALB)的微服务架构(基于Spring Boot),服务发现是由平台自动执行的,还是需要一个特殊的机制(如尤里卡或领事)?

从文档(ECS和ALB)不清楚您是否提供此功能.

flo*_*ins 5

我已经与亚马逊支持团队讨论了这个问题,他们回答了以下问题:"...使用AWS ECS上的服务发现[...]只需使用ALB.

因此,这里可以有三个选项:1)使用ALB/ELB作为服务端点(ALB的目标组,如果使用ELB则使用单独的ELB)

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

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

让我谈谈这些方案中的每一个.

使用ALB/ELB

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

这里的缺点是,如果您使用ELB,它可能会产生更高的成本 - 因为您需要为每项服务使用ELB.它可能不是最简单的解决方案.如果您想了解更多信息,请点击此处[1]

使用Route53

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

此方法的另一部分是Lambda函数,该函数对ECS容器实例执行运行状况检查 - 并在发生故障时将其从R53中删除.

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

使用像Consul.io这样的第三方工具在ECS上使用像Consul.io这样的工具,但是不支持AWS.所以你可以自由使用它,但我们 - 不幸的是 - 不提供支持.

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


jmh*_*let 1

您在 AWS 中没有开箱即用的解决方案,尽管可以通过一些努力来实现,如https://aws.amazon.com/es/blogs/compute/service-discovery-an-amazon-ecs中所述-参考架构/

您还可以安装 Zuul + Ribbon + Eureka 或 Nginx + Consul 并使用 ALB 在 Zuul 或 Nginx 之间分配流量