【问题标题】:Cannot connect two ECS services via Service Discovery无法通过服务发现连接两个 ECS 服务
【发布时间】:2020-05-30 21:12:08
【问题描述】:

我是 AWS 新手,我正在尝试将简单的应用程序部署到 AWS ECS。我有两个简单的 docker 容器,在 ECS Fargate 中运行:

  • “前端”:Vue Js 应用,向后端发出单个请求;
  • ‘Backend’:为请求提供服务的 Django 应用程序;

这两个服务都是在同一个集群中、默认 VPC 和同一个公共子网中启动的。对于“后端”,我配置了服务发现:命名空间 - test,服务发现名称 - backend。安全组配置为允许所有流量。

所以,问题是当前端发出请求时:

axios.get('http://backend.test:8000/api/get-test/')

我收到错误:Failed to load resource: net::ERR_NAME_NOT_RESOLVED backend.test:8000/api/get-test/

但是,在 AWS Cloud9 中执行命令:dig +short backend.test 会返回后端容器的正确私有 IP。

当我将请求更改为类似

axios.get('http://172.17.3.85:8000/api/get-test/') 

其中 172.17.3.85 是后端容器的有效私有 IP,我收到以下错误:

GET http://172.17.3.85:8000/api/get-test/ net::ERR_CONNECTION_TIMED_OUT

但是,如果我在同一个 VPC 和子网中分离出 EC2 实例并通过 SSH 连接到它,我可以 ping 后端容器和请求 -

curl -v http://172.17.3.85:8000/api/get-test/  

还有

curl -v http://backend.test:8000/api/get-test/ 

返回所需的响应。

一切都按预期工作的唯一情况是请求是这样的

axios.get('http://3.18.59.133:8000/api/get-test/'),

其中 3.18.59.133 是后端容器的有效公共 IP。

如果有任何建议可以进一步了解或如何通过服务发现连接两个容器,我将不胜感激,因为我现在没有想法。

【问题讨论】:

  • 您的 vpc 是否启用了 dnshostnames 和 dnssupport?
  • 是的,我的 VPC 中的 DNS 主机名和 DNS 解析都已启用
  • 您能到 R53 确认 A 或/和 SRV 整体是否存在吗?您还使用了 A 或 SRV 还是两者兼而有之?根据我的经验,单独的 SRV 经常会引起问题。
  • 我只使用 DNS 记录类型 A。我不能 100% 确定在 R53 中的何处查找 A/SRV 条目,但如果我转到 R53 -> 托管区域 -> 测试,则有 'backend.test'、类型 A、私有 IP 等条目。
  • 好的,现在我明白了。是的,请求来自浏览器。谢谢@Marcin

标签: amazon-web-services amazon-ecs


【解决方案1】:

根据cmets中的讨论和问题描述,原因是Frontend’: Vue Js app在客户端执行,例如在浏览器中。

这解释了所有描述和讨论的问题:

  • axios.get('http://backend.test:8000/api/get-test/') 不起作用,因为在客户端您无法解析私有托管区域。

  • axios.get('http://172.17.3.85:8000/api/get-test/') 不起作用,因为172.17.3.85 仅在 VPC 中有效,在客户端网络中无效。

  • spin out EC2 instance in the same VPC and subnet and SSH 有效,因为私有托管区域可以在 VPC 内解析。

  • axios.get('http://3.18.59.133:8000/api/get-test/') 有效,因为与私有 IP 不同,公共 IP 可以在客户端使用。

【讨论】:

  • 那么这里的解决方案是什么? Fargate 不就是不手动分出 EC2 实例吗?如何在 Fargate 上同时部署前端和后端应用而不需要手动创建 EC2 实例?
猜你喜欢
  • 2019-11-15
  • 2022-06-20
  • 1970-01-01
  • 2018-05-18
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多