在各種云計(jì)算平臺(tái)中,都會(huì)提供一個(gè)連接虛擬機(jī)控制臺(tái)的URL地址,有些遠(yuǎn)程控制臺(tái)地址是以noVNC來(lái)提供訪問(wèn)的。noVNC可以讓用戶直接使用瀏覽器很方便地操作虛機(jī),無(wú)需再安裝另外的程序。但有的URL地址直接就暴露了虛機(jī)所在的節(jié)點(diǎn)IP,這樣就可能直接影響云平臺(tái)的安全性。
為了不直接暴露虛機(jī)節(jié)點(diǎn)信息,就需要我們對(duì)URL地址、noVNC返回的頁(yè)面信息進(jìn)行攔截轉(zhuǎn)換。
獲取noVNC地址
1.首先客戶端通過(guò)請(qǐng)求API的方式獲取noVNC可訪問(wèn)的URL。
2.中間服務(wù)從noVNC服務(wù)器列表中獲取對(duì)應(yīng)的noVNC地址。
3.中間服務(wù)將獲取到noVNC地址進(jìn)行截取改造,保證新的URL里沒(méi)有noVNC服務(wù)器的IP和端口號(hào)。
4.根據(jù)本次請(qǐng)求生成一個(gè)新的Token,并將生成的Token集成到新的URL中。
5.將Token和原來(lái)URL對(duì)應(yīng)關(guān)系保存在中間層服務(wù)的轉(zhuǎn)發(fā)路由信息中,包括HTML的URL和WebSockets的URL對(duì)應(yīng)關(guān)系,并返回新生成的URL。
6.客戶獲取到了新URL,這個(gè)新的URL是經(jīng)過(guò)基于中間層微服務(wù)進(jìn)行過(guò)轉(zhuǎn)義過(guò)的URL。
轉(zhuǎn)發(fā)noVNC地址
1.客戶端根據(jù)新的URL,在瀏覽器中輸入新的URL地址。
2.瀏覽器會(huì)根據(jù)新URL請(qǐng)求中間服務(wù),中間服務(wù)修改URL請(qǐng)求的HTTP中header參數(shù)為Host和Origin信息。
3.修改Header信息之后,根據(jù)路由中的信息轉(zhuǎn)發(fā)HTTPS或者WebSocket請(qǐng)求到noVNC服務(wù)器上。
4.中間層微服務(wù)接受到noVNC服務(wù)器返回HTML信息之后,替換掉HTML里包含服務(wù)器節(jié)點(diǎn)地址和端口號(hào)。
5.中間層微服務(wù)處理好信息之后,把信息返回給客戶端瀏覽器。
效果
轉(zhuǎn)發(fā)前noVNC地址:
轉(zhuǎn)發(fā)后noVNC地址: