中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。
分类: 云计算
2015-09-21 14:03:22
怎样监控novnc的操作是目前我作的一个课题。
OpenNebula 的控制面板 Sunstone 对 OpenNebula
私有云的管理员来说很方便实用,不用敲命令,但是对云计算、虚拟机不熟悉的用户来说有点复杂。所以,我们打算开发一个内部使用的 OpenNebula
控制面板,并和我们的其他内部服务集成起来。从不同 VPS 服务商那里用过 VPS 的用户都知道 VPS
控制面板的几个基本功能,创建、删除、重装、控制台访问。其中控制台访问功能的实现就是我们今天要讨论的主题。
我们知道不管是
下载 noVNC 代码后然后运行 noVNC/utils/websockify.py,把本机 VNC
服务(localhost)的端口(5900)和 noVNC 的代理端口(8000)连接起来,这样通过 noVNC/vnc.html 访问
8000 端口就自动转换到 5900 端口上(事实上 vnc.html 你可以放在任何机器上用浏览器直接打开用):
流程大概是这样:
vnc.html -> 192.168.2.20:8000 -> websockify.py -> localhost:5900
当然代理和 VNC 服务可以不在同一机器上,比如代理在 192.168.2.20, VNC 服务在 192.168.2.21:
流程大概是这样:
vnc.html -> 192.168.2.20:8000 -> websockify.py -> 192.168.2.21:5900
理解了上面的过程,应该有想法如何集成 noVNC 到自己的程序了,很简单,先用 websockify 架一个代理,然后用 vnc.html
访问这个代理,vnc.html 和 vnc_auto.html 可以当作我们的范例程序参考。集成 noVNC 到自己的程序也没啥难度,按照
修改 noVNC/vnc_auto.html 文件的 host, port, path 部分,注意 path 是带 token 的,token 的参数要和上面的那串奇怪的代码一致:
我们编程时只要改变上面的 token 参数就可以切换连接到不同的虚拟机 VNC,这样编程就方便多了。这个是我们利用 vnc_auto.html 修改过后的 VNC 连接界面(为了配合博客美观,截图有意缩小了):
基本
$ git clone https://github.com/kanaka/noVNC $ cd utils
$ ./websockify.py 8000 localhost:5900 WARNING: no 'numpy' module, HyBi protocol is slower or disabled WebSocket server settings: - Listen on :8000 - Flash security policy server - No SSL/TLS support (no cert file) - proxying from :8000 to localhost:5900
$ ./websockify.py 8000 192.168.2.21:5900
# ps aux | grep websockify oneadmin 13661 0.0 0.2 197576 8388 ? S Jul04 0:07 python /usr/share/one/websockify/websocketproxy.py --target-config=/var/lib/one/sunstone_vnc_tokens 29876 # cat /var/lib/one/sunstone_vnc_tokens/one-96 cirjhccnthfinxpdlig: cloud32:5900
... host = "192.168.2.20"; port = "29876"; ... path = "websockify/?token=cirjhccnthfinxpdlig"; ...