nova vnc proxy基本原理


先上圖

nova vnc proxy

VNC Proxy的功能:

  • 將公網(public network)和私網(private network)隔離
  • VNC client運行在公網上,VNCServer運行在私網上,VNC Proxy作為中間的橋梁將二者連接起來
  • VNC Proxy通過token對VNC Client進行驗證
  • VNC Proxy不僅僅使得私網的訪問更加安全,而且將具體的VNC Server的實現分離,可以支持不同Hypervisor的VNC Server但不影響用戶體驗

VNC Proxy的部署

  • 在Controller節點上部署nova-consoleauth 進程,用於Token驗證
  • 在Controller節點上部署nova-novncproxy 服務,用戶的VNC Client會直接連接這個服務
  • Controller節點一般有兩張網卡,連接到兩個網絡,一張用於外部訪問,我們稱為public network,或者API network,這張網卡的IP地址是外網IP,如圖中172.24.1.1,另外一張網卡用於openstack各個模塊之間的通信,稱為management network,一般是內網IP,如圖中10.10.10.2
  • 在Compute節點上部署nova-compute,在nova.conf文件中有下面的配置
    • vnc_enabled=True
    • vncserver_listen=0.0.0.0 //VNC Server的監聽地址
    • vncserver_proxyclient_address=10.10.10.2 //nova vnc proxy是通過內網IP來訪問vnc server的,所以nova-compute會告知vnc proxy用這個IP來連接我。
    • novncproxy_base_url=http://172.24.1.1:6080/vnc_auto.html //這個url是返回給客戶的url,因而里面的IP是外網IP

 

VNC Proxy的運行過程:

  1. 一個用戶試圖從瀏覽器里面打開連接到虛擬機的VNC Client
  2. 瀏覽器向nova-api發送請求,要求返回訪問vnc的url
  3. nova-api調用nova-compute的get vnc console方法,要求返回連接VNC的信息
  4. nova-compute調用libvirt的get vnc console函數
  5. libvirt會通過解析虛擬機運行的/etc/libvirt/qemu/instance-0000000c.xml文件來獲得VNC Server的信息
  6. libvirt將host, port等信息以json格式返回給nova-compute
  7. nova-compute會隨機生成一個UUID作為Token
  8. nova-compute將libvirt返回的信息以及配置文件中的信息綜合成connect_info返回給nova-api
  9. nova-api會調用nova-consoleauth的authorize_console函數
  10. nova-consoleauth會將instance –> token, token –> connect_info的信息cache起來
  11. nova-api將connect_info中的access url信息返回給瀏覽器:http://172.24.1.1:6080/vnc_auto.html?token=7efaee3f-eada-4731-a87c-e173cbd25e98&title=helloworld%289169fdb2-5b74-46b1-9803-60d2926bd97c%29
  12. 瀏覽器會試圖打開這個鏈接
  13. 這個鏈接會將請求發送給nova-novncproxy
  14. nova-novncproxy調用nova-consoleauth的check_token函數
  15. nova-consoleauth驗證了這個token,將這個instance對應的connect_info返回給nova-novncproxy
  16. nova-novncproxy通過connect_info中的host, port等信息,連接compute節點上的VNC Server,從而開始了proxy的工作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM