先上图

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的工作

nova vnc proxy基本原理的更多相关文章

  1. websocket nova vnc proxy

    1. vnc proxy的实现原理 vnc 是nova提供的用来访问虚拟机的一项重要功能,用户可以通过websocket来访问,也可以通过java客户端来访问.通过websket访问虚拟机 的功能已经 ...

  2. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)

    八.KVM 这一步,像virsh start命令一样,将虚拟机启动起来了.虚拟机启动之后,还有很多的步骤需要完成. 步骤38:从DHCP Server获取IP 有时候往往数据库里面,VM已经有了IP, ...

  3. Linux(CentOS、Ububtu)一键安装Openstack及其它参考文档汇总

    原文链接  http://www.aboutyun.com/thread-10920-1-1.html openstack相关资料 CentOS下一键安装Openstack  http://blog. ...

  4. CentOS下一键安装Openstack

    CentOS下一键安装Openstack 系统环境:Oracle VirtualBox 4.38CentOS-6.5-x86_64-bin-DVD1.iso 安装前需要修改 /etc/hosts文件, ...

  5. 当发现你的OpenStack虚拟机网络有问题,不妨先试一下这16个步骤

    1. Security Group全部打开,这是最基本的,但是很多人容易忘记 其实遇到过无数这种场景了,Debug了半天网络问题,各种手段都用上了,最后发现安全组竟然没有打开. 2. 通过界面查看虚拟 ...

  6. RDO快速部署OpenStack

    RDO快速部署OpenStack 1.RDO是什么 RDO是红帽Red Hat Enterprise Linux OpenStack Platform的社区版,类似RHEL和Fedora,RHEV和o ...

  7. Openstack CentOS6.5 ALL IN ONE 安装

    本文档以RDO的方式安装单节点.单网卡的Openstack. RDO是可在Red Hat Enterprise Linux.Fedora及其变体上运行的社区支持OpenStack版本.部署简单方便,R ...

  8. packstack安装ironic

    KVM Centos7.3虚机 安装openstack Pike版本, 其它版本安装方法类似. packstack目前对NetworkManager 还不支持,我们修改下配置: systemctl d ...

  9. Centos7 install Openstack Juno (RDO) (转载)

    原文地址:http://www.hdume.com/centos-7-0%E5%AE%89%E8%A3%85openstack/ 1.安装系统,Centos7镜像采用CentOS-7.0-1406-x ...

随机推荐

  1. eclipse导入maven时,pom文件的project一直报错(Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.)

    这里有两种解决办法. 一:右键项目->maven->update project勾选上Force Update of Snapshots/Releases然后ok就可以了. 二:如果第一种 ...

  2. webstorm 2019.1 注册教程

    注册教程:https://blog.csdn.net/hdp134793/article/details/81530472 IntelliJ IDEA 注册码获取网站

  3. python实现JWT

    python实现JWT 一.常见的几种实现认证的方法 1.1basic auth 1.2cookie 1.3token json web token--一种基于token的json格式web认证方法. ...

  4. Python3学习笔记十八

    1.    MTV M:   model     与数据库相关 T:   Template    与html相关 V:   views      与逻辑相关 一.    URL配置 启动:python ...

  5. MIUI11系统怎么样启用root权限的教程

    MIUI11系统如何启用了ROOT超级权限?做开发的人都知道,安卓机器有ROOT超级权限,一旦手机启用了root相关权限,可以实现更多的功能,举个例子做开发的人公司的营销部门的妹纸,使用较多营销工具都 ...

  6. Oracle数据库体系结构之进程结构(4)

    Oracle进程结构包括用户进程,服务进程,后台进程. 1. 用户进程 用户进程在数据库用户要求连接到Oracle服务器时开始启动. 用户进程是要求Oracle服务器交互的一种进程 它必须首先建立一个 ...

  7. Java - 数组排序 -- 浅析稳定性与复杂度

    上次我们了解了对数组的基本操作,那么谈到数组,我们就不得不谈谈数组的排序 什么是排序 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列 -- 百度百科 排序是 ...

  8. pycharm 记录

    一.pycharm字体放大.缩小的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双 ...

  9. 解决win10 报错 git pull error: cannot open .git/FETCH_HEAD: Permission denied

    sh配置git 用户解决了 git config --list //查看当前的config配置 git config --global user.name "youruser" / ...

  10. apache设置跨域请求

    <VirtualHost *:8888> DocumentRoot D:/xampp/htdocs/bss/ ServerName ims.drcloud.cn ErrorLog &quo ...