本發(fā)明涉及云計算與網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是一種基于文件的虛擬機與宿主機通信方法。
背景技術(shù):
隨著云計算行業(yè)日益發(fā)展,云平臺上虛擬機越來越多,技術(shù)不斷更新,對于已有的虛擬機更新是一個大困難,會帶來以下問題:
一是虛擬機客戶環(huán)境都是保密,運維人員手動更新文件到虛擬機幾乎不可能,給系統(tǒng)升級帶來困難。
二是人為操作會容易出現(xiàn)錯誤,讓客戶業(yè)務(wù)數(shù)據(jù)造成一定風(fēng)險性。
三是虛擬機數(shù)量大,給運維升級帶來很大的工作量。
四是虛擬機數(shù)量大,內(nèi)部文件一致性難以保證。
為了提升云平臺的可用性和穩(wěn)定性,增強虛擬機功能的穩(wěn)定性,需要一種基于文件的虛擬機與宿主機通信的方法,從而可以大批量更新虛擬機內(nèi)部環(huán)境文件。
技術(shù)實現(xiàn)要素:
本發(fā)明解決的技術(shù)問題在于提供一種基于文件的虛擬機與宿主機通信方法;解決云平臺可以更新虛擬機內(nèi)部文件,更好地保持虛擬機功能的完整性和數(shù)據(jù)一致性,讓客戶已有的虛擬機不需要遷移業(yè)務(wù)的情況下更新虛擬機內(nèi)部環(huán)境,增大用戶體驗。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
包括如下步驟:
步驟1:創(chuàng)建一臺qemu通信通道的虛擬機,通過libvirt配置channel綁定路徑;
步驟2:安裝qemu串口代理服務(wù)到虛擬機,并且啟動;
步驟3:讀取文件內(nèi)容,然后對內(nèi)容進行Base64加密;
步驟4:通過串口代理打開虛擬機內(nèi)指定路徑文件;
步驟5:將內(nèi)容傳輸?shù)教摂M機里面,并且通過Base64解密密文;
步驟5:寫入虛擬機內(nèi)指定路徑文件;
步驟6:關(guān)閉文件流;
步驟7:文件上傳完成。
所述qemu通信通道是宿主機與虛擬機以串口形式打開的一個通信通道;
所述libvirt是一種實現(xiàn)Linux虛擬化功能的Linux對外接口;
所述qemu串口代理服務(wù)是指一個運行在虛擬機內(nèi)部的普通應(yīng)用程序,服務(wù)名稱默認為qemu-guest-agent;
所述Base64是指用于傳輸8Bit字節(jié)代碼的編碼方式,防止傳輸過程中亂碼情況。
虛擬機與宿主機通過串口通道方式,基于文件形式來實現(xiàn)虛擬機與宿主機進行通信。
內(nèi)容加密是為了能傳輸特殊字符或者文字,通過base64編碼之后,轉(zhuǎn)換為傳輸安全的密文到虛擬機,再進行解密來完成文件內(nèi)容寫入。
關(guān)閉文件流為了防止遺漏的文件線程導(dǎo)致下次文件無法修改,確保文件數(shù)據(jù)一致性和安全性。
本發(fā)明通過串口代理方式基于文件的方式進行宿主機與虛擬機之間通信,可以隨時將宿主機的文件加密傳輸?shù)教摂M機上,實現(xiàn)大量虛擬機內(nèi)部環(huán)境腳本更新,本發(fā)明給運維人員的升級提供很大的便利性。云平臺上的虛擬機也越來越多,如果需要更新所有虛擬機上的某一個腳本,這個問題也難以避免,本發(fā)明解決了云平臺可以更新虛擬機內(nèi)部文件,更好地保持虛擬機功能的完整性和數(shù)據(jù)一致性,讓客戶已有的虛擬機不需要遷移業(yè)務(wù)的情況下更新虛擬機內(nèi)部環(huán)境,增大了用戶體驗,適應(yīng)當前飛速發(fā)展的云計算需求。
附圖說明
下面結(jié)合附圖對本發(fā)明進一步說明:
圖1為本發(fā)明方法流程圖。
具體實施方式
見圖1所示,是本發(fā)明的基本流程;主要包括以下步驟:
步驟1:創(chuàng)建一臺qemu通信通道的虛擬機,通過libvirt配置channel綁定路徑;
步驟2:安裝qemu串口代理服務(wù)到虛擬機,并且啟動;
步驟3:讀取文件內(nèi)容,然后對內(nèi)容進行Base64加密;
步驟4:通過串口代理打開虛擬機內(nèi)指定路徑文件;
步驟5:將內(nèi)容傳輸?shù)教摂M機里面,并且通過Base64解密密文;
步驟5:寫入虛擬機內(nèi)指定路徑文件;
步驟6:關(guān)閉文件流;
步驟7:文件上傳完成。
加密解密代碼:
讀文件命令:
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-open″,
″arguments″:{″path″:″/tmp/testqga″,″mode″:″r″}}′
{″return″:1000}
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-read″,″arguments″:{″handle″:1000}}′
{″return″:{″count″:5,″buf-b64″:″MjIyMgo=″,″eof″:true}}
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-close″,″arguments″:{″handle″:1000}}′
{″return″:{}}
寫文件命令:
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-open″,
″arguments″:{″path″:″/tmp/testqga″,″mode″:″w+″}}′
{″return″:1002}
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-write″,
″arguments″:{″handle″:1002,″buf-b64″:″YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=″}}′
{″return″:{″count″:26,″eof″:false}}
virsh qemu-agent-command i-xxxxx′{″execute″:″guest-file-close″,
″arguments″:{″handle″:1001}}′
{″return″:{}}