我们正在使用Eureka和AWS ECS服务来扩展docker容器。 在ECS中,如果省略主机端口,或在任务定义中将其指定为“0”,则将自动选择端口并将其报告回服务。任务运行后,描述它应该显示它绑定的端口。
如果我们有几个EC2实例,Eureka如何解析使用哪个端口。例如,来自EC2-A的服务A尝试从EC2-B呼叫服务B.因此Eureka可以解析主机名,但无法识别暴露的端口
答案 0 :(得分:3)
还有另一种解决方案。
您可以创建一个应用程序负载均衡器和目标组,可以在其中启动docker容器。
每个docker容器都将其主机名设置为loadbalancer的主机名。如果您需要一个漂亮的URL,那么您可以使用Route53进行DNS路由。
看起来像这样:
使用Loadbalancer-Hostname的服务发现
请求流程
如果在不同主机上有两个相同任务的容器,则两者都会将相同的loadbalancer主机名传递给eureka。
使用此解决方案,您可以在AWS ECS上使用带有docker的eureka,而不会失去动态端口映射的优势和灵活性。
答案 1 :(得分:3)
问题已解决 https://github.com/Netflix/eureka/issues/937
目前,ECS代理知道运行端口。
但是我不建议将Eureka与ECS一起使用,因为Application Load Balancer也是如此。它可用作服务注册表和发现。你不需要运行附加服务(Eureka),ALB很便宜。
答案 2 :(得分:1)
嗨@Aleksandr Filichkin,
我认为应用程序负载平衡器和服务注册表不一样。 主要的区别在于流量流经(应用程序)负载平衡器,而服务注册表只是为您提供了一个健康的端点,您的客户端可以直接访问该端点(因此,网络流量不会流经服务注册表)。
便宜是一个非常相对的术语,也许对某些人来说便宜,也许对其他人来说却是不必要的开销。