我的系统在Amazon AWS云上有N台服务器。他们都在同一个区域。实例A想要与实例B交谈,但显然不会通过互联网。据我所知,每次重启实例时内部IP都会发生变化。我的所有实例都有一个内部的,不变的DNS名称,通过它们可以在它们之间进行交互,而不必担心重启吗?
答案 0 :(得分:3)
答案 1 :(得分:2)
不,使用开箱即用的AWS实例无法使用“固定”IP地址或DNS名称。即使您为实例分配EIP(弹性IP),这也只会影响面向公众的IP / DNS引用,而不会影响内部引用。
我们在EC2庄园中使用一对DNS服务器(它是Windows,因此它们是主/辅AD域控制器)。通过让所有其他实例使用此对作为其DNS服务器,我们可以在每个实例启动时为其分配唯一的计算机名称,并通过这些名称引用任何/所有其他实例。
所以例如我们的基于EC2的Subversion服务器有一个EIP,这意味着当我们从EC2外面与它交谈时它总是在同一个地方,但是基于EC2的CruiseControl服务器将它称为[ourec2domain] .SVNHOST,因为它在启动时将DC命名为DC。
答案 2 :(得分:0)
我第一次使用云时遇到了同样的问题。我也使用2个DNS服务器的设置,并使用命令ec2-create-tags <instance> --tag Purpose=DNS
使用我创建的http://cloudinitnet.codeplex.com服务,服务器在启动时运行powershell脚本。这个powershell脚本检查amazon的两个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”来执行相同的任务。
答案 3 :(得分:0)
来自实例:
curl http://169.254.169.254/latest/meta-data/local-hostname