在 Azure 文档中花费了大量时间后,我发现同一云服务(而非 VNet)中的虚拟机之间相互通信的能力似乎不一致。根据经验,我知道虚拟机可以相互通信,但这似乎几乎无法保证。
虚拟网络概述尤其没有帮助,因为它说“您的虚拟机或云服务是否需要在 Azure 内相互通信。”这让人觉得任何两个虚拟机都需要一个 VNet 来进行内部通信。写成“虚拟机在单独的云服务中”会更好吗?另一个类似的说法是如何将虚拟机与虚拟网络或云服务连接这一规定在一天前已经进行了修改,之前规定称单个云服务中的虚拟机可以相互通信。
另一方面,msdn.microsoft.com/en-us/library/azure/jj156088.aspx 暗示云服务内部通信是可能的。azure.microsoft.com/en-us/documentation/articles/virtual-machines-load-balance/ 也说明了这一点。
云服务最终似乎将默认拥有 VNet,并且这些不一致性可能在一定程度上证实了这一点。
最好能得到最终答案并将其记录下来。无论 VNet 是否是最佳实践,了解您是否可以在没有 VNet 的云服务中保证在虚拟机之间进行通信都是值得关注的。此外,假设云服务中不存在端点,是否允许任何其他外部虚拟机与服务中的虚拟机通信?实验表明不能,这与 Ec2-Classic 相比是一个很好的权衡。
编辑:我不能发布超过 2 个链接,因此“另一方面”部分中的两个链接格式很差。此帖子已从 SO 移出。
答案1
正如 Trevor 所解释的那样,单个云服务中的虚拟机可以完全访问该云服务中所有其他虚拟机上的所有端口(除非每个虚拟机都启用了防火墙)。使用 Web/工作者云服务,您需要设置内部端点以进行角色实例之间的通信(无论是工作者还是 Web 都无关紧要)。
如果您计划访问其他云服务中的虚拟机,然后您需要一个虚拟网络。并且,如果您思考您可能需要这样做,此时您需要设置虚拟网络,并将当前虚拟机添加到虚拟网络。这是因为在创建虚拟机后,您无法返回并将虚拟机添加到虚拟网络。
虚拟网络的另一个优点:您可以为每个虚拟机指定不变的内部 IP 地址(这对于配置了一组已知 IP 地址的数据库集群来说很重要)。
答案2
是的,在同一个云服务中,虚拟机可以不受限制地相互通信。任何限制很可能来自 Windows 防火墙或某些第三方软件防火墙。
在此处观看 Cheryl McGuire 在模块 #4“Windows Azure 虚拟网络基础知识”中讨论动态 IP 地址 (DIP):http://www.microsoftvirtualacademy.com/training-courses/windows-azure-iaas-deep-dive-jump-start
目前,Azure 虚拟机不需要部署到虚拟网络中,但要继续着眼于未来。