善用虛機搭建網絡拓撲,助力NFV開發——虛機構建篇

2021-02-20 玩轉虛機和網絡

如果您正在進行NFV相關的開發,您可能會碰到如下的調試環境搭建問題:

在完成代碼編寫後如何快速進行功能調試和驗證,最好能將編碼、功能調試驗證在本地就可以完成,避免反覆拷貝到線上伺服器部署調試(物理環境的搭建和部署之痛苦相信很多NFV小夥伴深有體會);

可能您已經知道了可以藉助虛擬化技術可以在本地搭建網絡拓撲,但會碰到另外的問題,虛機的外設資源(例如若基於dpdk開發,重點需要關心cpu feature和網卡是否已經被支持)是否滿足NFV功能調試需求;

接著問題2,即使滿足,那麼本地如何產生測試流量;

如果上面的問題都不是問題了,那麼您的新問題可能會變為如何構建虛機,虛機外設資源如何選擇,如何打通虛機網絡.

筆者剛好對單機網絡及其虛擬化技術都有所涉獵,在一線開發過程中針對上述痛點積累了一些解決上述問題的方法,通過兩篇文章給大家分享出來,希望對大家的開發工作有所幫助和啟發。

本篇文章說明如果構建虛機,主要有如下幾個部分:

選擇hypervsior

如何構建虛機

如何訪問虛機

如何配置虛機網絡

通過上述步驟構建出虛機,可以為接下來的網絡拓撲環境搭建打下基礎;

選擇hypervsior

目前常見的hypervsior有vmware、virtbox、qemu/kvm;

筆者推薦使用qemu/kvm作為hypervisor,主要原因如下:

首先,vmware和virtbox都支持e1000類型網卡,但是這塊網卡的接受和發送隊列只有一個,通常情況下,這是無法滿足NFV產品的轉發模式的,因為一般都是每個cpu綁定負責輪詢網卡的一個接收隊列,如果只有一個隊列,是不能驗證多核轉發模式的,如果不能運行多核轉發模式,那麼可能無法對一些並發導致的問題進行針對性的調試驗證。

其次,vmware支持的vmnet3類型網卡可以支持多個隊列(需要求證),但是vmware是商業軟體,且vmware不支持目前比較火的virtio類型網卡,這樣對於雲上部署的NFV虛擬化產品是無法調試的;

再次,對於virtbox,目前的最新版本雖然是支持virtio,但是經過筆者測試,目前只能支持一個接口和發送隊列,是否能夠擴展隊列數目,還不得而知。

最後,對於qemu/kvm,目前各大公有雲廠商使用其作為雲主機的hypervsior,非常穩定且對外設模擬的支持非常豐富,因為開源,如果不滿足需求還可以進行深度定製。

如何構建虛機

選定qemu/kvm做為hypervisor後,如果構建虛機呢?

有兩個方法:

使用帶有圖形界面的工具:virt-manger(可以理解為類似virtualbox)

直接使用qemu命令行製作

如果不熟悉qemu的命令行參數,可以使用virt-manager來創建虛機鏡像和啟動虛機,如果熟悉qemu,則可以直接使用qemu來搞定,本質上,可以認為virt-manager是qemu的GUI前端。此外,若從來沒有接觸過qemu,那麼建議首先使用virt-manager來一步一步創建出一個虛機,然後通過virsh工具dump出虛機的配置文件(格式為xml),然後再查看qemu的命令行參數,通過對比xml文件和qemu的命令行參數,可以大概理解virt-manager/virsh/qemu這幾個組件之間的關係,隨著使用的越來越深入,若GUI沒有提供某些參數的配置入口,只要qemu已經支持了,那麼可以在當前的xml導出的qemu命令參數的基礎之上直接添加參數,然後直接啟動qemu即可。

為了方便進行腳本化和更加精細的配置外設,下面僅說明使用qemu來創建虛機鏡像和啟動虛機的過程,可以理解為將virt-manger創建虛機時進行的工作手動來完成。

1)製作虛機磁碟鏡像文件

qemu-img create -f qcow2 ./test.qcow2 30G

2)在製作好的磁碟鏡像文件中安裝系統

qemu-system-x86_64 -m 512M -smp 2 -cpu host -enable-kvm -boot c -hda ./test.qcow2 -cdrom ./CentOS-7-x86_64-Minimal-2003.ios

啟動安裝後如下圖,按照提示一步一步完成系統安裝;

3)啟動虛機

上述安裝完成後就可以啟動虛機了。在啟動虛機前,需要通過qemu命令行參數告訴qemu:為虛機模擬什麼外設及其外設類型具體是什麼;一般來說,要配置如下外設:

block:配置block硬體接口類型(IDE、virtio等)和存儲後端(如qcow2文件)

網卡:配置網卡類型(e1000、virtio等)和網絡後端(tap/vhost-user等)

VGA:不需要配置,因為qemu默認已經模擬並啟動了vncsever,需要配置的是vncserver的地址(ip和埠號),方便vncclient進行連接;

串口,當無法連接vncserver時,可以將虛機console的輸出,通過串口重定向輸出到host上;

對於NFV開發,我們更關心的是網卡類型,例如:下面的命令為虛機模擬三塊virtio類型的網卡,第一塊網卡類型為e1000, 第二塊和第三塊為virtio-net-pci

-netdev tap,id=net0,ifname=tap70,script=no -device e1000,netdev=net0,mac=00:0C:29:F1:07:00 -netdev tap,id=net1,ifname=tap71,script=no,vhost=on,queues=2 -device virtio-net-pci,netdev=net1,vectors=6,mq=on,mac=00:0C:29:F1:07:01 -netdev tap,id=net2,ifname=tap72,script=no,vhost=on,queues=2 -device virtio-net-pci,netdev=net2,vectors=6,mq=on,mac=00:0C:29:F1:07:02

qemu的命令行參數非常複雜,如果不閱讀分析源碼,是比較難深入理解的,但是還是有規律可循的,比如上述的網卡配置這塊,主要有兩部分:

-device: 這個選項告訴qemu,為虛機模擬什麼樣的外設,例如:virtio-net-pci,即虛機看到一個掛載pci總線上的一個類型為virito的網卡,後面的參數vectors/mq/mac配置網卡的規格屬性,對於物理網卡,這些參數是設備的固有參數,對於模擬網卡,通過這些參數可以告訴qemu如何去設置模擬網卡的屬性;

-netdev:這個選項告訴qemu,虛機出來的流量如何處理。虛機的流量通過模擬的網卡接收和發送(對於非pass-through的設備),對於虛機的發送的流量,必然首先到qemu,那麼qemu如何處理和轉發流量就由這個選項來配置。一般這個選項決定了虛機網絡後端的實現方式,目前雲環境中主要使用兩種:一種是vhost-net模式, 另一種是vhost-user模式;

如何訪問虛機

創建好虛機後,如何登錄虛機並操作虛機呢?

接管虛機的console;

當虛機網絡還未打通時,這是唯一能夠登錄虛機的方式。一般情況下,通過配置虛機內核的命令行參數,可以將虛機的console重定向到兩個終端,一個tty0(顯示器和鍵盤),一個為ttyS0 (串口設備),qemu已經完整的為虛機模擬了VGA設備和串口,所以接管虛機的console非常容易。qemu支持很豐富的顯示選項,筆者一般使用vnc,所以只說明vnc如何配置使用。

tty0(vnc接管):

實現原理:虛機將輸出寫入VGA顯存(linux下表現為framebuffer),qemu可以定期讀取該framebuffer(為什麼可以讀取,因為顯存也是qemu為虛機分配的),然後將顯存數據重定向到vnc會話,qemu實現了一個vnc-server,用戶可以啟動vnc-client來連接vnc-server,這樣vnc-client就可以看到虛機的顯示輸出和注入按鍵了。

虛機配置:一般虛機不需要特殊配置,因為在內核命令行參數中已經將console配置為tty0了。

qemu命令行參數配置示例:

qemu vnc-server會根據上述配置監聽5009埠;

ttyS0:

實現原理:一般情況下串口是系統的最基本的設備,所以console也可以重定向到串口,qemu讀取虛機從串口的輸出、往串口注入數據,這樣也可以完成和虛機的交互。

虛機配置:在虛機的內核命令行參數增加ttyS0的配置:

qemu命令行參數配置:qemu命令行參數配置:

通過網絡ssh登錄;

       通過網絡登錄首先要打通網絡,且虛機中運行sshd,並監聽22埠;網絡配置在下面「如何配置虛機網絡」小節進行說明。

如何配置虛機網絡

本節說明如何打通虛機和宿主機的網絡,注意,這個地方只關注如何通過宿主機登錄到虛機中,即打通管理網絡,虛機的業務網絡在「網絡搭建篇」進行說明。

筆者一直採用的方式是橋接的方式,這種方式配置比較簡單,且不用安裝其他組件,linux內核支持的比較完善和成熟,簡單配置就可以使用。

原理:使用tap設備對接虛機網卡的流量,然後將tap設備對應的netdev設備橋接到linux bridge上。路鋪好後就只需要在虛機和bridge上分別配置同一個子網的ip,這樣就可以三層互通了。配置示例如下:

虛機中:

ip a add 192.168.122.9/24 dev eth0ip l set dv eth0 up

宿主機上:

brctl addbr virbr0ip l set dev virbr0 upip addr add 192.168.122.1/24 dev virbr0brctl addif virbr0 tap0ip l set tap0 up

此外若虛機要訪問公網,也是比較簡單。首先要讓宿主機轉發虛機的流量,可以通過snat實現;host端配置如下:

iptables -t nat -A POSTROUTING -o <host-nic> -j MASQUERADE

其次,需要有一個域名解析server來幫助虛機解析域名,同樣可以在宿主機上運行一個域名伺服器,可以採用dnsmasq:

在虛機中配置好dns server地址:

此外還要在虛機中增加默認路由,這樣虛機可以訪問公網了。

ip r add default via 192.168.122.1 

相關焦點

  • VMware虛機備份和恢復
    1.3 VMware APIVMware 提供非常豐富的 API:其中,我們可以將與與備份相關的API分為兩類,一類是控制平面的API,它們主要用做管理1.3.1 VMware API 和 SDKVMware 通過 Web Service 向客戶端提供訪問接口,這些接口可用於管理虛機和其他虛擬設施,包括數據中心(datacenter),數據存儲(datastore), 網絡(network)等。它還提供了包括Java, .NET, Python, Perl, REST, 以及 Ruby 等幾種語言在內的 SDK。
  • 技術貼|vSphere and Virtual Machines--vSphere和虛機
    vCenter Server是用於管理網絡中連接的多個ESXi主機和池主機資源的服務。在對這套產品有了一個初步概念之後,開始正式的學習記錄啦一、什麼是Virtual Machines,虛機:虛擬機是一個物理機和其組件的軟體表現形式,虛擬機軟體會將物理機及其組件轉換成文件的形式。1.虛機是由什麼組成的:
  • 在OpenStack下安裝Windows虛機
    本周實踐的是在OpenStack下安裝Windows虛機,之所以晚了一天,是因為有問題沒解決,只好先把中間階段的成果先發出來,之前搞過
  • 雲與備份之(1):VMware虛機備份和恢復
    其中,我們可以將與與備份相關的API分為兩類,一類是控制平面的API,它們主要用做管理 vSphere 虛擬化環境;另一類是數據平面API,它們用於操作虛機的虛擬磁碟。1.3.1 VMware API 和 SDKVMware 通過 Web Service 向客戶端提供訪問接口,這些接口可用於管理虛機和其他虛擬設施,包括數據中心(datacenter),數據存儲(datastore), 網絡(network)等。
  • Libvirt下獲取虛機內存使用
    在我們的雲平臺中,基本都需要這樣一個功能,就是收集虛擬機監控數據,比如cpu使用率、內存使用率、磁碟io、網絡io等信息。
  • 虛機即容器 - vSphere Integrated Containers詳解
    簡單講,就是用輕量級的虛擬機替代Container來運行應用。乍一聽,虛擬機是個又笨又重的傢伙,怎麼能夠與快速靈巧的容器相比呢?其實這是個錯覺。虛機的「重」主要來自內裝的作業系統,現代的作業系統的磁碟空間一般都是GB級別的大小。虛機的「笨」也基本由於作業系統啟動太慢,吭嗤半天咖啡涼了才看到登錄畫面。只要把裡面的作業系統瘦身,虛機的創建和啟動完全可達到毫秒級。
  • KVM虛機無法啟動導致數據無法訪問的問題解決一例
    屏幕報錯:booting from harddisk failure reading sector 0x181630 from hd0 grub rescue>因為這臺虛機上有一些沒有備份的數據,所以嘗試修復。
  • [新手指南]OPNFV,SDN for OpenStack
    Pods目前已通過一個固定的jump host(用於指定的安裝包和使用特定布局的VLAN主幹和接入埠的網絡設計),被合理地統計。在未來的OPNFV版本中,網絡將會在每一次創建中,動態地進行配置。組成一個pod的6個伺服器由JenkinsJob Bulider腳本控制,被儲存在OPNFV Gerrit庫中。
  • 智匯華雲 | OpenStack路由器之拓撲解析
    當 Legacy Router 是 HA 時,路由器會分布在多臺網絡節點上,但某一時刻,只有一臺網絡節點上的路由器會承載虛機的網絡流量,我們稱該路由器為 Master Router,其它網絡節點的相同路由器為 Standby Router,虛機流量拓撲見下圖(此時,Master Router 在網絡節點B上):
  • 螞蟻SOFAStack助力中國人保健康搭建新一代業務系統
    其中,尤其在助力中國人保健康搭建新一代網際網路保險業務系統的過程中做出了突出貢獻。效率低、穩定性差 傳統架構讓中國人保健康面臨發展瓶頸在中國保險業內,第一個提出了「健康保險+健康管理」經營理念的中國人保健康,成功構建起「基本+大病(補充醫療)+醫療救助+長期護理+健康管理」完整保障鏈條,可以說是中國保險業的締造者和開拓者。
  • DPDK-A3: KVM使用SRIOV和虛機使用DPDK
    克隆完成後, 需要uuidgen[root@netdev vm]# uuidgen10c35319-bd71-4447-aa1a-88207ec42fbf[root@netdev vm]# vim /etc/libvirt/qemu/vm001.xml刪除虛機
  • 用Win10搭建Hyper-V伺服器
    以前經常用2016Server搭建Hyper-V伺服器,你們也知道Server有多麻煩,各種使用上的不方便,不如Win10好使,其實Hyper-V
  • 從這開始了解 OPNFV
    如果電信運營商或企業今天從頭開始構建網絡,那麼他們可能用軟體定義資源的方式構建,這與 Google 或 Facebook 的基礎設施類似。
  • 思華科技助力盛大遊戲構建全能型混合遊戲雲 盛大遊戲與時代「共舞」
    隨著遊戲運營環境的急劇變化,遊戲在線峰值的高度集中,手遊開發更加短平快。為承載紛繁複雜的業務體系及線上遊戲運營系統,盛大遊戲希望能緊跟行業技術發展態勢,迅速創新和升級IT基礎架構,為遊戲業務發展保駕護航。
  • 幹網絡工程的你弄清楚VLAN和VXLAN的區別嗎?
    隨著大數據、雲計算的快速發展,相應的設備數量和用戶規模也在不斷擴大,傳統的VLAN(虛擬區域網)技術由於最多只能支持4096個VLAN,已經不能滿足雲提供商的嚴格要求,反而VXLAN(虛擬可擴展區域網)技術因為可以通過將第2層擴展到第3層網絡來構建大型多租戶數據中心而備受青睞
  • vSphere 7融合Kubernetes,構建現代化應用的平臺
    其中最引人注目的更新當屬在 vSphere with Kubernetes (VwK) 功能,原生支持 Kubernetes 平臺,實現了虛機和容器混合管理的能力,使 vSphere 成為全新的現代化應用開發運維平臺。
  • 國內首個超大型NFV語音業務平臺穩定運行1年
    NFV,即網絡功能虛擬化(Network Function Virtualization)。通過使用x86等通用性硬體以及虛擬化技術,來承載很多功能的軟體處理。從而降低網絡昂貴的設備成本。可以通過軟硬體解耦及功能抽象,使網絡設備功能不再依賴於專用硬體,資源可以充分靈活共享,實現新業務的快速開發和部署,並基於實際業務需求進行自動部署、彈性伸縮、故障隔離和自愈等。
  • VMware網絡虛擬化介紹
    然後就幸災樂禍地把應用團隊指到網絡這邊來了,沒辦法,誰讓網絡是公共平臺呢,得先申請變更窗口吧,最快得一周吧。五分鐘和七天一比,這日子沒法過了。關鍵時刻,又是NSX挺身而出,偶也是軟體的,偶也是容器來的,倫家也可以被編程調用的。自此,自服務門戶上,用戶選了虛機選網絡,最後把安全策略也捎上。交付時,虛機交付多快,網絡就交付多快。