【发布时间】: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