【问题标题】:How 2 services can talk to each other on AWS Fargate?2 项服务如何在 AWS Fargate 上相互通信?
【发布时间】:2019-12-03 04:37:00
【问题描述】:

我在 AWS 上设置了一个 Fargate 集群。我的集群有以下服务

  • 服务器-A(端口 3000)
  • 服务器-B(端口 4000)

每个服务都在同一个 VPC 中,并且具有相同的安全组(任何端口、任何源、任何目标)。 VPC 与互联网隔离。

现在,我希望服务器 A 向服务器 B 发送一个 http 查询。我假设,就像在 Docker swarm 中一样,有一个私有 DNS 将服务名称映射到它的私有 IP,它就像将查询发送到:http://server-B:4000 一样简单。但是,服务器 A 超时,这意味着它无法到达服务器 B。

我在文档中读到我可以将 2 个容器放在同一个服务中,每个容器侦听不同的端口,因此,由于环回接口,我可以从服务器-A 查询 http://127.0.0.1:4000服务器-B 会响应,反之亦然。

但是,我希望能够独立地扩展服务器-A 和服务器-B,因此我认为通过拥有 2 个服务来保持每个服务器彼此独立是有意义的。

我读到过,要让 2 个任务相互通信,我需要设置一个负载平衡器。来自 Docker Swarm 的世界,通过服务名称查询服务非常容易,并且在后台,请求被转发到该服务中的一个容器。但它在 AWS Fargate 上似乎不像那样工作。

问题:

  • 服务器 A 如何与服务器 B 通信?
  • 由于服务有时会重新部署,它们的私有 IP 会发生变化,因此通过 IP 查询没有意义,通过主机名查询似乎是最自然的方式
  • 是否需要设置任何类型的内部 DNS?

感谢您的帮助,我在做这个简单的设置时真的很迷茫。

【问题讨论】:

  • 我认为你可以使用 AWS App Mesh。
  • 服务发现怎么样?这是创建 Fargate 服务时的一个选项。
  • 是的。你也可以使用它。根据我的阅读,App Mesh 使用服务发现,但可以让您更好地控制微服务。
  • 太棒了!非常感谢。我现在正在做一些测试,看起来我没有在我的服务中选中服务发现框,所以这就是他们无法看到对方的原因。谢谢!

标签: amazon-web-services aws-fargate


【解决方案1】:

搜索后发现是因为我在创建服务的过程中没有开启“服务发现”,所以没有创建私有DNS。以下是一些详细说明步骤的附加文档:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 2017-05-28
    • 2021-11-07
    • 2021-05-21
    • 1970-01-01
    • 2019-09-08
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多