nova分析—— nova-novncproxy
原文:http://www.tuicool.com/articles/7fqMN3Z
推薦:http://cwtea.blog.51cto.com/4500217/1348218/
http://www.iyunv.com/thread-42667-1-1.html
nova提供了novncproxy代理支援使用者通過vnc來通路虛拟機,使用者可以通過websocket、java用戶端或者spicehtml5來通路。通過websket通路虛拟機的功能已經內建到horizon中,而通過java用戶端則需要先安裝相應的軟體。為了友善使用者通路虛拟機,nova通過有一個proxy來實作,proxy通常同nova-api一起部署。
vnc通路的實作方法如下,首先是啟動一個虛拟機時啟用vnc,這可以通過給kvm加上vnc參數即可。這樣,kvm就會啟動一個vncserver監聽虛拟機。通過websocket來通路虛拟時,其步驟如下:
1. 通過nova-api擷取通路url,url的格式是: http://ip:port/?token=xxx ,該位址實際上就是vnc proxy的位址。
2. 浏覽器連接配接到vnc proxy
3. vnc proxy連接配接到nova-consoleauth來驗證token,并将token映射到虛拟機所在的主控端的ip位址和某個端口,該端口就是虛拟機啟動時所監聽的端口。
4. vnc proxy與虛拟機所在的主控端的vncserver建立連接配接,并開始代理,直到浏覽器session結束。
在nova.conf中,計算節點可以指定vncserver的監聽位址及vnc proxy應該通過那個位址連接配接到vncserver,該選項就是vncserver_proxyclient_address。vnc proxy充當了公網和計算節點之間的橋梁,此外還需要對vnc協定進行封裝。
vnc proxy配置方法
通常情況下,為了提供完整的vnc功能,需要部署三個服務:
- nova-consoleauth: 提供token驗證,維護token與ip位址、端口号的映射。
- nova-novncproxy: 支援基于浏覽器的vnc 用戶端,通常與nova-api部署在一起。
- nova-xvpvncproxy: 支援基于java的vnc用戶端,,通常與nova-api部署在一起。
此外還需要對計算節點進行設當的配置。具體如下:
- vnc_enabled=True 啟用虛拟機的vnc功能。
- vncserver_listen=0.0.0.0 預設是127.0.0.1,即隻可以從本機進行通路,通常情況下是配置為管理網的IP位址。設定為0.0.0.0主要是考慮到動态遷移時,目的主控端沒有相應的IP位址,動态遷移會失敗。
- vncserver_proxyclient_address 該位址指明vnc proxy應該通過那個IP位址來連接配接vncserver,通常是管理網IP位址。
- novncproxy_base_url=http://$SERVICE_HOST:6080/vnc_auto.html 指定浏覽器client應該連接配接的位址。$SERVICE_HOST通常是一個公網IP位址。
- xvpvncproxy_base_url=http://$SERVICE_HOST:6081/console 指定java client應該連接配接的位址。$SERVICE_HOST通常是一個公網IP位址。
vnc proxy的配置則相對簡單,隻需要設定其監聽的主機和端口即可。具體如下:
- novncproxy_host=$SERVICE_HOST 通常為一個公網IP。
- novncproxy_host=6080
- xvpvncproxy_host=$SERVICE_HOST 通常為一個公網IP。
- xvpvncproxy_port=6081