本發(fā)明實施例涉及通信技術(shù)領(lǐng)域,尤其涉及一種容器訪問的控制方法及裝置。
背景技術(shù):
Docker是一個開源的應(yīng)用容器引擎,在物理主機上安裝Docker后,可在Docker的基礎(chǔ)上承載多個容器,多個容器之間相互隔離,多個容器共享物理主機的操作系統(tǒng),各容器可放置并執(zhí)行不同的應(yīng)用程序。
將安裝有Docker容器的物理主機稱為Docker服務(wù)器,例如Docker容器1在Docker服務(wù)器1中,Docker容器2在Docker服務(wù)器2中,當(dāng)Docker容器1作為客戶端需要訪問Docker容器2時,Docker容器1創(chuàng)建請求報文,該請求報文的源IP地址是Docker服務(wù)器1的IP地址,目的IP地址是Docker服務(wù)器2的IP地址。
但是,當(dāng)Docker容器2從Docker服務(wù)器2遷移到其他Docker服務(wù)器后,客戶端將無法與Docker容器2進行通信,降低了訪問Docker容器的可靠性。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種容器訪問的控制方法及裝置,以提高訪問Docker容器的可靠性。
本發(fā)明實施例的一個方面是提供一種容器訪問的控制方法,包括:
接收客戶端發(fā)送的訪問請求,所述訪問請求包括目的端口號;
根據(jù)所述目的端口號,獲取映射端口號,所述目的端口號與所述映射端口號對應(yīng);
根據(jù)所述映射端口號,獲取與所述映射端口號對應(yīng)的Docker容器的公網(wǎng)地址;
根據(jù)所述Docker容器的公網(wǎng)地址,將所述訪問請求發(fā)送給所述Docker容器。
本發(fā)明實施例的另一個方面是提供一種容器訪問的控制裝置,包括:
接收模塊,用于接收客戶端發(fā)送的訪問請求,所述訪問請求包括目的端口號;
獲取模塊,用于根據(jù)所述目的端口號,獲取映射端口號,所述目的端口號與所述映射端口號對應(yīng);根據(jù)所述映射端口號,獲取與所述映射端口號對應(yīng)的Docker容器的公網(wǎng)地址;
發(fā)送模塊,用于根據(jù)所述Docker容器的公網(wǎng)地址,將所述訪問請求發(fā)送給所述Docker容器。
本發(fā)明實施例提供的容器訪問的控制方法及裝置,客戶端通過中繼器向Docker容器發(fā)送訪問請求,中繼器將該訪問請求發(fā)送給Docker容器,即使Docker容器從源服務(wù)器遷移到的其他服務(wù)器,客戶端均可以將發(fā)送給Docker容器的訪問請求先發(fā)送給中繼器,由中繼器向Docker容器轉(zhuǎn)發(fā)該訪問請求,保證了客戶端訪問Docker容器的可靠性。
附圖說明
圖1為本發(fā)明實施例提供的容器訪問的控制方法方法流程圖;
圖2為本發(fā)明實施例提供的容器訪問的控制方法適用的網(wǎng)絡(luò)結(jié)構(gòu)圖;
圖3為本發(fā)明實施例提供的容器訪問的控制裝置的結(jié)構(gòu)圖;
圖4為本發(fā)明另一實施例提供的容器訪問的控制裝置的結(jié)構(gòu)圖。
具體實施方式
圖1為本發(fā)明實施例提供的容器訪問的控制方法流程圖;圖2為本發(fā)明實施例提供的容器訪問的控制方法適用的網(wǎng)絡(luò)結(jié)構(gòu)圖。本發(fā)明實施例針對Docker容器2從Docker服務(wù)器2遷移到其他Docker服務(wù)器后,客戶端將無法與Docker容器2進行通信,降低了訪問Docker容器的效率,提供了容器訪問的控制方法,該方法具體步驟如下:
步驟S101、接收所述Docker容器發(fā)送的端口申請報文,所述端口申請報文包括所述Docker容器的公網(wǎng)地址;
如圖2所示,Docker服務(wù)器21安裝有Docker容器C1,Docker服務(wù)器22安裝有Docker容器C2,Docker容器C2中設(shè)置有中繼器代理,中繼器代理中預(yù)先存儲有中繼器23的IP地址和服務(wù)端口號,例如,中繼器23的IP地址是202.1.1.1,服務(wù)端口號是2222。本發(fā)明實施例將Docker容器C1作為客戶端,Docker容器C2作為服務(wù)端,客戶端訪問服務(wù)端。
Docker容器C2通過中繼器代理中存儲的中繼器23的IP地址和服務(wù)端口號訪問中繼器23,具體的,向中繼器23發(fā)送端口申請報文,該端口申請報文的目的IP地址是中繼器23的IP地址例如202.1.1.1,目的端口號是中繼器23的服務(wù)端口號例如2222,源IP地址是Docker服務(wù)器22的IP地址例如202.0.0.2,源端口號是Docker容器C2在Docker服務(wù)器22上的公網(wǎng)端口號例如2222。
步驟S102、根據(jù)所述端口申請報文,給所述Docker容器分配映射端口,并建立所述映射端口和所述公網(wǎng)地址的映射關(guān)系;
步驟S103、根據(jù)所述映射端口,獲取目的端口號,所述目的端口號是奇數(shù),所述映射端口比所述目的端口號大1的偶數(shù);
中繼器23接收到該端口申請報文后,給Docker容器C2分配一個映射端口,中繼器23的端口號分為兩類:一類是奇數(shù)類的端口號,另一類是偶數(shù)類的端口號,其中,偶數(shù)類的端口號如1002可作為映射端口分配給Docker容器,奇數(shù)類的端口號如1001作為請求端口可接收客戶端的請求,具體的,一個奇數(shù)和一個偶數(shù)構(gòu)成一對映射關(guān)系,例如中繼器23的端口1001和端口1002構(gòu)成一對映射關(guān)系,端口1001可用于接收客戶端的請求,端口1002可用于關(guān)聯(lián)到Docker容器C2在Docker服務(wù)器22上的公網(wǎng)地址,即Docker容器C2向中繼器23發(fā)送了端口申請報文,端口申請報文包括Docker容器C2在Docker服務(wù)器22上的公網(wǎng)地址,中繼器23為Docker容器C2分配了映射端口1002,并建立映射端口1002與該公網(wǎng)地址的映射關(guān)系,該公網(wǎng)地址包括Docker容器C2在Docker服務(wù)器22上的公網(wǎng)IP地址例如202.0.0.2,以及Docker容器C2在Docker服務(wù)器22上的公網(wǎng)端口號例如2222。
步驟S104、將所述目的端口號發(fā)送給所述Docker容器;
另外,中繼器23還可將分配給Docker容器C2的映射端口1002對應(yīng)的請求端口1001發(fā)送給Docker容器C2,Docker容器C2將中繼器23的IP地址如202.1.1.1,以及請求端口1001發(fā)送給域名服務(wù)器,以使域名服務(wù)器建立Docker服務(wù)器22的域名和202.1.1.1:1001的映射關(guān)系,以便客戶端根據(jù)Docker服務(wù)器22的域名從域名服務(wù)器獲取IP地址202.1.1.1和端口號1001。
步驟S105、接收客戶端發(fā)送的訪問請求,所述訪問請求包括目的端口號;
客戶端通過域名服務(wù)器獲取到Docker服務(wù)器22的域名對應(yīng)的IP地址202.1.1.1和端口號1001后,向中繼器23發(fā)送訪問請求,該訪問請求的源IP地址是客戶端的IP地址,目的IP地址是202.1.1.1,目的端口號是1001。
步驟S106、根據(jù)所述目的端口號,獲取映射端口號,所述目的端口號與所述映射端口號對應(yīng);
中繼器23的端口號1001接收到該訪問請求后,根據(jù)端口號1001獲取與端口號1001對應(yīng)的映射端口號即1002。
步驟S107、根據(jù)所述映射端口號,獲取與所述映射端口號對應(yīng)的Docker容器的公網(wǎng)地址;
由于映射端口號1002可關(guān)聯(lián)到Docker容器C2在Docker服務(wù)器22上的公網(wǎng)地址,則根據(jù)映射端口號1002獲取Docker容器C2在Docker服務(wù)器22上的公網(wǎng)地址,即Docker容器C2在Docker服務(wù)器22上的公網(wǎng)IP地址例如202.0.0.2,以及Docker容器C2在Docker服務(wù)器22上的公網(wǎng)端口號例如2222。
步驟S108、根據(jù)所述Docker容器的公網(wǎng)地址,將所述訪問請求發(fā)送給所述Docker容器。
中繼器23根據(jù)Docker容器C2在Docker服務(wù)器22上的公網(wǎng)IP地址例如202.0.0.2,以及Docker容器C2在Docker服務(wù)器22上的公網(wǎng)端口號例如2222,向Docker容器C2所在的Docker服務(wù)器22轉(zhuǎn)發(fā)該訪問請求。Docker服務(wù)器22根據(jù)Docker容器C2在Docker服務(wù)器22上的公網(wǎng)端口號和Docker容器C2的私網(wǎng)端口號,確定出Docker容器C2在Docker服務(wù)器22上的私網(wǎng)端口號例如80,將該訪問請求轉(zhuǎn)發(fā)到私網(wǎng)端口80即Docker容器C2。
在本發(fā)明實施例中,客戶端也可以除Docker容器之外的設(shè)備。
另外,當(dāng)Docker容器C2從Docker服務(wù)器22遷移到其他Docker服務(wù)器例如Docker服務(wù)器24后,Docker容器C2通過中繼器代理中存儲的中繼器23的IP地址和服務(wù)端口號訪問中繼器23,具體的,向中繼器23發(fā)送端口申請報文,該端口申請報文的目的IP地址是中繼器23的IP地址例如202.1.1.1,目的端口號是中繼器23的服務(wù)端口號例如2222,源IP地址是Docker服務(wù)器24的IP地址例如202.0.0.4,源端口號是Docker容器C2在Docker服務(wù)器24上的公網(wǎng)端口號例如4444。中繼器23根據(jù)上述方法為Docker容器C2再次分配偶數(shù)的映射端口號,并建立映射端口號和Docker容器C2在Docker服務(wù)器24上的公網(wǎng)地址的映射關(guān)系,同時獲取與映射端口號對應(yīng)的奇數(shù)的端口號,將奇數(shù)的端口號發(fā)送給Docker容器C2,重復(fù)步驟S105之后的操作。
本發(fā)明實施例中,客戶端通過中繼器向Docker容器發(fā)送訪問請求,中繼器將該訪問請求發(fā)送給Docker容器,即使Docker容器從源服務(wù)器遷移到的其他服務(wù)器,客戶端均可以將發(fā)送給Docker容器的訪問請求先發(fā)送給中繼器,由中繼器向Docker容器轉(zhuǎn)發(fā)該訪問請求,保證了客戶端訪問Docker容器的可靠性。
另外,在實施例一的基礎(chǔ)上,步驟S108之后還包括如下步驟:
步驟S109、接收所述Docker容器發(fā)送的響應(yīng)信息,所述響應(yīng)信息以所述客戶端的地址為目的地址,以所述目的端口號為源端口號。
Docker容器C2接收到訪問請求后,對該訪問請求進行處理,生成響應(yīng)信息,該響應(yīng)信息的目的IP地址是客戶端的IP地址,源IP地址是中繼器23的IP地址即202.1.1.1,源端口號是中繼器23分配給Docker容器C2的映射端口1002對應(yīng)的請求端口1001。
本發(fā)明實施例通過Docker容器將其回復(fù)客戶端的響應(yīng)信息中的源IP地址設(shè)置為中繼器的IP地址、源端口號設(shè)置為中繼器分配給Docker容器的請求端口,并根據(jù)客戶端的IP地址將響應(yīng)信息直接發(fā)送給客戶端,不需中繼器向客戶端轉(zhuǎn)發(fā)響應(yīng)信息,提高了響應(yīng)信息的發(fā)送效率。
圖3為本發(fā)明實施例提供的容器訪問的控制裝置的結(jié)構(gòu)圖。本發(fā)明實施例提供的容器訪問的控制裝置可以執(zhí)行容器訪問的控制方法實施例提供的處理流程,如圖3所示,容器訪問的控制裝置30包括接收模塊31、獲取模塊32、發(fā)送模塊33,其中,接收模塊31用于接收客戶端發(fā)送的訪問請求,所述訪問請求包括目的端口號;獲取模塊32用于根據(jù)所述目的端口號,獲取映射端口號,所述目的端口號與所述映射端口號對應(yīng);根據(jù)所述映射端口號,獲取與所述映射端口號對應(yīng)的Docker容器的公網(wǎng)地址;發(fā)送模塊33用于根據(jù)所述Docker容器的公網(wǎng)地址,將所述訪問請求發(fā)送給所述Docker容器。
本發(fā)明實施例提供的容器訪問的控制裝置可以具體用于執(zhí)行上述圖1所提供的方法實施例,具體功能此處不再贅述。
本發(fā)明實施例客戶端通過中繼器向Docker容器發(fā)送訪問請求,中繼器將該訪問請求發(fā)送給Docker容器,即使Docker容器從源服務(wù)器遷移到的其他服務(wù)器,客戶端均可以將發(fā)送給Docker容器的訪問請求先發(fā)送給中繼器,由中繼器向Docker容器轉(zhuǎn)發(fā)該訪問請求,保證了客戶端訪問Docker容器的可靠性。
圖4為本發(fā)明另一實施例提供的容器訪問的控制裝置的結(jié)構(gòu)圖。在上述實施例的基礎(chǔ)上,接收模塊31還用于接收所述Docker容器發(fā)送的端口申請報文,所述端口申請報文包括所述Docker容器的公網(wǎng)地址。
容器訪問的控制裝置30還包括:分配模塊35和建立模塊36。
分配模塊35用于根據(jù)所述端口申請報文,給所述Docker容器分配映射端口;建立模塊36用于建立所述映射端口和所述公網(wǎng)地址的映射關(guān)系。
獲取模塊32還用于根據(jù)所述映射端口,獲取目的端口號,所述目的端口號是奇數(shù),所述映射端口比所述目的端口號大1的偶數(shù);所述發(fā)送模塊33還用于將所述目的端口號發(fā)送給所述Docker容器。
所述訪問請求還包括所述客戶端的地址。
接收模塊31還用于接收所述Docker容器發(fā)送的響應(yīng)信息,所述響應(yīng)信息以所述客戶端的地址為目的地址,以所述目的端口號為源端口號。
本發(fā)明實施例提供的容器訪問的控制裝置可以具體用于執(zhí)行上述圖1所提供的方法實施例,具體功能此處不再贅述。
本發(fā)明實施例通過Docker容器將其回復(fù)客戶端的響應(yīng)信息中的源IP地址設(shè)置為中繼器的IP地址、源端口號設(shè)置為中繼器分配給Docker容器的請求端口,并根據(jù)客戶端的IP地址將響應(yīng)信息直接發(fā)送給客戶端,不需中繼器向客戶端轉(zhuǎn)發(fā)響應(yīng)信息,提高了響應(yīng)信息的發(fā)送效率。
綜上所述,本發(fā)明實施例客戶端通過中繼器向Docker容器發(fā)送訪問請求,中繼器將該訪問請求發(fā)送給Docker容器,即使Docker容器從源服務(wù)器遷移到的其他服務(wù)器,客戶端均可以將發(fā)送給Docker容器的訪問請求先發(fā)送給中繼器,由中繼器向Docker容器轉(zhuǎn)發(fā)該訪問請求,保證了客戶端訪問Docker容器的可靠性;通過Docker容器將其回復(fù)客戶端的響應(yīng)信息中的源IP地址設(shè)置為中繼器的IP地址、源端口號設(shè)置為中繼器分配給Docker容器的請求端口,并根據(jù)客戶端的IP地址將響應(yīng)信息直接發(fā)送給客戶端,不需中繼器向客戶端轉(zhuǎn)發(fā)響應(yīng)信息,提高了響應(yīng)信息的發(fā)送效率。
在本發(fā)明所提供的幾個實施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory,ROM)、隨機存取存儲器(Random Access Memory,RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
本領(lǐng)域技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。