我在 AWS 上设置了一个 Fargate 集群。我的集群具有以下功能服务:
- 服务器-A(端口 3000)
- 服务器-B(端口 4000)
每个服务都位于同一个 VPC 中,并具有相同的安全组(任何端口、任何源、任何目标)。VPC 与互联网隔离。
现在,我希望服务器 A 向服务器 B 发送 http 查询。我假设,就像在 Docker Swarm 中一样,有一个私有 DNS 将服务名称映射到其私有 IP,并且只需将查询发送到:http://服务器-B:4000。然而,服务器 A 超时,这意味着它无法访问服务器 B。
我在文档中读到,我可以将两个容器放在同一个服务中,每个容器监听不同的端口,这样,借助环回接口,我可以从服务器 A 查询http://127.0.0.1:4000服务器 B 将会响应,反之亦然。
但是,我希望能够扩展服务器 A 和服务器 B独立,所以我认为通过 2 个服务保持每个服务器彼此独立是有意义的。
我读到过,为了让两个任务相互通信,我需要设置一个负载均衡器。从 Docker Swarm 的世界来看,通过服务名称查询服务非常容易,在后台,请求被转发到该服务中的一个容器。但在 AWS Fargate 上似乎不是这样工作的。
问题:
- 服务器 A 如何与服务器 B 通信?
- 由于服务有时会重新部署,其私有 IP 会发生变化,因此通过 IP 查询没有意义,通过主机名查询似乎是最自然的方式
- 我需要设置任何类型的内部 DNS 吗?
感谢您的帮助,我真的不知道该如何进行这个简单的设置。
答案1
经过搜索,我发现这是因为我在创建服务时没有启用“服务发现”,所以没有创建私有 DNS。以下是一些额外的文档,其中详细解释了这些步骤:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service-discovery.html