【问题标题】:aws Internal load balancer net::ERR_NAME_NOT_RESOLVED when calling a serviceaws 调用服务时的内部负载均衡器 net::ERR_NAME_NOT_RESOLVED
【发布时间】:2020-12-17 05:08:17
【问题描述】:

我有一个 3 层 ECS 容器应用程序。在表示层中,我有一个公共子网,其中有一个 Angular 应用程序在 nginx 服务器上运行。为此,我有面向互联网的应用程序负载均衡器。在私有子网中,我有 Java Spring REST API 服务,该服务在端口 8080 上的 tomcat 服务器上运行,为此有应用程序内部负载平衡器。在另一个私有子网中,我有 RDS 数据库。

应用程序客户端向内部负载均衡器 url 发送请求,并在应用程序中呈现响应。

虽然我能够 ssh 到公共子网中的 ec2 并 curl 以在私有子网中休息服务并获得响应: curl -X POST http://internal-qa-XXXXX-XXXXXXX.eu-west-2.elb.amazonaws.com:8080/api/products/all 在浏览器中访问客户端时,我无法收到响应。该应用程序运行正常,但是在浏览器控制台中检查时,我看到: POST http://internal-qa-XXXXX-XXXXXXX.eu-west-2.elb.amazonaws.com:8080/api/products/all net::ERR_NAME_NOT_RESOLVED. 我用 Docker logs 检查了容器,它们运行得很好。 安全组和 NACL 配置正确,我什至检查了所有流量是否允许

【问题讨论】:

  • "然而在控制台"哪个控制台? AWS 控制台?
  • 浏览器控制台,对不起
  • 但是internal-qa-XXXXX不是内部LB的端点吗?如果是,则无法通过 Internet 从浏览器访问它,就像您从应用程序中的 JavaScript 调用它一样。
  • 似乎内部端点是由客户端从我的浏览器调用的,而是应该在子网之间内部调用。我认为浏览器将端点视为公共 ip,因此无法访问
  • 看来是这样。如果您不介意,我可能会提供答案以供将来参考。

标签: amazon-web-services amazon-ec2


【解决方案1】:

基于 cmets。

这个问题很可能是由于互联网负载均衡器的 url 端点是从客户端调用的,即浏览器。

内部负载均衡器的 URL 不可公开调用。

要解决这个问题,要么必须修改应用程序以仅使用公开可用的端点,要么将内部负载平衡器更改为面向互联网。

【讨论】:

  • 我看到的唯一解决方案是在公共子网中分配面向互联网的负载平衡器,将流量分配到私有子网中的实例
  • @PatrykMaryn 是的,这可能是处理这个问题最合乎逻辑的方式。
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2013-08-26
  • 2014-12-18
  • 2022-01-20
相关资源
最近更新 更多