我有几个云服务,以及一个在 Azure 中运行 Redis 的虚拟机。据我所知,我需要创建一个虚拟网络,以便云服务可以与虚拟机上的 Redis 通信。这很容易。现在我想要做的是设置 DNS,这样我就不必到处指定 IP 地址了。
我找到的文章都涉及集成现场 DNS 服务器,但我没有。有没有办法使用 godaddy 或 dnsimple 来实现这一点?在当前 VM 上安装一个简单的 DNS 服务怎么样?
我想我的问题可以总结为我需要做什么才能使我的云服务能够通过 DNS 名称与我的 VN 通信?
答案1
Azure 中的 VN 有一些“隐藏”功能可以帮助您。首先,是的,您说得对。如果您创建虚拟网络,则名称解析将不起作用,除非您提供自己的 DNS 服务器并将其设置为允许动态更新。您不能使用公共 DNS 服务为 Windows Azure 虚拟网络提供 DNS 名称解析。
所以这是您的解决方案。您必须启动“清理”,因为一旦 VNet 中有正在运行的虚拟机,您就无法更改 DNS 服务器 IP 地址。
- 照常创建 VNet(及其子网)
- 提供 DNS 服务器地址。将此地址设置为 xxx.xxx.xxx.4(4 始终是给定子网中分配的第一个 IP 地址!)!
- 在该干净的 VNet 上,使用 Windows Server 创建新的 VM。该 VM 将获得 xxx.xxx.xxx.4 IP 地址
- 在此计算机上安装并配置 DNS 服务器角色
- 请勿设置此机器的静态 IP 地址!
- 照常创建其余虚拟机
需要注意的事项:
- 切勿为 Windows Azure 中的任何 VM 分配静态 IP 地址。它们必须具有 DHCP 分配的 IP 地址
- 注意首先创建 DNS 机器,以便它获得 .4 IP 地址
- 只要您不删除它,您的 DNS VM 将保留其 IP 地址 (.4)。
该架构已被证明是有效的,并且可以在 Windows Azure IaaS(又称虚拟机)中运行
答案2
我遇到了同样的问题,我相信我已经找到了一个合理的解决方案,它不需要任何额外的机器,而且工作量很少。
简而言之,您将后端和前端放在同一个虚拟网络和子网中,以便它们被赋予相同的 DNS 服务器。然后在前端服务上配置 DNS 后缀搜索列表,以便它们在执行名称解析时使用后端的 DNS 后缀。
脚步:
- 登录到您的一台后端虚拟机并执行
ipconfig
。 从输出中获取
Connection-specific DNS Suffix
将的值设置
$dnsSuffix
为以下脚本中步骤 2 的值。$dnsSuffix = 'xxxxxx.yyyyy.uswest.internal.cloudapp.net'; $nics = Get-WmiObject ` -Class win32_networkadapterconfiguration ` -Filter 'IPEnabled = true'; $nics | % { $nicSuffixes = $_.DNSDomainSuffixSearchOrder; if ($nicSuffixes -notcontains $dnsSuffix) { $_.DNSDomainSuffixSearchOrder = $dnsSuffix + $_.DNSDomainSuffixSearchOrder; } }; Invoke-WmiMethod ` -Class win32_networkadapterconfiguration ` -Name setDNSSuffixSearchOrder ` -ArgumentList @(@($dnsSuffix)),$null;
将该脚本命名为 Set-DnsSuffixSearchList.ps1 并将其包含在您的项目中,将文件的属性设置为“始终复制”,如下所示:
创建一个名为的文件
startup.cmd
,其中包含以下内容,并设置“始终复制”属性:powershell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1 # Set the DNS SearchList so that backend hosts are resolvable using their shortened names. powershell .\Set-DnsSuffixSearchList.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
ServiceDefinition.csdef
通过在节点下编辑并添加以下 XML,将启动任务添加到 Azure 云服务项目WebRole
:<Startup> <Task commandLine="startup.cmd" executionContext="elevated" taskType="background"> </Task> </Startup>
假设您已经指定站点和后端应位于同一子网中,则您已完成此操作。如果没有,请将其添加到节点
ServiceConfiguration.Cloud.cscfg
内的文件中ServiceConfiguration
:<NetworkConfiguration> <VirtualNetworkSite name="yourVirtualNetwork" /> <AddressAssignments> <InstanceAddress roleName="yourCloudServiceName"> <Subnets> <Subnet name="yourSubnetName" /> </Subnets> </InstanceAddress> </AddressAssignments> </NetworkConfiguration>
希望这能帮助遇到同样问题的人!
答案3
在新门户中,您可以在公共 IP 地址资源中设置您的 DNS 名称。以下是一张描述如何配置它的图片: