Part of blueprint convert-consoles-to-objects Change-Id: I9bfa89d2d8fe2b5803b4e1478377e13dc3231b1c
		
			
				
	
	
		
			517 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			517 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
===============================
 | 
						|
Configure remote console access
 | 
						|
===============================
 | 
						|
 | 
						|
To provide a remote console or remote desktop access to guest virtual machines,
 | 
						|
use VNC, SPICE HTML5 or Serial through either the OpenStack dashboard or the
 | 
						|
command line. Best practice is to select only one of them to run.
 | 
						|
 | 
						|
.. _about-nova-consoleauth:
 | 
						|
 | 
						|
About nova-consoleauth
 | 
						|
----------------------
 | 
						|
 | 
						|
The client proxies leverage a shared service to manage token authentication
 | 
						|
called ``nova-consoleauth``. This service must be running for either proxy to
 | 
						|
work. Many proxies of either type can be run against a single
 | 
						|
``nova-consoleauth`` service in a cluster configuration.
 | 
						|
 | 
						|
Do not confuse the ``nova-consoleauth`` shared service with ``nova-console``,
 | 
						|
which is a XenAPI-specific service that most recent VNC proxy architectures do
 | 
						|
not use.
 | 
						|
 | 
						|
.. deprecated:: 18.0.0
 | 
						|
 | 
						|
   ``nova-consoleauth`` is deprecated since 18.0.0 (Rocky) and will be removed
 | 
						|
   in an upcoming release.
 | 
						|
 | 
						|
SPICE console
 | 
						|
-------------
 | 
						|
 | 
						|
OpenStack Compute supports VNC consoles to guests. The VNC protocol is fairly
 | 
						|
limited, lacking support for multiple monitors, bi-directional audio, reliable
 | 
						|
cut-and-paste, video streaming and more. SPICE is a new protocol that aims to
 | 
						|
address the limitations in VNC and provide good remote desktop support.
 | 
						|
 | 
						|
SPICE support in OpenStack Compute shares a similar architecture to the VNC
 | 
						|
implementation. The OpenStack dashboard uses a SPICE-HTML5 widget in its
 | 
						|
console tab that communicates to the ``nova-spicehtml5proxy`` service by using
 | 
						|
SPICE-over-websockets. The ``nova-spicehtml5proxy`` service communicates
 | 
						|
directly with the hypervisor process by using SPICE.
 | 
						|
 | 
						|
VNC must be explicitly disabled to get access to the SPICE console. Set the
 | 
						|
``vnc_enabled`` option to ``False`` in the ``[DEFAULT]`` section to disable the
 | 
						|
VNC console.
 | 
						|
 | 
						|
Use the following options to configure SPICE as the console for OpenStack
 | 
						|
Compute:
 | 
						|
 | 
						|
.. code-block:: console
 | 
						|
 | 
						|
   [spice]
 | 
						|
   agent_enabled = False
 | 
						|
   enabled = True
 | 
						|
   html5proxy_base_url = http://IP_ADDRESS:6082/spice_auto.html
 | 
						|
   html5proxy_host = 0.0.0.0
 | 
						|
   html5proxy_port = 6082
 | 
						|
   keymap = en-us
 | 
						|
   server_listen = 127.0.0.1
 | 
						|
   server_proxyclient_address = 127.0.0.1
 | 
						|
 | 
						|
Replace ``IP_ADDRESS`` with the management interface IP address of the
 | 
						|
controller or the VIP.
 | 
						|
 | 
						|
VNC console proxy
 | 
						|
-----------------
 | 
						|
 | 
						|
The VNC proxy is an OpenStack component that enables compute service users to
 | 
						|
access their instances through VNC clients.
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   The web proxy console URLs do not support the websocket protocol scheme
 | 
						|
   (ws://) on python versions less than 2.7.4.
 | 
						|
 | 
						|
The VNC console connection works as follows:
 | 
						|
 | 
						|
#. A user connects to the API and gets an ``access_url`` such as,
 | 
						|
   ``http://ip:port/?token=xyz``.
 | 
						|
 | 
						|
#. The user pastes the URL in a browser or uses it as a client parameter.
 | 
						|
 | 
						|
#. The browser or client connects to the proxy.
 | 
						|
 | 
						|
#. The proxy talks to ``nova-consoleauth`` to authorize the token for the user,
 | 
						|
   and maps the token to the *private* host and port of the VNC server for an
 | 
						|
   instance.
 | 
						|
 | 
						|
   The compute host specifies the address that the proxy should use to connect
 | 
						|
   through the ``nova.conf`` file option, ``server_proxyclient_address``. In
 | 
						|
   this way, the VNC proxy works as a bridge between the public network and
 | 
						|
   private host network.
 | 
						|
 | 
						|
#. The proxy initiates the connection to VNC server and continues to proxy
 | 
						|
   until the session ends.
 | 
						|
 | 
						|
The proxy also tunnels the VNC protocol over WebSockets so that the ``noVNC``
 | 
						|
client can talk to VNC servers. In general, the VNC proxy:
 | 
						|
 | 
						|
- Bridges between the public network where the clients live and the private
 | 
						|
  network where VNC servers live.
 | 
						|
 | 
						|
- Mediates token authentication.
 | 
						|
 | 
						|
- Transparently deals with hypervisor-specific connection details to provide a
 | 
						|
  uniform client experience.
 | 
						|
 | 
						|
.. figure:: figures/SCH_5009_V00_NUAC-VNC_OpenStack.png
 | 
						|
   :alt: noVNC process
 | 
						|
   :width: 95%
 | 
						|
 | 
						|
VNC proxy security
 | 
						|
~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
Deploy the public-facing interface of the VNC proxy with HTTPS to prevent
 | 
						|
attacks from malicious parties on the network between the tenant user and proxy
 | 
						|
server. When using HTTPS, the TLS encryption only applies to data between the
 | 
						|
tenant user and proxy server. The data between the proxy server and Compute
 | 
						|
node instance will still be unencrypted. To provide protection for the latter,
 | 
						|
it is necessary to enable the VeNCrypt authentication scheme for VNC in both
 | 
						|
the Compute nodes and noVNC proxy server hosts.
 | 
						|
 | 
						|
QEMU/KVM Compute node configuration
 | 
						|
+++++++++++++++++++++++++++++++++++
 | 
						|
 | 
						|
Ensure each Compute node running QEMU/KVM with libvirt has a set of
 | 
						|
certificates issued to it. The following is a list of the required
 | 
						|
certificates:
 | 
						|
 | 
						|
- :file:`/etc/pki/libvirt-vnc/server-cert.pem`
 | 
						|
 | 
						|
  An x509 certificate to be presented **by the VNC server**. The ``CommonName``
 | 
						|
  should match the **primary hostname of the compute node**. Use of
 | 
						|
  ``subjectAltName`` is also permitted if there is a need to use multiple
 | 
						|
  hostnames or IP addresses to access the same Compute node.
 | 
						|
 | 
						|
- :file:`/etc/pki/libvirt-vnc/server-key.pem`
 | 
						|
 | 
						|
  The private key used to generate the ``server-cert.pem`` file.
 | 
						|
 | 
						|
- :file:`/etc/pki/libvirt-vnc/ca-cert.pem`
 | 
						|
 | 
						|
  The authority certificate used to sign ``server-cert.pem`` and sign the VNC
 | 
						|
  proxy server certificates.
 | 
						|
 | 
						|
The certificates must have v3 basic constraints [3]_ present to indicate the
 | 
						|
permitted key use and purpose data.
 | 
						|
 | 
						|
We recommend using a dedicated certificate authority solely for the VNC
 | 
						|
service. This authority may be a child of the master certificate authority used
 | 
						|
for the OpenStack deployment. This is because libvirt does not currently have
 | 
						|
a mechanism to restrict what certificates can be presented by the proxy server.
 | 
						|
 | 
						|
For further details on certificate creation, consult the QEMU manual page
 | 
						|
documentation on VNC server certificate setup [2]_.
 | 
						|
 | 
						|
Configure libvirt to enable the VeNCrypt authentication scheme for the VNC
 | 
						|
server. In :file:`/etc/libvirt/qemu.conf`, uncomment the following settings:
 | 
						|
 | 
						|
- ``vnc_tls=1``
 | 
						|
 | 
						|
  This instructs libvirt to enable the VeNCrypt authentication scheme when
 | 
						|
  launching QEMU, passing it the certificates shown above.
 | 
						|
 | 
						|
- ``vnc_tls_x509_verify=1``
 | 
						|
 | 
						|
  This instructs QEMU to require that all VNC clients present a valid x509
 | 
						|
  certificate. Assuming a dedicated certificate authority is used for the VNC
 | 
						|
  service, this ensures that only approved VNC proxy servers can connect to the
 | 
						|
  Compute nodes.
 | 
						|
 | 
						|
After editing :file:`qemu.conf`, the ``libvirtd`` service must be restarted:
 | 
						|
 | 
						|
.. code:: shell
 | 
						|
 | 
						|
  $ systemctl restart libvirtd.service
 | 
						|
 | 
						|
Changes will not apply to any existing running guests on the Compute node, so
 | 
						|
this configuration should be done before launching any instances.
 | 
						|
 | 
						|
noVNC proxy server configuration
 | 
						|
++++++++++++++++++++++++++++++++
 | 
						|
 | 
						|
The noVNC proxy server initially only supports the ``none`` authentication
 | 
						|
scheme, which does no checking. Therefore, it is necessary to enable the
 | 
						|
``vencrypt`` authentication scheme by editing the :file:`nova.conf` file to
 | 
						|
set.
 | 
						|
 | 
						|
.. code::
 | 
						|
 | 
						|
  [vnc]
 | 
						|
  auth_schemes=vencrypt,none
 | 
						|
 | 
						|
The :oslo.config:option:`vnc.auth_schemes` values should be listed in order
 | 
						|
of preference. If enabling VeNCrypt on an existing deployment which already has
 | 
						|
instances running, the noVNC proxy server must initially be allowed to use
 | 
						|
``vencrypt`` and ``none``. Once it is confirmed that all Compute nodes have
 | 
						|
VeNCrypt enabled for VNC, it is possible to remove the ``none`` option from the
 | 
						|
list of the :oslo.config:option:`vnc.auth_schemes` values.
 | 
						|
 | 
						|
At that point, the noVNC proxy will refuse to connect to any Compute node that
 | 
						|
does not offer VeNCrypt.
 | 
						|
 | 
						|
As well as enabling the authentication scheme, it is necessary to provide
 | 
						|
certificates to the noVNC proxy.
 | 
						|
 | 
						|
- :file:`/etc/pki/nova-novncproxy/client-cert.pem`
 | 
						|
 | 
						|
  An x509 certificate to be presented **to the VNC server**. While libvirt/QEMU
 | 
						|
  will not currently do any validation of the ``CommonName`` field, future
 | 
						|
  versions will allow for setting up access controls based on the
 | 
						|
  ``CommonName``. The ``CommonName`` field should match the **primary hostname
 | 
						|
  of the controller node**. If using a HA deployment, the ``Organization``
 | 
						|
  field can also be configured to a value that is common across all console
 | 
						|
  proxy instances in the deployment. This avoids the need to modify each
 | 
						|
  compute node's whitelist every time a console proxy instance is added or
 | 
						|
  removed.
 | 
						|
 | 
						|
- :file:`/etc/pki/nova-novncproxy/client-key.pem`
 | 
						|
 | 
						|
  The private key used to generate the ``client-cert.pem`` file.
 | 
						|
 | 
						|
- :file:`/etc/pki/nova-novncproxy/ca-cert.pem`
 | 
						|
 | 
						|
  The certificate authority cert used to sign ``client-cert.pem`` and sign the
 | 
						|
  compute node VNC server certificates.
 | 
						|
 | 
						|
The certificates must have v3 basic constraints [3]_ present to indicate the
 | 
						|
permitted key use and purpose data.
 | 
						|
 | 
						|
Once the certificates have been created, the noVNC console proxy service must
 | 
						|
be told where to find them. This requires editing :file:`nova.conf` to set.
 | 
						|
 | 
						|
.. code::
 | 
						|
 | 
						|
  [vnc]
 | 
						|
  vencrypt_client_key=/etc/pki/nova-novncproxy/client-key.pem
 | 
						|
  vencrypt_client_cert=/etc/pki/nova-novncproxy/client-cert.pem
 | 
						|
  vencrypt_ca_certs=/etc/pki/nova-novncproxy/ca-cert.pem
 | 
						|
 | 
						|
VNC configuration options
 | 
						|
~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
To customize the VNC console, use the following configuration options in your
 | 
						|
``nova.conf`` file:
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   To support :ref:`live migration <section_configuring-compute-migrations>`,
 | 
						|
   you cannot specify a specific IP address for ``server_listen``, because
 | 
						|
   that IP address does not exist on the destination host.
 | 
						|
 | 
						|
.. list-table:: **Description of VNC configuration options**
 | 
						|
   :header-rows: 1
 | 
						|
   :widths: 25 25
 | 
						|
 | 
						|
   * - Configuration option = Default value
 | 
						|
     - Description
 | 
						|
   * - **[DEFAULT]**
 | 
						|
     -
 | 
						|
   * - ``daemon = False``
 | 
						|
     - (BoolOpt) Become a daemon (background process)
 | 
						|
   * - ``key = None``
 | 
						|
     - (StrOpt) SSL key file (if separate from cert)
 | 
						|
   * - ``novncproxy_host = 0.0.0.0``
 | 
						|
     - (StrOpt) Host on which to listen for incoming requests
 | 
						|
   * - ``novncproxy_port = 6080``
 | 
						|
     - (IntOpt) Port on which to listen for incoming requests
 | 
						|
   * - ``record = False``
 | 
						|
     - (BoolOpt) Record sessions to FILE.[session_number]
 | 
						|
   * - ``source_is_ipv6 = False``
 | 
						|
     - (BoolOpt) Source is ipv6
 | 
						|
   * - ``ssl_only = False``
 | 
						|
     - (BoolOpt) Disallow non-encrypted connections
 | 
						|
   * - ``web = /usr/share/spice-html5``
 | 
						|
     - (StrOpt) Run webserver on same port. Serve files from DIR.
 | 
						|
   * - **[vmware]**
 | 
						|
     -
 | 
						|
   * - ``vnc_port = 5900``
 | 
						|
     - (IntOpt) VNC starting port
 | 
						|
   * - ``vnc_port_total = 10000``
 | 
						|
     - vnc_port_total = 10000
 | 
						|
   * - **[vnc]**
 | 
						|
     -
 | 
						|
   * - enabled = True
 | 
						|
     - (BoolOpt) Enable VNC related features
 | 
						|
   * - novncproxy_base_url = http://127.0.0.1:6080/vnc_auto.html
 | 
						|
     - (StrOpt) Location of VNC console proxy, in the form
 | 
						|
       "http://127.0.0.1:6080/vnc_auto.html"
 | 
						|
   * - server_listen = 127.0.0.1
 | 
						|
     - (StrOpt) IP address on which instance vncservers should listen
 | 
						|
   * - server_proxyclient_address = 127.0.0.1
 | 
						|
     - (StrOpt) The address to which proxy clients (like nova-xvpvncproxy)
 | 
						|
       should connect
 | 
						|
   * - xvpvncproxy_base_url = http://127.0.0.1:6081/console
 | 
						|
     - (StrOpt) Location of nova xvp VNC console proxy, in the form
 | 
						|
       "http://127.0.0.1:6081/console"
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
   - The ``server_proxyclient_address`` defaults to ``127.0.0.1``, which is
 | 
						|
     the address of the compute host that Compute instructs proxies to use when
 | 
						|
     connecting to instance servers.
 | 
						|
 | 
						|
   - For all-in-one XenServer domU deployments, set this to ``169.254.0.1.``
 | 
						|
 | 
						|
   - For multi-host XenServer domU deployments, set to a ``dom0 management IP``
 | 
						|
     on the same network as the proxies.
 | 
						|
 | 
						|
   - For multi-host libvirt deployments, set to a host management IP on the
 | 
						|
     same network as the proxies.
 | 
						|
 | 
						|
Typical deployment
 | 
						|
~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
A typical deployment has the following components:
 | 
						|
 | 
						|
- A ``nova-consoleauth`` process. Typically runs on the controller host.
 | 
						|
 | 
						|
- One or more ``nova-novncproxy`` services. Supports browser-based noVNC
 | 
						|
  clients. For simple deployments, this service typically runs on the same
 | 
						|
  machine as ``nova-api`` because it operates as a proxy between the public
 | 
						|
  network and the private compute host network.
 | 
						|
 | 
						|
- One or more ``nova-xvpvncproxy`` services. Supports the special Java client
 | 
						|
  discussed here. For simple deployments, this service typically runs on the
 | 
						|
  same machine as ``nova-api`` because it acts as a proxy between the public
 | 
						|
  network and the private compute host network.
 | 
						|
 | 
						|
- One or more compute hosts. These compute hosts must have correctly configured
 | 
						|
  options, as follows.
 | 
						|
 | 
						|
nova-novncproxy (noVNC)
 | 
						|
~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
You must install the noVNC package, which contains the ``nova-novncproxy``
 | 
						|
service. As root, run the following command:
 | 
						|
 | 
						|
.. code-block:: console
 | 
						|
 | 
						|
   # apt-get install nova-novncproxy
 | 
						|
 | 
						|
.. note::
 | 
						|
 | 
						|
  It has `been reported`_ that versions of noVNC older than 0.6 do not work
 | 
						|
  with the ``nova-novncproxy`` service.
 | 
						|
 | 
						|
  If using non-US key mappings, then you need at least noVNC 1.0.0 for `a fix
 | 
						|
  <https://github.com/novnc/noVNC/commit/99feba6ba8fee5b3a2b2dc99dc25e9179c560d31>`_.
 | 
						|
 | 
						|
.. _been reported: https://bugs.launchpad.net/nova/+bug/1752896
 | 
						|
 | 
						|
The service starts automatically on installation.
 | 
						|
 | 
						|
To restart the service, run:
 | 
						|
 | 
						|
.. code-block:: console
 | 
						|
 | 
						|
   # service nova-novncproxy restart
 | 
						|
 | 
						|
The configuration option parameter should point to your ``nova.conf`` file,
 | 
						|
which includes the message queue server address and credentials.
 | 
						|
 | 
						|
By default, ``nova-novncproxy`` binds on ``0.0.0.0:6080``.
 | 
						|
 | 
						|
To connect the service to your Compute deployment, add the following
 | 
						|
configuration options to your ``nova.conf`` file:
 | 
						|
 | 
						|
- ``server_listen=0.0.0.0``
 | 
						|
 | 
						|
  Specifies the address on which the VNC service should bind. Make sure it is
 | 
						|
  assigned one of the compute node interfaces. This address is the one used by
 | 
						|
  your domain file.
 | 
						|
 | 
						|
  .. code-block:: console
 | 
						|
 | 
						|
     <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/>
 | 
						|
 | 
						|
  .. note::
 | 
						|
 | 
						|
     To use live migration, use the 0.0.0.0 address.
 | 
						|
 | 
						|
- ``server_proxyclient_address=127.0.0.1``
 | 
						|
 | 
						|
  The address of the compute host that Compute instructs proxies to use when
 | 
						|
  connecting to instance ``vncservers``.
 | 
						|
 | 
						|
Frequently asked questions about VNC access to virtual machines
 | 
						|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
						|
 | 
						|
- **Q: What is the difference between ``nova-xvpvncproxy`` and
 | 
						|
  ``nova-novncproxy``?**
 | 
						|
 | 
						|
  A: ``nova-xvpvncproxy``, which ships with OpenStack Compute, is a proxy that
 | 
						|
  supports a simple Java client. nova-novncproxy uses noVNC to provide VNC
 | 
						|
  support through a web browser.
 | 
						|
 | 
						|
- **Q: I want VNC support in the OpenStack dashboard. What services do I
 | 
						|
  need?**
 | 
						|
 | 
						|
  A: You need ``nova-novncproxy``, ``nova-consoleauth``, and correctly
 | 
						|
  configured compute hosts.
 | 
						|
 | 
						|
- **Q: When I use ``nova get-vnc-console`` or click on the VNC tab of the
 | 
						|
  OpenStack dashboard, it hangs. Why?**
 | 
						|
 | 
						|
  A: Make sure you are running ``nova-consoleauth`` (in addition to
 | 
						|
  ``nova-novncproxy``). The proxies rely on ``nova-consoleauth`` to validate
 | 
						|
  tokens, and waits for a reply from them until a timeout is reached.
 | 
						|
 | 
						|
- **Q: My VNC proxy worked fine during my all-in-one test, but now it doesn't
 | 
						|
  work on multi host. Why?**
 | 
						|
 | 
						|
  A: The default options work for an all-in-one install, but changes must be
 | 
						|
  made on your compute hosts once you start to build a cluster.  As an example,
 | 
						|
  suppose you have two servers:
 | 
						|
 | 
						|
  .. code-block:: bash
 | 
						|
 | 
						|
     PROXYSERVER (public_ip=172.24.1.1, management_ip=192.168.1.1)
 | 
						|
     COMPUTESERVER (management_ip=192.168.1.2)
 | 
						|
 | 
						|
  Your ``nova-compute`` configuration file must set the following values:
 | 
						|
 | 
						|
  .. code-block:: console
 | 
						|
 | 
						|
     [vnc]
 | 
						|
     # These flags help construct a connection data structure
 | 
						|
     server_proxyclient_address=192.168.1.2
 | 
						|
     novncproxy_base_url=http://172.24.1.1:6080/vnc_auto.html
 | 
						|
     xvpvncproxy_base_url=http://172.24.1.1:6081/console
 | 
						|
 | 
						|
     # This is the address where the underlying vncserver (not the proxy)
 | 
						|
     # will listen for connections.
 | 
						|
     server_listen=192.168.1.2
 | 
						|
 | 
						|
  .. note::
 | 
						|
 | 
						|
     ``novncproxy_base_url`` and ``xvpvncproxy_base_url`` use a public IP; this
 | 
						|
     is the URL that is ultimately returned to clients, which generally do not
 | 
						|
     have access to your private network. Your PROXYSERVER must be able to
 | 
						|
     reach ``server_proxyclient_address``, because that is the address over
 | 
						|
     which the VNC connection is proxied.
 | 
						|
 | 
						|
- **Q: My noVNC does not work with recent versions of web browsers. Why?**
 | 
						|
 | 
						|
  A: Make sure you have installed ``python-numpy``, which is required to
 | 
						|
  support a newer version of the WebSocket protocol (HyBi-07+).
 | 
						|
 | 
						|
- **Q: How do I adjust the dimensions of the VNC window image in the OpenStack
 | 
						|
  dashboard?**
 | 
						|
 | 
						|
  A: These values are hard-coded in a Django HTML template. To alter them, edit
 | 
						|
  the ``_detail_vnc.html`` template file. The location of this file varies
 | 
						|
  based on Linux distribution. On Ubuntu 14.04, the file is at
 | 
						|
  ``/usr/share/pyshared/horizon/dashboards/nova/instances/templates/instances/_detail_vnc.html``.
 | 
						|
 | 
						|
  Modify the ``width`` and ``height`` options, as follows:
 | 
						|
 | 
						|
  .. code-block:: console
 | 
						|
 | 
						|
     <iframe src="{{ vnc_url }}" width="720" height="430"></iframe>
 | 
						|
 | 
						|
- **Q: My noVNC connections failed with ValidationError: Origin header protocol
 | 
						|
  does not match. Why?**
 | 
						|
 | 
						|
  A: Make sure the ``base_url`` match your TLS setting. If you are using https
 | 
						|
  console connections, make sure that the value of ``novncproxy_base_url`` is
 | 
						|
  set explicitly where the ``nova-novncproxy`` service is running.
 | 
						|
 | 
						|
Serial Console
 | 
						|
--------------
 | 
						|
 | 
						|
The *serial console* feature  [1]_ in nova is an alternative for graphical
 | 
						|
consoles like *VNC*, *SPICE*, *RDP*. The example below uses these nodes:
 | 
						|
 | 
						|
* controller node with IP ``192.168.50.100``
 | 
						|
* compute node 1 with IP ``192.168.50.104``
 | 
						|
* compute node 2 with IP ``192.168.50.105``
 | 
						|
 | 
						|
Here's the general flow of actions:
 | 
						|
 | 
						|
.. figure:: figures/serial-console-flow.svg
 | 
						|
   :width: 100%
 | 
						|
   :alt: The serial console flow
 | 
						|
 | 
						|
1. The user requests a serial console connection string for an instance
 | 
						|
   from the REST API.
 | 
						|
2. The `nova-api` service asks the `nova-compute` service, which manages
 | 
						|
   that instance, to fulfill that request.
 | 
						|
3. That connection string gets used by the user to connect to the
 | 
						|
   `nova-serialproxy` service.
 | 
						|
4. The `nova-serialproxy` service then proxies the console interaction
 | 
						|
   to the port of the compute node where the instance is running. That
 | 
						|
   port gets forwarded by the hypervisor into the KVM guest.
 | 
						|
 | 
						|
The config options for those nodes, which are in the section
 | 
						|
``[serial_console]`` of your ``nova.conf``, are not intuitive at first.
 | 
						|
Keep these things in mind:
 | 
						|
 | 
						|
* The ``serialproxy_host`` is the address the `nova-serialproxy` service
 | 
						|
  listens to for incoming connections (see step 3).
 | 
						|
* The ``serialproxy_port`` value must be the very same as in the URI
 | 
						|
  of ``base_url``.
 | 
						|
* The ``base_url`` on the compute node will be part of the response the user
 | 
						|
  will get when asking for a serial console connection string (see step 1
 | 
						|
  from above). This means it needs to be an URL the user can connect to.
 | 
						|
* The ``proxyclient_address`` on the compute node will be used by the
 | 
						|
  `nova-serialproxy` service to determine where to connect to for
 | 
						|
  proxying the console interaction.
 | 
						|
 | 
						|
References
 | 
						|
----------
 | 
						|
 | 
						|
.. [1] https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/serial-ports.html
 | 
						|
.. [2] https://qemu.weilnetz.de/doc/qemu-doc.html#vnc_005fsec_005fcertificate_005fverify
 | 
						|
.. [3] https://tools.ietf.org/html/rfc3280#section-4.2.1.10
 |