协调VPC中的多个VM

问题描述 投票:1回答:2

我正在使用部署3个EC2虚拟机的CloudFormation堆栈。每个都需要配置为能够通过IP或主机名发现其他2并不重要。

亚马逊的私有内部DNS似乎非常无用,因为它基于IP地址,在配置时无法知道。因此,我无法在CloudFormation堆栈时使用我所知的方式配置节点。

据我所知,我有几个选择。在我看来,所有这些都比必要更复杂 - 还有其他选择吗?

  1. 使用Route53,设置一个私有DNS托管区域,为连接到其网络接口的每个VM创建一个条目,然后通过命名条目,我应该提前知道我分配给它们的私有DNS。
  2. 支持另一项服务,让3个虚拟机“初次接通电话回家”,然后可以向准备好的人报告。
  3. 想出一些其他基于VM的shell魔法,并做一些傻瓜,比如使用nmap扫描本地子网以查找某个端口上存活的机器。

在我配置VM时使用的其他云(如GCP),它根据部署模板中的资源名称获取内部DNS名称,这使得这类问题非常简单。男孩,我希望我有。

这里最好的方法是什么? (1)看起来很简单,但要求使用我的堆栈的人拥有他们并不真正需要的额外权限。 (2)浪费了额外的资源使用量。 (3)似乎......好傻。

amazon-web-services amazon-ec2 amazon-cloudformation
2个回答
3
投票

使用Route53,设置私有DNS托管区域,为连接到其网络接口的每个VM创建一个条目,然后通过命名条目

这是最好的解决方案,但实现起来更简单。

  1. 为每台机器提供“资源名称”。
  2. 在CloudFormation堆栈中,创建一个AWS::Route53::RecordSet资源,该资源通过其逻辑ID将基于该“资源名称”的主机名与EC2实例相关联。
  3. 在应用程序内部,使用基于资源名称的主机名来访问其他isntance(s)。

另一种方法是使用Application Load Balancer,将您的应用程序实例放在不同的目标组中。然后,各种EC2实例通过ALB发送所有流量,因此您只需要传播一个引用(并且可以将其存储在EC2实例的UserData中)。但这还有很多工作要做。

这假设您已经设置了私有托管区域。


1
投票

我认为你所谈论的内容被称为服务发现。

如果将EC2实例部署在同一VPC中的同一子网中,且具有允许通过其进行通信的端口的相同安全组,则它们将彼此“可发现”。

然后,您可以更进一步。如果组上有自动调节并且机器死亡并重新生成,则可以将IP写入注册表,即发电机,以便其他机器知道在哪里找到它们。

© www.soinside.com 2019 - 2024. All rights reserved.