本發(fā)明是一種多用戶(hù)環(huán)境下利用瀏覽器訪問(wèn)Linux容器集群的方法和裝置,屬于軟件
技術(shù)領(lǐng)域:
:。
背景技術(shù):
::Linux容器是一種操作系統(tǒng)層虛擬化技術(shù),用來(lái)進(jìn)行進(jìn)程和資源的隔離。與虛擬機(jī)技術(shù)相比,Linux容器不需要指令級(jí)模擬,所以顯得更為輕量,性能也更高,是目前云計(jì)算領(lǐng)域備受矚目的技術(shù)之一。Linux容器集群是指將分布于物理集群上的多個(gè)Linux容器利用網(wǎng)絡(luò)連接起來(lái),組成的虛擬集群。利用這樣的虛擬集群,可以開(kāi)發(fā)和部署諸如Spark,MPI等分布式應(yīng)用,同時(shí)由于底層的基礎(chǔ)是Linux容器,所以在虛擬集群上的操作不會(huì)對(duì)物理服務(wù)器產(chǎn)生影響,具有很高的安全性和可用性。多用戶(hù)環(huán)境是指在同一個(gè)物理集群下,有很多的Linux容器集群,每個(gè)集群由若干個(gè)Linux容器組成,這些集群可以屬于不同的用戶(hù),在這樣一個(gè)環(huán)境下,需要對(duì)虛擬集群進(jìn)行隔離。傳統(tǒng)的對(duì)Linux容器集群進(jìn)行訪問(wèn)的方法,是利用本地的ssh客戶(hù)端,通過(guò)ssh進(jìn)行遠(yuǎn)程登錄,這就需要用戶(hù)在本地安裝ssh客戶(hù)端軟件,同時(shí)還要用戶(hù)記住目標(biāo)集群的地址、用戶(hù)名和密碼,便利性顯得不足。Jupyter是一個(gè)利用瀏覽器來(lái)對(duì)計(jì)算機(jī)進(jìn)行訪問(wèn)的工具。通過(guò)使用Jupyter,可以直接使用瀏覽器在網(wǎng)頁(yè)上對(duì)計(jì)算機(jī)進(jìn)行各種操作,包括文件閱讀和編輯,終端操作,以及包括R,python在內(nèi)的多種語(yǔ)言的交互式編程。Jupyter的這一功能使得我們可以將其用于Linux容器的訪問(wèn)中,但它僅適合單一Linux容器的場(chǎng)合,并不能同時(shí)訪問(wèn)一個(gè)Linux容器集群中的所有容器;同時(shí),當(dāng)Linux容器沒(méi)有全局IP地址時(shí),無(wú)法直接訪問(wèn)該容器的Jupyter界面;最后,在多用戶(hù)的情況下,還有不同用戶(hù)之間能互相訪問(wèn)同一容器的問(wèn)題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對(duì)上述問(wèn)題,實(shí)現(xiàn)了一種多用戶(hù)環(huán)境下利用瀏覽器訪問(wèn)Linux容器集群的方法和裝置,使用戶(hù)能夠通過(guò)瀏覽器訪問(wèn)Linux容器集群,同時(shí)保證在多用戶(hù)環(huán)境下的安全可靠性。本發(fā)明采用的技術(shù)方案如下:一種多用戶(hù)環(huán)境下利用瀏覽器訪問(wèn)Linux容器集群的方法,包括以下步驟:1)在Linux容器集群上部署Master節(jié)點(diǎn)和若干Worker節(jié)點(diǎn),其中Master節(jié)點(diǎn)用于進(jìn)行集中管理,Worker節(jié)點(diǎn)是Linux容器的載體;2)在創(chuàng)建Linux容器集群時(shí),Master節(jié)點(diǎn)為L(zhǎng)inux容器集群分配一個(gè)子網(wǎng),并從該子網(wǎng)內(nèi)部為L(zhǎng)inux容器分配IP地址(這樣同一個(gè)容器集群內(nèi)的容器會(huì)處于同一子網(wǎng)內(nèi));3)Master節(jié)點(diǎn)處理用戶(hù)的創(chuàng)建Linux容器集群的請(qǐng)求,并將其分發(fā)到Worker節(jié)點(diǎn),由Worker節(jié)點(diǎn)創(chuàng)建Linux容器;4)對(duì)創(chuàng)建的Linux容器進(jìn)行Jupyter相關(guān)參數(shù)的配置,并啟動(dòng)Jupyter,通過(guò)http代理(配置于服務(wù)器端)將對(duì)Linux容器集群訪問(wèn)的URL綁定到Linux容器的Jupyter運(yùn)行端口上;5)當(dāng)用戶(hù)訪問(wèn)Linux容器集群時(shí),由Master節(jié)點(diǎn)對(duì)用戶(hù)信息進(jìn)行認(rèn)證,認(rèn)證成功則進(jìn)入對(duì)應(yīng)的Jupyter頁(yè)面,從而實(shí)現(xiàn)對(duì)Linux容器集群的訪問(wèn)。進(jìn)一步地,在Linux容器所在的宿主機(jī)上構(gòu)建虛擬網(wǎng)橋,并在各虛擬網(wǎng)橋之間搭建GRE(GenericRoutingEncapsulation,通用路由封裝)隧道,使得分布于不同宿主機(jī)上的Linux容器之間能互相連通,并利用iptables(Linux內(nèi)核集成的IP信息包過(guò)濾系統(tǒng))做NAT(NetworkAddressTranslation,網(wǎng)絡(luò)地址轉(zhuǎn)換)映射使得Linux容器能與外部網(wǎng)絡(luò)通信。進(jìn)一步地,Master節(jié)點(diǎn)使用伙伴算法為L(zhǎng)inux容器集群分配一個(gè)子網(wǎng),隨后從該子網(wǎng)的IP地址段中隨機(jī)選擇IP地址并分配給Linux容器。進(jìn)一步地,使用VLAN(VirtualLocalAreaNetwork,虛擬局域網(wǎng))技術(shù)防止Linux容器數(shù)量過(guò)多時(shí)造成的廣播風(fēng)暴。進(jìn)一步地,對(duì)同一個(gè)Linux容器集群內(nèi)的Linux容器之間進(jìn)行host(主機(jī))信息登記,并進(jìn)行互相之間的ssh(SecureShell,安全外殼協(xié)議)免認(rèn)證登陸。進(jìn)一步地,通過(guò)瀏覽器的cookie存儲(chǔ)用戶(hù)信息,當(dāng)用戶(hù)點(diǎn)擊訪問(wèn)Linux容器集群的按鈕時(shí),會(huì)將存儲(chǔ)于瀏覽器cookie中的用戶(hù)信息發(fā)送到服務(wù)器端,在服務(wù)器端進(jìn)行用戶(hù)信息認(rèn)證,驗(yàn)證成功,即可進(jìn)入所啟動(dòng)的Jupyter頁(yè)面內(nèi)。在進(jìn)入的Jupyter頁(yè)面內(nèi),用戶(hù)可以進(jìn)入網(wǎng)頁(yè)版終端進(jìn)行操作,并可以免認(rèn)證地登陸進(jìn)集群內(nèi)的其他Linux容器內(nèi),從而輕松地開(kāi)發(fā)和部署分布式應(yīng)用。一種多用戶(hù)環(huán)境下利用瀏覽器訪問(wèn)Linux容器集群的裝置,包括部署在Linux容器集群上的Master節(jié)點(diǎn)、若干Worker節(jié)點(diǎn)和http代理工具;所述Master節(jié)點(diǎn)用于進(jìn)行集中管理,處理用戶(hù)的創(chuàng)建Linux容器集群的請(qǐng)求,并將其分發(fā)到Worker節(jié)點(diǎn);所述Worker節(jié)點(diǎn)是Linux容器的載體,用于處理Master發(fā)來(lái)的對(duì)Linux容器的操作請(qǐng)求;在創(chuàng)建Linux容器集群時(shí),Master節(jié)點(diǎn)為L(zhǎng)inux容器集群分配一個(gè)子網(wǎng),并從該子網(wǎng)內(nèi)部為L(zhǎng)inux容器分配IP地址;所述http代理工具用于將對(duì)Linux容器集群訪問(wèn)的URL綁定到Linux容器的Jupyter運(yùn)行端口上,以實(shí)現(xiàn)用戶(hù)對(duì)Linux容器集群的訪問(wèn)。采用本發(fā)明的方案,用戶(hù)可以點(diǎn)擊網(wǎng)頁(yè)上的創(chuàng)建Linux容器集群按鈕,選擇相關(guān)參數(shù),如內(nèi)存限額,磁盤(pán)限額等之后,在服務(wù)器端為用戶(hù)創(chuàng)建好Linux容器集群。采用本發(fā)明的方案,用戶(hù)可以對(duì)已存在的Linux容器集群進(jìn)行擴(kuò)張,通過(guò)點(diǎn)擊網(wǎng)頁(yè)上的對(duì)應(yīng)按鈕,可以新建Linux容器,并將其與原先的集群通過(guò)網(wǎng)絡(luò)進(jìn)行連接。采用本發(fā)明的方案,用戶(hù)可以對(duì)已存在的Linux容器集群進(jìn)行收縮,通過(guò)點(diǎn)擊網(wǎng)頁(yè)上的對(duì)應(yīng)按鈕,可以刪除一個(gè)集群內(nèi)的某個(gè)Linux容器。本發(fā)明的有益效果如下:本發(fā)明能夠使用戶(hù)通過(guò)瀏覽器訪問(wèn)Linux容器集群,同時(shí)保證在多用戶(hù)環(huán)境下的安全可靠性。采用本發(fā)明的方法,用戶(hù)可以點(diǎn)擊網(wǎng)頁(yè)上的相應(yīng)按鈕,在服務(wù)器端實(shí)現(xiàn)Linux容器集群的創(chuàng)建、擴(kuò)張或收縮。用戶(hù)可以使用Jupyter,在網(wǎng)頁(yè)上進(jìn)行應(yīng)用開(kāi)發(fā)和部署,同時(shí),基于底層的Linux容器集群,用戶(hù)還可以方便快捷地進(jìn)行分布式應(yīng)用的開(kāi)發(fā)和部署。附圖說(shuō)明圖1為本發(fā)明裝置的架構(gòu)圖。圖2是本發(fā)明裝置的網(wǎng)絡(luò)結(jié)構(gòu)圖。圖3為本發(fā)明創(chuàng)建和訪問(wèn)一個(gè)容器集群的流程圖。圖4和圖5是Linux容器集群子網(wǎng)分配所使用的的伙伴算法的流程圖。具體實(shí)施方式下面通過(guò)具體實(shí)施例和附圖,對(duì)本發(fā)明做進(jìn)一步說(shuō)明。本發(fā)明實(shí)現(xiàn)了一個(gè)通過(guò)瀏覽器創(chuàng)建和訪問(wèn)Linux容器集群的裝置,圖1為本發(fā)明裝置的架構(gòu)圖,該裝置部署在一個(gè)集群上,是一個(gè)Master-Worker模式的系統(tǒng)。其中Master節(jié)點(diǎn)(主節(jié)點(diǎn),或可稱(chēng)作管理節(jié)點(diǎn))進(jìn)行集中的管理,用于處理用戶(hù)通過(guò)點(diǎn)擊網(wǎng)頁(yè)按鈕發(fā)來(lái)的URL請(qǐng)求,并將其解析,然后分發(fā)到Worker節(jié)點(diǎn)(工作節(jié)點(diǎn))上,Worker節(jié)點(diǎn)是Linux容器的載體,并處理Master發(fā)來(lái)的對(duì)Linux容器的操作請(qǐng)求。本發(fā)明同時(shí)還提供了web界面,方便用戶(hù)操作。下面詳細(xì)解釋具體的實(shí)施方式。在本發(fā)明中,使用了http代理工具configure-http-proxy來(lái)實(shí)現(xiàn)對(duì)URL的解析,初始時(shí)沒(méi)有Linux容器集群,代理工具默認(rèn)將所有http請(qǐng)求發(fā)送到Master節(jié)點(diǎn)的服務(wù)器上,如圖1所示。圖2是本裝置的網(wǎng)絡(luò)結(jié)構(gòu)圖。本裝置使用openvSwitch工具在每個(gè)宿主機(jī)上構(gòu)建一個(gè)虛擬網(wǎng)橋,并在這些網(wǎng)橋之間搭建GRE隧道,使得它們之間能直接互通,并使用iptables做NAT映射,使得Linux容器收發(fā)的網(wǎng)絡(luò)包能經(jīng)由宿主機(jī)的網(wǎng)卡進(jìn)行傳遞,使得Linux容器能與外部網(wǎng)絡(luò)通信。圖3為本發(fā)明創(chuàng)建和訪問(wèn)一個(gè)容器集群的流程圖。當(dāng)用戶(hù)點(diǎn)擊網(wǎng)頁(yè)上的創(chuàng)建集群按鈕時(shí),一個(gè)創(chuàng)建請(qǐng)求的URL被發(fā)送到Master節(jié)點(diǎn)上,Master會(huì)使用伙伴算法(如圖4、圖5所示)為該集群分配一個(gè)子網(wǎng),隨后從該子網(wǎng)的IP地址段中隨機(jī)選擇一個(gè)IP地址分配給第一個(gè)Linux容器,同時(shí)為該集群分配一個(gè)VLANID。然后Master會(huì)選擇一個(gè)Worker節(jié)點(diǎn),將創(chuàng)建Linux容器的請(qǐng)求發(fā)送給它。Worker節(jié)點(diǎn)收到請(qǐng)求后,會(huì)根據(jù)容器被分配到的IP地址和構(gòu)建出來(lái)的虛擬網(wǎng)橋信息,以及用戶(hù)創(chuàng)建時(shí)填寫(xiě)的參數(shù)生成配置文件,然后調(diào)用Linux容器的命令,以該配置文件為基礎(chǔ)創(chuàng)建Linux容器。然后在宿主機(jī)網(wǎng)橋上對(duì)連接該IP地址的端口標(biāo)記上該集群的VLANID。然后在該Linux容器內(nèi)以用戶(hù)和集群的信息為參數(shù),啟動(dòng)Jupyter,并設(shè)置Jupyter訪問(wèn)的認(rèn)證URL。在Worker的工作處理完成后,Master會(huì)將該容器的Jupyter運(yùn)行端口與一個(gè)指定格式的URL綁定,這個(gè)URL對(duì)每個(gè)集群是唯一的且互不相同,該過(guò)程通過(guò)調(diào)用configure-http-proxy的API實(shí)現(xiàn)。在此之后,所有對(duì)該URL的訪問(wèn)都會(huì)定向到該容器的Jupyter的運(yùn)行端口上。用戶(hù)可以通過(guò)點(diǎn)擊網(wǎng)頁(yè)上的訪問(wèn)集群按鈕對(duì)該集群的Jupyter頁(yè)面進(jìn)行訪問(wèn),此時(shí)會(huì)將存儲(chǔ)于瀏覽器cookie上的用戶(hù)信息作為參數(shù)一并傳遞過(guò)去,該按鈕會(huì)訪問(wèn)前面提到的指定URL,這個(gè)請(qǐng)求會(huì)被發(fā)送到Jupyter實(shí)例上,隨后Jupyter會(huì)調(diào)用認(rèn)證URL,認(rèn)證URL會(huì)被發(fā)送到Master節(jié)點(diǎn)上,由Master節(jié)點(diǎn)對(duì)用戶(hù)信息進(jìn)行認(rèn)證,認(rèn)證成功,則會(huì)進(jìn)入對(duì)應(yīng)的Jupyter頁(yè)面。當(dāng)用戶(hù)點(diǎn)擊網(wǎng)頁(yè)上的擴(kuò)張集群按鈕時(shí),Master會(huì)從該集群的子網(wǎng)中隨機(jī)選擇一個(gè)IP地址分配出來(lái)(如圖4所示),然后選擇一個(gè)Worker節(jié)點(diǎn),將創(chuàng)建Linux容器的請(qǐng)求發(fā)送給它,Worker節(jié)點(diǎn)收到請(qǐng)求,會(huì)根據(jù)容器被分配到的IP地址和虛擬網(wǎng)橋信息,以及用戶(hù)創(chuàng)建時(shí)填寫(xiě)的參數(shù)生成配置文件,然后調(diào)用Linux容器的命令,以該配置文件為基礎(chǔ)創(chuàng)建Linux容器。然后在宿主機(jī)網(wǎng)橋上對(duì)連接該IP地址的端口標(biāo)記上該集群的VLANID。然后在該集群原有的其它Linux容器和這個(gè)新建的Linux容器之間分別做ssh的免認(rèn)證登陸,并更新host文件的信息。當(dāng)用戶(hù)點(diǎn)擊網(wǎng)頁(yè)上的收縮集群按鈕時(shí),Master會(huì)根據(jù)要被刪除的Linux容器的信息找到其所在的Worker節(jié)點(diǎn),然后對(duì)Worker節(jié)點(diǎn)發(fā)送刪除請(qǐng)求,對(duì)應(yīng)的Worker節(jié)點(diǎn)會(huì)調(diào)用命令刪除該Linux容器,在這之后,Master會(huì)把被刪除的容器的IP地址釋放到待分配地址池中,如圖5所示。當(dāng)用戶(hù)點(diǎn)擊網(wǎng)頁(yè)上的刪除集群按鈕時(shí),Master會(huì)讀取該集群內(nèi)所有Linux容器所在的Worker節(jié)點(diǎn)位置,分別對(duì)這些Worker節(jié)點(diǎn)發(fā)送刪除請(qǐng)求,在所有Linux容器都被刪除之后,Master會(huì)釋放該集群被分配的子網(wǎng)的IP地址區(qū)間。以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,本領(lǐng)域的普通技術(shù)人員可以對(duì)本發(fā)明的技術(shù)方案進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求書(shū)所述為準(zhǔn)。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3