对openstack的vnc配置一直比较模糊,所以决定下决心研究一番。
上图为官方文档中多节点,多网卡网络配置图。我的理解:99.99.99.0为公网地址,192.168.0.0为管理地址,10.0.0.0为虚拟机地址。假设上图nova-network服务运行于控制节点上。
上图为官方文档中vnc请求流程。我的理解:
1. nova get-vnc-console WindowsXP-Sun novnc
2. Nova-api接受请求,然后将get_vnc_console消息发送到WindowsXP_Sun虚拟机所在的计算节点。
3. 计算节点接受get_vnc_console消息,产生token;然后调用libvirt driver的get_vnc_console方法,libvirt driver向libvirt server发出请求,
得到虚拟机监听的vnc端口; libvirt driver检索nova.conf,找到vncserver_proxyclient_address标签,得到vnc host的ip地址。
4. Nova-api 发送authorize_console消息给Nova-consoleauth,同时记录计算节点返回的信息(token, vnc host ip, vnc port),以token作为索引。
5. 返回URL(计算节点novnc_proxy_base_url标签加上token参数)
6. 浏览器访问URL
7. noVNC监听6080 HTTP 端口,接受此URL请求,然后向Nova-consoleauth发送check_token消息。
8. nova-consoleauth检查token,找到之前缓存的连接信息。vnc 代理将请求传送到相应的节点。
9. 在浏览器中出现虚拟机桌面。
所以配置应该为:
#nova-compute使用,此地址加上“?token”返回给用户,需为控制节点ip(控制节点与计算节点,此标签参数相同,都为控制节点IP)
novnc_proxy_base_url = http://controlNodeIP:6080/vnc_auto.html
#libvirt driver 取得此地址。vnc proxy使用此地址,转向具体的compute node
vncserver_proxyclient_addresss= ComputeNodeManageIP
#nova-compute使用,多网卡,具体监听在哪个接口上。使用内部地址安全。如果使用迁移,此地址配置成0.0.0.0,因为迁到别的节点上,
ComputeNodeManageIP地址发生变化,0.0.0.0监听所以接口。
vncserver_listen= ComputeNodeManageIP
根据上图网络,相应配置内容为。
vnc_enable = true
novnc_enable = true
novnc_proxy_base_url = http://99.99.99.1:6080/vnc_auto.html
vncserver_proxyclient_addresss= 192.168.0.3
vncserver_listen= 192.168.0.3
组件安装:
控制节点:nova-api, nova-consoleauth,noVNC(VNC proxy for browser)
计算节点:nova-compute,libvirt driver
存疑:
按常理,计算节点上应该有vncserver,可是经验证没有安装vncserver。存疑?
同样,单网卡情况也适用。