Windows Azure虚拟网络(2):配置虚拟网络

来源:互联网 发布:好用的乳液公认知乎 编辑:程序博客网 时间:2024/05/16 23:19

上面一篇文章介绍了虚拟网络的基本概念,下面就动手实验一下:

创建虚拟网络

首先,从门户的左侧选择网络,然后点击右侧的创建按钮


输入网络基本信息,包括名称、区域和地缘组。地缘组的用途,是限制资源的范围。尽管Azure的每个区域都已经限定了地理范围,但实际上一个区域内微软可能部署了多个数据中心,这些数据中心在物理上可能相隔几公里,也可能是挨在一起。大部分情况下,物理数据中心对用户是透明的,用户无需关注。但某些场景下,一些服务的作用范围必须集中在一个更小的范围,比如一个数据中心、一个机房、甚至是紧密相连的一组机柜。地缘组的作用,就是保证同一地缘组内的左右资源都部署在紧密相连的物理设备上,确保网络延迟最小、带宽最大,且虚拟网络可以正常运作。我们为地缘组指定一个名称即可



下一步是配置DNS和VPN。DNS可以不填,使用Azure提供的DNS。VPN部分我们选择点到站点,这样待会儿便于测试。不过,需要注意的是,虚拟网络本身不收费,而VPN是按小时和按连接收费的。无论是免费账号还是付费账户,在选择VPN前要先评估下自己有多少配额。不确定的话就不选,这样虚拟网络就完全是云内部的。

选择了VPN后,下一步是设置VPN客户端的IP地址范围。这个可以根据情况指定,注意一个虚拟网络最多有256个VPN客户端

接下来是设置云端虚拟网络的网络地址。我们可以任意划分多个子网,每个子网可以指定不同的IP地址段。IP地址可以是10、192.168或者172.16打头。这里我们定义了3个子网,分别是DbFarm,WebFarm,VMFarm. 最后还要添加一个网关子网

全部配置完成后,可以看到一个简单的网络拓扑。


此时左侧方框中提示尚未配置网关。于是我们点击页面底部的创建网关按钮

这个过程大概需要10几分钟。在此过程中,我们可以继续下一步,开始准备VPN证书,尝试配置VPN客户端。虚拟网络使用的是X509证书。其方式是服务端有一个根证书,然后每个客户端有一个证书跟根证书关联。客户端证书是由根证书创建的

我们可以采用visual studio自带的makecert工具创建证书。在程序中找到Visual studio自带的Developer command prompt,并以管理员权限运行。如果没有该工具,windows用户可以去网络上搜索makecert.exe并下载。Linux用户可以用openssl生成证书。

在命令行中运行

makecert -sky exchange -r -n "CN=<RootCertificateName>" -pe -a sha1 -len 2048 -ss My
生成根证书,注意要把上面的<RootCertificateName>替换为自己定义名字。

然后再次运行

makecert.exe -n "CN=<CertificateName>" -pe -sky exchange -m 96 -ss My -in "<RootCertificateName>" -is my -a sha1 
生成客户端证书。要把<RootCertificateName>和<CertificateName>替换

如果有多个客户端,可以让客户端共享客户端证书,或者为每个客户端生成一个单独的证书。生成后需要把证书连同私钥导出,然后导入到其他客户端上。本机则不需要。


证书生成后,可以查看证书。查看方式是进入IE浏览器选项->内容->证书

前两个证书就是刚才生成的,分别是服务端和客户端。选择服务端证书,点击下面的Export/导出,进行证书导出。导出时,按照向导缺省项即可。


接下来要进行服务端证书的上传。回到Azure页面,我们发现刚才的创建网关已经成功。

我们点击右侧的上载证书进行证书的上载。要注意,尽管提示要上传客户端证书,我们还是要上传根证书

上传后,我们发现页面有了些变化,右侧多了新的链接。我们根据本机系统类型下载VPN程序包,64位的选AMD64即可。

下载后运行安装程序,进行VPN客户端的配置。Linux的如何配置我还没有尝试过,有条件的朋友可以试下

安装后在网络连接中就会出现新的VPN图标了。点击即可连接

连接成功后,查看本机VPN IP,发现是之前指定的地址段。大功告成

等待一会儿后,Azure页面也会更新,显示有一个客户端连接,并且显示流入流出的数据量



不过此时云端没有任何资源可以连接,没法进一步测试

另外,还需要注意的是,一旦开始连接,Azure就开始按时间计费。同时,从Azure流出的流量也会算网络流量费。所以,不用的时候要及时断开连接

部署虚拟机到虚拟网络

部署虚拟机到虚拟网络十分简单,在部署时选择该虚拟网络即可。此时可以选择目标子网

部署完成后,查看下虚拟机的内部IP地址(10.0.2子网的),然后从客户端直接打开远程桌面即可访问该地址,不再需要通过外网以及端口映射

可见,采用了虚拟网络后,客户端和Azure端的虚拟机不再存在防火墙、负载均衡、NAT,可以直接通过内网IP访问。

部署云服务到虚拟网络

部署云服务到虚拟网络要稍微复杂些。我们以GuestBook这个应用为例,这个应用有一个WebRole和一个Worker role。我们希望WebRole能够部署到虚拟网络的WebFarm这个子网,而workerrole部署到DBFarm这个子网。目前这种指定没有图形化的配置工具,只能手动修改配置文件。

打开该应用的cscfg文件,在末尾的</ServiceConfiguration>之前添加如下内容:

  <NetworkConfiguration>    <VirtualNetworkSite name="MyNet" />    <AddressAssignments>      <InstanceAddress roleName="GuestBook_WebRole">        <Subnets>          <Subnet name="WebFarm" />        </Subnets>      </InstanceAddress>      <InstanceAddress roleName="GuestBook_WorkerRole">        <Subnets>          <Subnet name="DBFarm" />        </Subnets>      </InstanceAddress>    </AddressAssignments>  </NetworkConfiguration>
这段配置表示该云服务将部署到MyNet这个虚拟网络,其中两个Role分别部署到一个子网

然后进入Azure门户,创建一个云服务。创建时,选择虚拟网络MyNet对应的地缘组,而不要选择区域

之后,就可以发布云服务了。可以用Visual studio发布,或者用命令行等工具都可以。

发布完成后,从VPN客户端就可以随意连接云服务里所有的虚拟机了,不需要定义端点,也不需要使用VIP。那么问题是,怎么看这些虚拟机的内部IP呢?


很简单,进入虚拟网络的管理页面,所有的可连接的资源一目了然


虚拟网络详解

下面,我们来进一步了解下虚拟网络,以及它和Azure网络的关系

下面一张图,是我们部署了虚拟机、云服务并配置了VPN后的一个完整拓扑,它包括了4个子网,2个云服务,2个对外的VIP,以及数个虚拟机。

虚拟网络有如下的一些原则:

  • 所有虚拟网络内的虚拟机都可以通过IP互访,无论是哪个子网
  • 虚拟网络外的资源要访问虚拟网络,必须通过VIP,内部被访问的端口必须被定义为Input端点。可以认为虚拟网络边界上有一个防火墙,而内部没有
  • Input端点总是和负载均衡器关联,并且提供NAT能力,从而让发往VIP的请求转发给内部IP
  • IaaS虚拟机是一种特殊的(或者退化的)云服务,有时我们看不到虚拟机对应的云服务,但实际上这个云服务是存在的。有时候我们删掉了虚拟机,会发现多了一个空的云服务,这个实际上就是之前已存在的。Azure使用同样的机制管理云服务和虚拟机

有了虚拟网络,我们就可以灵活的规划网络拓扑,实现类似于传统应用部署的分层架构,让安全性要求高的资源隐藏在虚拟网络内,只能在内部访问,而把需要提供Web服务的资源部署在单独的子网里,提供对外端口。

原创粉丝点击