Windows Azure上的IP地址有以下几种:
- 公网IP地址
- VIP
- ILPIP
- Reserved IP
- 内网IP地址
- DIP
- Static IP
VIP是动态分配的公网IP,VIP可以被分配到云服务、负载均衡器、VPN网关和应用网关等实例。当实例(云服务、负载均衡器、VPN网关和应用网关)被销毁后,VIP即刻被回收。用户不能永久有用某个特定的VIP。因此务必不用将域名解析的A记录指向到VIP,也尽量不要使用VIP来访问云服务。理论上只要用户不销毁重建实例,VIP就不会发生改变。但是,如果遇到Windows Azure平台问题导致的实例销毁重建(例如:因宿主机物理硬件故障导致的实例漂移),VIP也是会发生变化的。一旦VIP被回收,就找不回来了(已经分配给其他用户了)。VIP是池化的公网IP地址资源。每个云服务默认分配一个VIP,可以为一个云服务分配多个VIP,即:Multiple VIP:
- 一个云服务可以绑定多个VIP,但网络出口IP地址是创建云服务时默认分配的那个VIP。
- 每个VIP必须关联到一个endpoint(终结点)才会生效,若某个VIP上没有定义任何endpoint,则该VIP仅仅是一个“占位符”,即:不会被分配IP地址。
- 每个VIP上的endpoint所对应的local port必须是其所在云服务内唯一的:一个虚拟机上的一个端口只能对应一个VIP的endpoint。
- Multiple VIP是针对云服务的,Multiple VIP不能直接分配给虚拟机。
- 在Service Management模式中,只能通过PowerShell或者CLI来管理Multiple VIP。
如果需要使用固定的公网IP地址,那么就需要使用Reserved IP。Reserved IP地址一旦被分配,则在整个Windows Azure订阅中都是有效的,而且不会发生变化。用户可以将指定的Reserved IP关联到某个云服务。当绑定Reserved IP的云服务被删除后,与之对应的Reserved IP并不会被回收,仅仅是状态变成“未使用”。用户可以将Reserved IP作为域名解析的A记录来使用。如果客户的某些应用需要使用固定的IP地址来进行访问控制,则使用Reserved IP是正确的选择。每个云服务只能绑定一个Reserved IP。结合前文对VIP的描述, 我们总结为:一个云服务除了默认分配的VIP之外,可以绑定一个Reserved IP和多个辅助VIP(Multiple VIP)。
除了VIP和Reserved IP之外,还有一种能直接绑定到虚拟机上的Instance Level Public IP (ILPIP)。用户通过ILPIP访问虚拟机时,将不再经过云服务和负载均衡器,因此在ILPIP上也不存在endpoint,所有的端口都是直接暴露在公网上的。在Service Management模式中,endpoint的数量是有限制的,如果要在虚拟机上运行需要开放大量端口的服务,例如:socket通讯,passive FTP等,使用ILPIP就可以解决问题。
Windows Azure上的内网IP地址与用户创建的虚拟网络中的地址段是相关联的,无论是DIP或是Static IP,都是虚拟网络的地址段中进行分配。DIP是通过一个隐藏的DHCP服务分配出来的,用户目前还无法对DHCP服务的属性和行为进行任何设置。只有虚拟机中第一个网卡上的内部IP会通过NAT映射到云服务的默认VIP上,其他网卡和内部IP地址则只能用于内部通讯。若手工在虚拟机中修改内部IP地址(或者MAC地址),则会造成虚拟机无法连接。DIP的分配和释放原则与VIP类似。在此就不再赘述了。
在做集群的时候(例如:LVS),需要指定一个虚拟的内部IP地址来对外提供服务。通常这一类集群是依赖VRRP协议的,但目前Windows Azure还不支持VRRP,因此也就无法创建需要使用虚拟IP对外提供服务的集群了。SQL Server Always-on集群除外(微软自家的产品有特殊待遇)。总之,Windows Azure上的内部IP地址都必须是受Windows Azure管理的,用户无法像在物理环境中那样随便就可以在操作系统或者软件中随意的设置一个内部IP地址出来。
有关Windows Azure中IP地址的PowerShell操作可以参考这里。