2016-08-12 07:21:59 -04:00
|
|
|
=====================
|
|
|
|
|
DevStack Networking
|
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
An important part of the DevStack experience is networking that works
|
|
|
|
|
by default for created guests. This might not be optimal for your
|
2016-11-21 20:36:31 +00:00
|
|
|
particular testing environment, so this document tries its best to
|
2016-08-12 07:21:59 -04:00
|
|
|
explain what's going on.
|
|
|
|
|
|
|
|
|
|
Defaults
|
|
|
|
|
========
|
|
|
|
|
|
|
|
|
|
If you don't specify any configuration you will get the following:
|
|
|
|
|
|
|
|
|
|
* neutron (including l3 with openvswitch)
|
|
|
|
|
* private project networks for each openstack project
|
|
|
|
|
* a floating ip range of 172.24.4.0/24 with the gateway of 172.24.4.1
|
2016-11-15 17:26:05 -08:00
|
|
|
* the demo project configured with fixed ips on a subnet allocated from
|
|
|
|
|
the 10.0.0.0/22 range
|
2016-11-21 20:36:31 +00:00
|
|
|
* a ``br-ex`` interface controlled by neutron for all its networking
|
2016-08-12 07:21:59 -04:00
|
|
|
(this is not connected to any physical interfaces).
|
2016-11-21 20:36:31 +00:00
|
|
|
* DNS resolution for guests based on the resolv.conf for your host
|
2016-08-12 07:21:59 -04:00
|
|
|
* an ip masq rule that allows created guests to route out
|
|
|
|
|
|
|
|
|
|
This creates an environment which is isolated to the single
|
|
|
|
|
host. Guests can get to the external network for package
|
|
|
|
|
updates. Tempest tests will work in this environment.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
|
|
By default all OpenStack environments have security group rules
|
|
|
|
|
which block all inbound packets to guests. If you want to be able
|
|
|
|
|
to ssh / ping your created guests you should run the following.
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
openstack security group rule create --proto icmp --dst-port 0 default
|
|
|
|
|
openstack security group rule create --proto tcp --dst-port 22 default
|
|
|
|
|
|
|
|
|
|
Locally Accessible Guests
|
|
|
|
|
=========================
|
|
|
|
|
|
2020-06-08 11:58:29 +02:00
|
|
|
If you want to make your guests accessible from other machines on your
|
2016-08-12 07:21:59 -04:00
|
|
|
network, we have to connect ``br-ex`` to a physical interface.
|
|
|
|
|
|
|
|
|
|
Dedicated Guest Interface
|
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
|
|
If you have 2 or more interfaces on your devstack server, you can
|
|
|
|
|
allocate an interface to neutron to fully manage. This **should not**
|
|
|
|
|
be the same interface you use to ssh into the devstack server itself.
|
|
|
|
|
|
|
|
|
|
This is done by setting with the ``PUBLIC_INTERFACE`` attribute.
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
[[local|localrc]]
|
|
|
|
|
PUBLIC_INTERFACE=eth1
|
|
|
|
|
|
|
|
|
|
That will put all layer 2 traffic from your guests onto the main
|
|
|
|
|
network. When running in this mode the ip masq rule is **not** added
|
|
|
|
|
in your devstack, you are responsible for making routing work on your
|
|
|
|
|
local network.
|
|
|
|
|
|
|
|
|
|
Shared Guest Interface
|
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
|
|
This is not a recommended configuration. Because of interactions
|
2024-08-22 16:24:21 +01:00
|
|
|
between OVS and bridging, if you reboot your box with active
|
2017-08-17 13:21:25 -07:00
|
|
|
networking you may lose network connectivity to your system.
|
2016-08-12 07:21:59 -04:00
|
|
|
|
|
|
|
|
If you need your guests accessible on the network, but only have 1
|
|
|
|
|
interface (using something like a NUC), you can share your one
|
|
|
|
|
network. But in order for this to work you need to manually set a lot
|
|
|
|
|
of addresses, and have them all exactly correct.
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
[[local|localrc]]
|
|
|
|
|
PUBLIC_INTERFACE=eth0
|
|
|
|
|
HOST_IP=10.42.0.52
|
2020-06-08 11:58:29 +02:00
|
|
|
FLOATING_RANGE=10.42.0.0/24
|
2016-08-12 07:21:59 -04:00
|
|
|
PUBLIC_NETWORK_GATEWAY=10.42.0.1
|
|
|
|
|
Q_FLOATING_ALLOCATION_POOL=start=10.42.0.250,end=10.42.0.254
|
|
|
|
|
|
|
|
|
|
In order for this scenario to work the floating ip network must match
|
|
|
|
|
the default networking on your server. This breaks HOST_IP detection,
|
|
|
|
|
as we exclude the floating range by default, so you have to specify
|
|
|
|
|
that manually.
|
|
|
|
|
|
|
|
|
|
The ``PUBLIC_NETWORK_GATEWAY`` is the gateway that server would normally
|
|
|
|
|
use to get off the network. ``Q_FLOATING_ALLOCATION_POOL`` controls
|
|
|
|
|
the range of floating ips that will be handed out. As we are sharing
|
|
|
|
|
your existing network, you'll want to give it a slice that your local
|
|
|
|
|
dhcp server is not allocating. Otherwise you could easily have
|
|
|
|
|
conflicting ip addresses, and cause havoc with your local network.
|
2016-11-15 17:26:05 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
Private Network Addressing
|
|
|
|
|
==========================
|
|
|
|
|
|
|
|
|
|
The private networks addresses are controlled by the ``IPV4_ADDRS_SAFE_TO_USE``
|
|
|
|
|
and the ``IPV6_ADDRS_SAFE_TO_USE`` variables. This allows users to specify one
|
|
|
|
|
single variable of safe internal IPs to use that will be referenced whether or
|
|
|
|
|
not subnetpools are in use.
|
|
|
|
|
|
|
|
|
|
For IPv4, ``FIXED_RANGE`` and ``SUBNETPOOL_PREFIX_V4`` will just default to
|
|
|
|
|
the value of ``IPV4_ADDRS_SAFE_TO_USE`` directly.
|
|
|
|
|
|
2016-11-21 20:36:31 +00:00
|
|
|
For IPv6, ``FIXED_RANGE_V6`` will default to the first /64 of the value of
|
2016-11-15 17:26:05 -08:00
|
|
|
``IPV6_ADDRS_SAFE_TO_USE``. If ``IPV6_ADDRS_SAFE_TO_USE`` is /64 or smaller,
|
2016-11-21 20:36:31 +00:00
|
|
|
``FIXED_RANGE_V6`` will just use the value of that directly.
|
2016-11-15 17:26:05 -08:00
|
|
|
``SUBNETPOOL_PREFIX_V6`` will just default to the value of
|
|
|
|
|
``IPV6_ADDRS_SAFE_TO_USE`` directly.
|
2024-08-22 16:24:21 +01:00
|
|
|
|
|
|
|
|
.. _ssh:
|
|
|
|
|
|
|
|
|
|
SSH access to instances
|
|
|
|
|
=======================
|
|
|
|
|
|
|
|
|
|
To validate connectivity, you can create an instance using the
|
|
|
|
|
``$PRIVATE_NETWORK_NAME`` network (default: ``private``), create a floating IP
|
|
|
|
|
using the ``$PUBLIC_NETWORK_NAME`` network (default: ``public``), and attach
|
|
|
|
|
this floating IP to the instance:
|
|
|
|
|
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
openstack keypair create --public-key ~/.ssh/id_rsa.pub test-keypair
|
|
|
|
|
openstack server create --network private --key-name test-keypair ... test-server
|
|
|
|
|
fip_id=$(openstack floating ip create public -f value -c id)
|
|
|
|
|
openstack server add floating ip test-server ${fip_id}
|
|
|
|
|
|
|
|
|
|
Once done, ensure you have enabled SSH and ICMP (ping) access for the security
|
|
|
|
|
group used for the instance. You can either create a custom security group and
|
|
|
|
|
specify it when creating the instance or add it after creation, or you can
|
|
|
|
|
modify the ``default`` security group created by default for each project.
|
|
|
|
|
Let's do the latter:
|
|
|
|
|
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
openstack security group rule create --proto icmp --dst-port 0 default
|
|
|
|
|
openstack security group rule create --proto tcp --dst-port 22 default
|
|
|
|
|
|
|
|
|
|
Finally, SSH into the instance. If you used the Cirros instance uploaded by
|
|
|
|
|
default, then you can run the following:
|
|
|
|
|
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
openstack server ssh test-server -- -l cirros
|
|
|
|
|
|
|
|
|
|
This will connect using the ``cirros`` user and the keypair you configured when
|
|
|
|
|
creating the instance.
|
2024-08-26 11:56:31 +01:00
|
|
|
|
|
|
|
|
Remote SSH access to instances
|
|
|
|
|
==============================
|
|
|
|
|
|
|
|
|
|
You can also SSH to created instances on your DevStack host from other hosts.
|
|
|
|
|
This can be helpful if you are e.g. deploying DevStack in a VM on an existing
|
2024-08-27 12:08:23 +01:00
|
|
|
cloud and wish to do development on your local machine. There are a few ways to
|
|
|
|
|
do this.
|
|
|
|
|
|
|
|
|
|
.. rubric:: Configure instances to be locally accessible
|
|
|
|
|
|
|
|
|
|
The most obvious way is to configure guests to be locally accessible, as
|
|
|
|
|
described `above <Locally Accessible Guests>`__. This has the advantage of
|
|
|
|
|
requiring no further effort on the client. However, it is more involved and
|
|
|
|
|
requires either support from your cloud or some inadvisable workarounds.
|
|
|
|
|
|
|
|
|
|
.. rubric:: Use your DevStack host as a jump host
|
|
|
|
|
|
|
|
|
|
You can choose to use your DevStack host as a jump host. To SSH to a instance
|
|
|
|
|
this way, pass the standard ``-J`` option to the ``openstack ssh`` / ``ssh``
|
|
|
|
|
command. For example:
|
|
|
|
|
|
|
|
|
|
.. code-block::
|
|
|
|
|
|
|
|
|
|
openstack server ssh test-server -- -l cirros -J username@devstack-host
|
|
|
|
|
|
|
|
|
|
(where ``test-server`` is name of an existing instance, as described
|
|
|
|
|
:ref:`previously <ssh>`, and ``username`` and ``devstack-host`` are the
|
|
|
|
|
username and hostname of your DevStack host).
|
|
|
|
|
|
|
|
|
|
This can also be configured via your ``~/.ssh/config`` file, making it rather
|
|
|
|
|
effortless. However, it only allows SSH access. If you want to access e.g. a
|
|
|
|
|
web application on the instance, you will need to configure an SSH tunnel and
|
|
|
|
|
forward select ports using the ``-L`` option. For example, to forward HTTP
|
|
|
|
|
traffic:
|
|
|
|
|
|
|
|
|
|
.. code-block::
|
2024-08-26 11:56:31 +01:00
|
|
|
|
2024-08-27 12:08:23 +01:00
|
|
|
openstack server ssh test-server -- -l cirros -L 8080:username@devstack-host:80
|
2024-08-26 11:56:31 +01:00
|
|
|
|
2024-08-27 12:08:23 +01:00
|
|
|
(where ``test-server`` is name of an existing instance, as described
|
|
|
|
|
:ref:`previously <ssh>`, and ``username`` and ``devstack-host`` are the
|
|
|
|
|
username and hostname of your DevStack host).
|
|
|
|
|
|
|
|
|
|
As you can imagine, this can quickly get out of hand, particularly for more
|
|
|
|
|
complex guest applications with multiple ports.
|
|
|
|
|
|
|
|
|
|
.. rubric:: Use a proxy or VPN tool
|
|
|
|
|
|
|
|
|
|
You can use a proxy or VPN tool to enable tunneling for the floating IP
|
|
|
|
|
address range of the ``$PUBLIC_NETWORK_NAME`` network (default: ``public``)
|
|
|
|
|
defined by ``$FLOATING_RANGE`` (default: ``172.24.4.0/24``). There are many
|
|
|
|
|
such tools available to do this. For example, we could use a useful utility
|
|
|
|
|
called `shuttle`__. To enable tunneling using ``shuttle``, first ensure you
|
|
|
|
|
have allowed SSH and HTTP(S) traffic to your DevStack host. Allowing HTTP(S)
|
|
|
|
|
traffic is necessary so you can use the OpenStack APIs remotely. How you do
|
|
|
|
|
this will depend on where your DevStack host is running. Once this is done,
|
|
|
|
|
install ``sshuttle`` on your localhost:
|
2024-08-26 11:56:31 +01:00
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
2025-01-07 10:51:03 +09:00
|
|
|
sudo apt-get install sshuttle || dnf install sshuttle
|
2024-08-26 11:56:31 +01:00
|
|
|
|
2024-08-27 12:08:23 +01:00
|
|
|
Finally, start ``sshuttle`` on your localhost using the floating IP address
|
|
|
|
|
range. For example, assuming you are using the default value for
|
|
|
|
|
``$FLOATING_RANGE``, you can do:
|
2024-08-26 11:56:31 +01:00
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
sshuttle -r username@devstack-host 172.24.4.0/24
|
|
|
|
|
|
|
|
|
|
(where ``username`` and ``devstack-host`` are the username and hostname of your
|
|
|
|
|
DevStack host).
|
|
|
|
|
|
2024-08-27 12:08:23 +01:00
|
|
|
You should now be able to create an instance and SSH into it:
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
|
|
|
|
|
openstack server ssh test-server -- -l cirros
|
|
|
|
|
|
|
|
|
|
(where ``test-server`` is name of an existing instance, as described
|
|
|
|
|
:ref:`previously <ssh>`)
|
2024-08-26 11:56:31 +01:00
|
|
|
|
|
|
|
|
.. __: https://github.com/sshuttle/sshuttle
|