AWS服务发现,nginx和节点问题

时间:2019-07-04 16:17:14

标签: docker amazon-ecs service-discovery aws-fargate

我正在AWS ECS Fargate中运行2个服务。一种是在应用程序负载平衡器后面运行的nginx容器。另一个正在使用node.js应用程序运行。节点应用程序与服务发现一起运行,并且Nginx容器代理了节点应用程序容器的“服务发现端点”。

我的问题是: 将节点应用程序容器从1扩展到2后,Nginx无法将请求发送到新产生的容器。它仅将请求发送到旧容器。重新启动/重新部署nginx容器后,它可以将请求发送到新容器。

我尝试使用“ 0” DNS ttl作为服务发现端点。但是面临同样的问题。

1 个答案:

答案 0 :(得分:0)

如果您的服务器被指定为上游组的一部分或在某些其他情况下,Nginx不会在运行时解析解析,有关更多详细信息,请参见this SF post。这意味着Nginx永远不会知道新容器已注册用于服务发现。

您尚未发布Nginx配置,因此很难说您可以在那里做些什么。对于proxy_pass指令,有人建议使用变量来强制运行时解析。

另一个想法可能是从Nginx容器中公开一个HTTP终结点,以监听连接并重新加载Nginx配置。然后,在注册新容器时,可以由lambda触发此终结点(Lambda依次由CloudWatch事件触发)。免责声明:我尚未在实践中尝试过此方法,但可能可行。