作者:张华 发表于:2015-06-27版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99)libvirt是支持设置密码来保护vnc session的,但下面的代码显示nova不支持,if ((CONF.vnc_enabled and virt_type not in ('lxc', 'uml'))):graphics = vconfig.LibvirtConfigGuestGraphics()graphics.type = "vnc"graphics.keymap = CONF.vnc_keymapgraphics.listen = CONF.vncserver_listenguest.add_device(graphics)add_video_driver = True添加代码蛮简单,提交了代码还得backport,算了太麻烦了,这也不是一个bug,算是一个feature enhancemment, 还是优先级workaround吧。通过在计算节点加iptables规则block所以对计算节点进行vnc请求的流量,但放开novnc过来的访问流量。iptables -A INPUT -p tcp ! -s 10.5.0.67 --sport 6080 -m multiport --dports 5900:5999 -j DROP其中10.5.0.67是nova-novacproxy节点的IP,6080是novnc的端口,步骤如下:1, 控制节点需要安装nova-consoleauth novnc python-novnc nova-novncproxy四个组件:sudo apt-get install nova-consoleauth novnc python-novnc nova-novncproxysudo service nova-consoleauth restartsudo service nova-novncproxy restartsudo service libvirt-bin restart2, 计算节点不需要安装特别的包3, 控制节点与计算节点的配置如下:vnc_enabled = Truenovnc_enabled = Truevncserver_proxyclient_address=10.5.0.68vncserver_listen=0.0.0.0novncproxy_base_url=http://10.5.0.67:6080/vnc_auto.html如果事先有一个虚机,也不想重启什么服务的话,就直接通过sudo virsh edit 命令来配置/var/lib/nova/instances/e80ccba6-f67b-4ad0-9562-fe34a0aa70a6/libvirt.xml: 4, 验证vnc是否配置成功,由于做实验的两个节点位于国外的内网的又一层内网之中,所以我的物理机通过vpn连接到10.230.64.153这一层内网之后,再使用下列命令继续为里层内网10.5.0.0/24设置vpn隧道。 sshuttle -D -r ubuntu@10.230.64.153 10.5.0.0/24 然后在物理机上通过ssh -X && vncviewer 10.5.0.68:0应该可以访问。(注意:因为10.230.64.153上没有GUI界面,需先通过ssh -X来利用本地物理机上的GUI环境) 或者通过horzion来访问,http://10.5.0.69/horizon admin/openstack5, 获取novnc的访问链接, nova get-vnc-console i1 novnc6, 设置iptables之后,应该看到无法再通过vnc来访问了,但可以通过horizon来访问。OK,目的达到。Reference:1, https://review.openstack.org/gitweb?p=openstack%2Fnova.git;a=commitdiff;h=974d9cc788c584076ef952fa3cc5a53a5e5717d52, https://bugs.launchpad.net/nova/+bug/14502943, https://blueprints.launchpad.net/nova/+spec/vnc-default-password