我有一个系统在Amazon AWS云上有N台服务器。他们都在同一个区域。实例A想要与实例B交谈,但它显然不通过互联网。据我所知,每当我重新启动实例时,内部IP就会改变。是否有一个内部的,持续的DNS名称给我的所有实例,通过它们可以在它们之间进行交互而不必担心重新启动?如何知道Amazon AWS实例的内部DNS名称?
回答
请注意,此方法虽然有效,但并不仅限于内部EC2骨干网上的流量。通过在EC2中使用EIP,您实际上是将请求路由到面向公众的网关,然后通过将请求交给内部路由表并从那里获取内部地址来解析DNS请求。另外,如果你有很多服务器,你可以很快地用完EIP分配 - 你可以请求更多,但是不能保证亚马逊会把这些分配给你。只是要注意一些事情。 – 2011-03-31 17:18:16
这个重新路由到公众面对网关的计费如何? – Dan 2011-05-11 07:51:08
@Jonners,这种方法从来不使用EIP。它只使用EIP的主机名进行DNS查找(在内部DNS服务器上)。所以内部网络之外没有流量。 – Andrew 2013-01-17 23:49:25
不,没有办法使用开箱即用的AWS实例使用“固定”IP地址或DNS名称。即使您将EIP(弹性IP)分配给实例,这也只会影响面向公众的IP/DNS引用,而不会影响内部引用。
我们在我们的EC2属性中使用了一对DNS服务器(它是Windows,所以它们是主/辅助AD域控制器)。通过让所有其他实例使用此对作为其DNS服务器,我们可以在每个实例启动时为其分配唯一的计算机名称,并通过这些名称引用任何/所有其他实例。
因此,例如我们基于EC2的Subversion服务器有一个EIP,这意味着当我们从EC2外部与它交谈时,它始终处于相同的位置,但基于EC2的CruiseControl服务器将它称为[ourec2domain] .SVNHOST,因为它在启动时向DC注册该名称。
感谢Jonners。您的解决方案更适合大型部署。另外,你的服务器如何到达DNS服务器本身?如果DNS服务器的IP更改,则说明您遇到了同样的问题。 – 2011-04-01 06:50:03
DC具有EIP分配,并且这些地址在它们旋转时被提供给每个实例 - 设置它们的DNS参考。我们认识到这意味着DNS流量被路由到EC2网关(通过EIP),然后返回,但它仅用于这两个服务器标识,并非全部(如果实例使用任何其他的EIP,则会出现这种情况实例与他们交谈)。我们有一个概念验证过程,它在DC上运行,并宣布其内部IP地址,但尚未将侦听器进程“烘焙”到其他实例快照中以避免网关环路。 – 2011-04-01 13:23:19
这让我感到非常奇怪,没有人以通用的方式解决这个问题。感谢任何情况下的想法。 – 2011-04-02 19:29:08
我有同样的问题,当我使用云第一次开始。我也使用2台DNS服务器的设置,并使用命令ec2-create-tags <instance> --tag Purpose=DNS
向两台服务器添加标记使用http://cloudinitnet.codeplex.com服务我创建的服务器在启动时运行powershell脚本。这个PowerShell脚本检查两个DNS服务器的亚马逊并将它们添加到网络接口。假设您此时有一个dns服务器列表,您可以使用下面的代码将条目添加到dns服务器。要获取服务器列表,只需使用PowerShell通过AWSSDKnet查询您的帐户即可。
$connection = "Local Area Connection 2"
$registered = $false;
# Clean up the DNS entries incase there are any settings already
Write-Output "Clearing DNS Entries"
$X = netsh interface ip set dns $connection static none
$index = 1;
foreach ($server in $servers)
{
# Set this server's
Write-Output "Adding server $server to DNS"
$X = netsh interface ip add dnsserver $connection $server index=$index
# Register the server's hostname with the dns server
if(-not ($registered))
{
$computer = hostname
$address = (netsh interface ip show address $connection | select-string "IP Address") -replace '^[^\d]+'
$rec = [WmiClass]"\\dns01\root\MicrosoftDNS:MicrosoftDNS_ResourceRecord"
$rec.CreateInstanceFromTextRepresentation("dns01", "network.cloud", "$($computer).network.cloud IN A $address")
$registered = $true;
}
$index++;
}
如果您的服务器不是windows,那么您可以使用Ubuntu或Amazon Linux“Cloud-Init”执行相同的任务。
从实例:
curl http://169.254.169.254/latest/meta-data/local-hostname
- 1. amazon aws自动缩放组实例名称标记
- 2. Amazon AWS EC2,如何组合实例?
- 3. EC2上的实例类型Amazon AWS
- 4. 如何获取AWS中实例的名称标签?
- 5. 如何给实例名称?
- 6. 如何用新的Amazon EC2实例替换Amazon EC2实例?
- 7. 如何获取Amazon AWS EC2实例中的网络容量?
- 8. 木偶只看到内部的DNS名称,而不是主机名
- 9. 如何在AWS Amazon Linux EC2实例上从PHP 7连接到SQL Server实例?
- 10. 如何重命名ec2实例名称
- 11. 如何在Amazon CloudWatch的AWS/EC2名称空间中发布每实例度量标准?
- 12. DNS区域名称
- 13. 如何使用amazon java库实现AWS签名的请求?
- 14. AWS AMI源实例
- 15. Amazon AWS - 如何复制和替换实例?
- 16. 如何使用Java库从Amazon AWS EC2实例获取标签
- 17. 获取有关实例变量名称的内部setter信息
- 18. AWS CLI中添加名称的描述,实例查询
- 19. 与实例名称
- 20. 类实例名称
- 21. 想知道控制名称
- 22. Google OAuth2不适用于Amazon EC2实例的公共DNS?
- 23. 从JAVA API获取Amazon EC2实例的公共DNS
- 24. 描述EC2实例使用AWS的过滤器实例名称cli
- 25. 我如何知道Amazon EC2操作何时完成?
- 26. Amazon CloudWatch指标按实例名称筛选
- 27. AWS ECS处理跨多个实例的DNS子域
- 28. AS3类实例名称
- 29. 如何动态生成实例名称?
- 30. SQLEXPRESS安装实例名称
我有同样的问题......只有两个在EC2上的Windows服务器,我不知道一个简单的方法来从其他具有一致的名称连接到一个,而不是在每次重新启动后手动输入分配的内部IP。也许Windows网络有一个功能可能有帮助? – BrianFinkel 2011-08-01 16:43:31