Windows Azure虛擬網絡

作者: ShaunFang  發布時間: 2013-06-19 13:12  閱讀: 6399 次  推薦: 7   原文鏈接   [收藏]  

  對于很多公有云的用戶來說,一個需要解決的問題是如何讓公有云里面的資源和服務與自己已有的服務器或者應用對接,這些已有的服務可能運行在自己的機房,也可能托管在IDC服務商那里,還有可能運行在其他公有云平臺上。目前主流的公有云平臺提供的解決方案都是采用VPC(Virtual Private Cloud)或者VDC(Virtual DataCenter)的方式。VPC是對用戶運行在公有云上的資源而言的,讓一個公有云區域看起來就像自己私有的云一樣。用戶自己的資源可以相互訪問,而與其他用戶的資源則是隔離的,無法互訪,從而實現安全性,另外用戶可以從外部將自己的PC或者本地局域網連入這個VPC。用戶的應用可以跨越局域網和公有云,即能獲得公有云的好處,又不需要遷移已有的業務。

  實現VPC的方式有很多種,這屬于網絡虛擬化的范疇,也是目前SDN的熱點。傳統的方案多用VLAN。VLAN由網絡設備直接支持,成熟可靠,但VLAN有數量上的的限制(最多4096個)。于是包括思科、華為之類的網絡設備廠商開發了新的標準,使VLAN可以突破該限制,并且更靈活,更可靠。而另一方面,以VMware、微軟等虛擬化廠商以及一些新興的網絡虛擬化企業開始著重于完全依賴軟件實現網絡隔離,這些技術不依賴于網絡設備,甚至對網絡拓撲沒有要求,也是未來的發展重點。無論采用哪種技術,VPC的技術要求至少包括:

  • 邏輯可定義:用戶可以自行創建、管理VPC,可以定義哪些資源屬于自己的VPC;
  • 云中的互通性:同一個VPC內的資源具備網絡連通性,至少支持3層IP協議,能支持2層協議更好;
  • 遠程互通性:用戶可以將遠程的資源通過安全的方式接入到云中的VPC中,實現端到端安全性;
  • 隔離性:不同VPC的用戶資源不具備連通性,任何網絡報文均不可達,用戶無法從自己的VPC或者公共區域向另一個用戶的VPC發起嗅探和攻擊。

  而進一步的VPC要求包括:

  • VPC可以跨越多個云數據中心
  • 提供更加靈活的網絡配置,包括自定義網絡拓撲、自定義路由、自定義網關、自定義防火墻甚至自定義網絡設備(交換機、路由器、負載均衡器等)。

  說了這么多,我們看下Windows Azure的VPC是如何實現的。如下圖所示

  Windows Azure上的虛擬網絡服務(Virtual Network)就是實現VPC的技術。目前的版本具備如下的能力:

  • 用戶可以自定義虛擬網絡,在每個虛擬網絡內,可以自定義網段、每個網段的IP地址段(只能是9, 172, 192.168打頭的IP);
  • 在部署IaaS虛擬機、PaaS云服務時,用戶可以選擇將虛擬機部署到用戶指定的虛擬網絡,從而具備目標的IP地址范圍,以及相應的網絡權限;
  • 同一虛擬網絡內的資源使用內網IP進行互訪。不同虛擬網絡的資源使用公網IP進行互訪;
  • 站點到站點互通:用戶可以通過遠程VPN設備(可以是VPN硬件,也可以是一臺Windows Server Enterprise服務器)將遠程的局域網連入指定的虛擬網絡,實現3層網絡互通;
  • 點到站點互通:用戶可以通過Windows PC的VPN客戶端,連人指定的虛擬網絡,實現3層網絡互通。

  在虛擬網絡出現以前,Windows Azure還還提供一個叫Virtual Connect的軟件,可以實現點到點互通。

  另外,為了設計合理的網絡,我們也需要了解虛擬網絡的局限性,這具體包括:

  • 同一個虛擬機無法同時加入兩個網絡,因為虛擬機只能有一個網卡;
  • 無法控制2層網絡,如MAC地址;
  • 不支持廣播、多播;
  • 不支持IPv6
  • 對虛擬機只能指定子網,不能指定IP;
  • 不支持讓多個遠程站點同時接入一個虛擬網絡
  • 多個虛擬網絡不能對接,虛擬網絡間的通訊需要走公網IP;
  • 虛擬網絡不能跨區域
  • 虛擬網絡一旦被使用就無法靈活調整,所以部署前要提前規劃好。

  創建虛擬網絡

  首先,從門戶的左側選擇網絡,然后點擊右側的創建按鈕

  輸入網絡基本信息,包括名稱、區域和地緣組。地緣組的用途,是限制資源的范圍。盡管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,并以管理員權限運行。如果沒有該工具,wWindows用戶可以去網絡上搜索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和一個WorkerRole。我們希望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服務的資源部署在單獨的子網里,提供對外端口。

7
0
 
標簽:云計算 Azure
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()