从阿里云的踩坑大师,到Azure的抹黑大师,我们似乎成了云计算负面用户的典型,可是我们还是忍不住想表达自己真实的使用感受。如果有错误的地方,欢迎大家批评!
在Azure上建好虚拟网(Vitual Network)之后(详见云计算之路-试用Azure:如何建立虚拟机之间的内网连接),虚拟机(Virtual Machine)之间需要进行内网通信,通信时使用计算机名比直接使用内网IP更友好、更方便、更能应对变化。
在使用阿里云的时候,我们只能在每台虚拟机的hosts中添加计算名与IP之间的映射,但是如果某一台虚拟机的IP发生了变化,就要在所有与之通信的虚拟机中修改hosts文件。
如果你当过网管,用Windows组建过局域网,你就知道微软早已对这个问题有解决方案——在DHCP时,将计算机名与IP地址的映射动态添加到DNS服务器中。
在Azure中,我们惊喜地发现虚拟网也有这个功能,比如下图中的blogserver1这台虚拟机的网络接口信息。
IP地址与DNS服务器都是由DHCP分配的。
然后我们看一下同一个Cloud Service中的另一台虚拟机blogserver2的网络接口信息。
从中可以看出,用的是同一个DNS服务器。然后我们在blogserver1中直接ping blogserver2:
成功通过DNS服务器完成计算机名到IP地址的解析,无需在hosts中手动添加。
以上的场景是在同一个Cloud Service中。
我们到另一个Cloud Service的虚拟机中看看:
虽然是同一个虚拟网的子网,内网IP是同一个网段的,网关也一样,但DNS服务器却不一样了。结果ping blogserver2就无法解析了。
也就是说Azure中DNS服务器解析计算机名的功能只在同一个Cloud Service中有效。
你也许会说,把虚拟机都放在同一个Cloud Service不就解决问题了吗?但是,同一个Cloud Service只有一个VIP。对于一个网站来说,需要将不同的应用部署到不同二级域名的不同虚拟机上。从目前知道的情况看,只用一个Cloud Service实现不了。
本来是一个很有用的功能,现在却无法让它发挥作用,这种感觉就像你有了一辆跑车,却不能上高速。
熟悉Azure的朋友看到这,可能又说不专业,怎么又是临时工写的?在Azure虚拟网中不是可以设置使用自己的DNS服务器吗?
自己架设DNS服务器的确是一种解决方法,但有些麻烦还要额外的成本。有了一辆跑车,不能上高速;难道要上高速,就一定要自己再造一辆跑车吗?微软一步到位解决这个问题不是更好吗?
既然同一个子网,同一个网关,能够直接进行网络通信,为什么就不能使用同一个DNS服务器,这样的设计让人想不通。