gpt4 book ai didi

amazon-web-services - 无法通过服务发现连接两个 ECS 服务

转载 作者:行者123 更新时间:2023-12-04 04:08:38 27 4
gpt4 key购买 nike

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

  • “前端”:Vue Js 应用程序,向后端发出单个请求;
  • “后端”:处理请求的 Django 应用程序;

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

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

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

我收到错误:无法加载资源:net::ERR_NAME_NOT_RESOLVED backend.test:8000/api/get-test/

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

当我将请求更改为类似

的内容时
axios.get('http://172.17.3.85:8000/api/get-test/') 

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

获取 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 是后端容器的有效公共(public) IP。

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

最佳答案

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

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

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

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

  • 在同一 VPC 和子网以及 SSH 中分拆出 EC2 实例有效因为可以在 VPC 内解析私有(private)托管区域。

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

关于amazon-web-services - 无法通过服务发现连接两个 ECS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com