Merge "Revert "Add neutron ML2 plugin info to instalation guid""

This commit is contained in:
Jenkins 2013-11-04 19:20:20 +00:00 committed by Gerrit Code Review
commit 97aa41bce1
3 changed files with 186 additions and 290 deletions

View File

@ -4,9 +4,8 @@
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="section_networking-routers-with-private-networks"> xml:id="section_networking-routers-with-private-networks">
<title>Per-tenant routers with private networks</title> <title>Per-tenant routers with private networks</title>
<para>This section describes how to install the Networking service <para>This section describes how to install the Networking service and its components for a
and its components for a per-tenant routers with private per-tenant routers with private networks use case.</para>
networks use case.</para>
<informalfigure> <informalfigure>
<mediaobject> <mediaobject>
<imageobject> <imageobject>
@ -65,50 +64,35 @@
<tbody> <tbody>
<tr> <tr>
<td>Controller Node</td> <td>Controller Node</td>
<td><para>Runs the Networking service, Identity, and <td><para>Runs the Networking service, Identity, and all of the Compute services that are required to
all of the Compute services that are required deploy VMs (<systemitem class="service">nova-api</systemitem>, <systemitem
to deploy VMs (<systemitem class="service" class="service">nova-scheduler</systemitem>, for example). The node must
>nova-api</systemitem>, <systemitem have at least one network interface, which is connected to the Management
class="service" Network. The host name is controlnode, which every other node resolves to
>nova-scheduler</systemitem>, for the IP of the controller node.</para><note>
example). The node must have at least one <para>The <systemitem class="service">nova-network</systemitem> service
network interface, which is connected to the should not be running. This is replaced by Networking.</para>
Management Network. The host name is
controlnode, which every other node resolves
to the IP of the controller node.</para><note>
<para>The <systemitem class="service"
>nova-network</systemitem> service
should not be running. This is replaced by
Networking.</para>
</note></td> </note></td>
</tr> </tr>
<tr> <tr>
<td>Compute Node</td> <td>Compute Node</td>
<td>Runs the Networking L2 agent and the Compute <td>Runs the Networking L2 agent and the Compute services that run VMs (<systemitem
services that run VMs (<systemitem class="service" class="service">nova-compute</systemitem> specifically, and optionally other
>nova-compute</systemitem> specifically, and <systemitem class="service">nova-*</systemitem> services depending on
optionally other <systemitem class="service" configuration). The node must have at least two network interfaces. One
>nova-*</systemitem> services depending on interface communicates with the controller node through the management network.
configuration). The node must have at least two The other node is used for the VM traffic on the data network. The VM receives
network interfaces. One interface communicates its IP address from the DHCP agent on this network.</td>
with the controller node through the management
network. The other node is used for the VM traffic
on the data network. The VM receives its IP
address from the DHCP agent on this network.</td>
</tr> </tr>
<tr> <tr>
<td>Network Node</td> <td>Network Node</td>
<td>Runs Networking L2 agent, DHCP agent and L3 agent. <td>Runs Networking L2 agent, DHCP agent and L3 agent. This node has access to the
This node has access to the external network. The external network. The DHCP agent allocates IP addresses to the VMs on data
DHCP agent allocates IP addresses to the VMs on network. (Technically, the addresses are allocated by the Networking server, and
data network. (Technically, the addresses are distributed by the dhcp agent.) The node must have at least two network
allocated by the Networking server, and interfaces. One interface communicates with the controller node through the
distributed by the dhcp agent.) The node must have management network. The other interface is used as external network. GRE tunnels
at least two network interfaces. One interface are set up as data networks.</td>
communicates with the controller node through the
management network. The other interface is used as
external network. GRE tunnels are set up as data
networks.</td>
</tr> </tr>
<tr> <tr>
<td>Router</td> <td>Router</td>
@ -122,33 +106,26 @@
<para><emphasis role="bold">Controller node</emphasis></para> <para><emphasis role="bold">Controller node</emphasis></para>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Relevant Compute services are installed, configured, <para>Relevant Compute services are installed, configured, and running.</para>
and running.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Glance is installed, configured, and running. In <para>Glance is installed, configured, and running. In
addition, an image named tty must be present.</para> addition, an image named tty must be present.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Identity is installed, configured, and running. A <para>Identity is installed, configured, and running. A Networking user named <emphasis
Networking user named <emphasis role="bold" role="bold">neutron</emphasis> should be created on tenant <emphasis role="bold"
>neutron</emphasis> should be created on tenant >service</emphasis> with password <emphasis role="bold"
<emphasis role="bold">service</emphasis> with
password <emphasis role="bold"
>NEUTRON_PASS</emphasis>.</para> >NEUTRON_PASS</emphasis>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Additional services: <itemizedlist> <para>Additional services: <itemizedlist>
<listitem> <listitem>
<para>RabbitMQ is running with default guest <para>RabbitMQ is running with default guest and its password</para>
and its password</para>
</listitem> </listitem>
<listitem <listitem os="rhel;centos;fedora;opensuse;sles;ubuntu">
os="rhel;centos;fedora;opensuse;sles;ubuntu"> <para>MySQL server (user is <emphasis role="bold">root</emphasis> and
<para>MySQL server (user is <emphasis password is <emphasis role="bold">root</emphasis>)</para>
role="bold">root</emphasis> and
password is <emphasis role="bold"
>root</emphasis>)</para>
</listitem> </listitem>
</itemizedlist></para> </itemizedlist></para>
</listitem> </listitem>
@ -160,24 +137,18 @@
<para> <para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para><emphasis role="bold">Controller <para><emphasis role="bold">Controller node—Networking server</emphasis><orderedlist>
node—Networking server</emphasis><orderedlist>
<listitem> <listitem>
<para>Install the Networking <para>Install the Networking server.</para>
server.</para>
</listitem> </listitem>
<listitem <listitem os="rhel;centos;fedora;opensuse;sles;ubuntu">
os="rhel;centos;fedora;opensuse;sles;ubuntu"> <para>Create database <emphasis role="bold"
<para>Create database <emphasis
role="bold"
>ovs_neutron</emphasis>.</para> >ovs_neutron</emphasis>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the Networking <para>Update the Networking configuration file, <filename>
configuration file, <filename> /etc/neutron/neutron.conf</filename>, with plug-in choice
/etc/neutron/neutron.conf</filename>, and Identity Service user as necessary:</para>
with plug-in choice and Identity
Service user as necessary:</para>
<programlisting language="ini" os="rhel;centos;fedora;opensuse;sles;ubuntu">[DEFAULT] <programlisting language="ini" os="rhel;centos;fedora;opensuse;sles;ubuntu">[DEFAULT]
core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2 core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
control_exchange = neutron control_exchange = neutron
@ -195,30 +166,24 @@ rabbit_host = controller
notification_driver = neutron.openstack.common.notifier.rabbit_notifier notification_driver = neutron.openstack.common.notifier.rabbit_notifier
</programlisting> </programlisting>
</listitem> </listitem>
<listitem <listitem os="rhel;centos;fedora;opensuse;sles;ubuntu">
os="rhel;centos;fedora;opensuse;sles;ubuntu"> <para>Update the plug-in configuration file,
<para>Update the plug-in configuration <filename>/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini</filename>:</para>
file,
<filename>/etc/neutron/plugins/ml2/ml2_conf.ini</filename>:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://root:root@controlnode:3306/ovs_neutron?charset=utf8 connection = mysql://root:root@controlnode:3306/ovs_neutron?charset=utf8
[ovs] [ovs]
tenant_network_type = gre tenant_network_type = gre
[ml2_type_gre]
tunnel_id_ranges = 1:1000 tunnel_id_ranges = 1:1000
enable_tunneling = True
</programlisting> </programlisting>
</listitem> </listitem>
<listitem <listitem os="rhel;centos;fedora;opensuse;sles;ubuntu">
os="rhel;centos;fedora;opensuse;sles;ubuntu"> <para>Start the Networking server</para>
<para>Start the Networking <para>The Networking server can be a service of the operating
server</para> system. The command to start the service depends on your
<para>The Networking server can be a operating system. The following command runs the Networking
service of the operating system. server directly:</para>
The command to start the service
depends on your operating system.
The following command runs the
Networking server directly:</para>
<screen><prompt>#</prompt> <userinput>neutron-server --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \ <screen><prompt>#</prompt> <userinput>neutron-server --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \
--config-file /etc/neutron/neutron.conf</userinput></screen> --config-file /etc/neutron/neutron.conf</userinput></screen>
</listitem> </listitem>
@ -230,12 +195,9 @@ tunnel_id_ranges = 1:1000
<para>Install Compute services.</para> <para>Install Compute services.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the Compute configuration <para>Update the Compute configuration file, <filename>
file, <filename> /etc/nova/nova.conf</filename>. Make sure the following line
/etc/nova/nova.conf</filename>. appears at the end of this file:</para>
Make sure the following line
appears at the end of this
file:</para>
<programlisting language="ini">network_api_class=nova.network.neutronv2.api.API <programlisting language="ini">network_api_class=nova.network.neutronv2.api.API
neutron_admin_username=neutron neutron_admin_username=neutron
@ -249,165 +211,137 @@ libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para>Restart relevant Compute <para>Restart relevant Compute services.</para>
services.</para>
</listitem> </listitem>
</orderedlist></para> </orderedlist></para>
</listitem> </listitem>
<listitem> <listitem>
<para><emphasis role="bold">Compute and Network <para><emphasis role="bold">Compute and Network node—L2 agent</emphasis><orderedlist>
node—L2 agent</emphasis><orderedlist>
<listitem> <listitem>
<para>Install and start Open <para>Install and start Open vSwitch.</para>
vSwitch.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Install the L2 agent (Neutron <para>Install the L2 agent (Neutron Open vSwitch agent).</para>
Open vSwitch agent).</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Add the integration bridge to <para>Add the integration bridge to the Open vSwitch:</para>
the Open vSwitch:</para>
<screen><prompt>#</prompt> <userinput>ovs-vsctl add-br br-int</userinput></screen> <screen><prompt>#</prompt> <userinput>ovs-vsctl add-br br-int</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the Networking <para>Update the Networking configuration file, <filename>
configuration file, <filename>
/etc/neutron/neutron.conf</filename>:</para> /etc/neutron/neutron.conf</filename>:</para>
<programlisting language="ini">[DEFAULT] <programlisting language="ini">[DEFAULT]
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
control_exchange = neutron control_exchange = neutron
rabbit_host = controller rabbit_host = controller
notification_driver = neutron.openstack.common.notifier.rabbit_notifier notification_driver = neutron.openstack.common.notifier.rabbit_notifier
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the plug-in configuration <para>Update the plug-in configuration file, <filename>
file, <filename> /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini</filename>.</para>
/etc/neutron/plugins/ml2/ml2_conf.ini</filename>.</para> <para>Compute node:</para>
<para>Compute Node:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://root:root@controlnode:3306/neutron_ml2?charset=utf8 connection = mysql://root:root@controlnode:3306/ovs_neutron?charset=utf8
[ml2]
tenant_network_type = gre
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[ovs] [ovs]
tenant_network_type = gre
tunnel_id_ranges = 1:1000
enable_tunneling = True
local_ip = 9.181.89.202 local_ip = 9.181.89.202
</programlisting> </programlisting>
<para>Network node:</para> <para>Network node:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://root:root@controlnode:3306/neutron_ml2?charset=utf8 connection = mysql://root:root@controlnode:3306/ovs_neutron?charset=utf8
[ml2]
tenant_network_type = gre
[ml2_type_gre]
tunnel_id_ranges = 1:1000
[ovs] [ovs]
tenant_network_type = gre
tunnel_id_ranges = 1:1000
enable_tunneling = True
local_ip = 9.181.89.203 local_ip = 9.181.89.203
</programlisting> </programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para>Create the integration bridge <para>Create the integration bridge <emphasis role="bold"
<emphasis role="bold"
>br-int</emphasis>:</para> >br-int</emphasis>:</para>
<screen><prompt>#</prompt> <userinput>ovs-vsctl --may-exist add-br br-int</userinput></screen> <screen><prompt>#</prompt> <userinput>ovs-vsctl --may-exist add-br br-int</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Start the Networking L2 <para>Start the Networking L2 agent</para>
agent</para>
<para>The Networking Open vSwitch L2 <para>The Networking Open vSwitch L2
agent can be a service of operating agent can be a service of operating
system. The command to start system. The command to start depends
depends on your operating systems. on your operating systems. The following command
The following command runs the runs the service directly:
service directly:</para> </para>
<screen><prompt>#</prompt> <userinput>neutron-openvswitch-agent --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \ <screen><prompt>#</prompt> <userinput>neutron-openvswitch-agent --config-file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \
--config-file /etc/neutron/neutron.conf</userinput></screen> --config-file /etc/neutron/neutron.conf</userinput></screen>
</listitem> </listitem>
</orderedlist></para> </orderedlist></para>
</listitem> </listitem>
<listitem> <listitem>
<para><emphasis role="bold">Network node—DHCP <para><emphasis role="bold">Network node—DHCP agent</emphasis><orderedlist>
agent</emphasis><orderedlist>
<listitem> <listitem>
<para>Install the DHCP agent.</para> <para>Install the DHCP agent.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the Networking <para>Update the Networking configuration file, <filename>
configuration file, <filename>
/etc/neutron/neutron.conf</filename></para> /etc/neutron/neutron.conf</filename></para>
<programlisting language="ini">[DEFAULT] <programlisting language="ini">[DEFAULT]
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
control_exchange = neutron control_exchange = neutron
rabbit_host = controller rabbit_host = controller
notification_driver = neutron.openstack.common.notifier.rabbit_notifier notification_driver = neutron.openstack.common.notifier.rabbit_notifier
allow_overlapping_ips = True</programlisting> allow_overlapping_ips = True</programlisting>
<para><emphasis role="bold">Set <para><emphasis role="bold">Set
<literal>allow_overlapping_ips</literal> <literal>allow_overlapping_ips</literal> because TenantA
because TenantA and TenantC use and TenantC use overlapping subnets.</emphasis></para>
overlapping
subnets.</emphasis></para>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the DHCP configuration <para>Update the DHCP configuration file <filename>
file <filename>
/etc/neutron/dhcp_agent.ini</filename></para> /etc/neutron/dhcp_agent.ini</filename></para>
<programlisting language="ini">interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver</programlisting> <programlisting language="ini">interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver</programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para>Start the DHCP agent.</para> <para>Start the DHCP agent.</para>
<para>The Networking DHCP agent can be <para>The Networking DHCP agent can be a service of operating
a service of operating system. The system. The command to start the service depends on your
command to start the service operating system. The following command runs the service
depends on your operating system. directly:</para>
The following command runs the
service directly:</para>
<screen><prompt>#</prompt> <userinput>neutron-dhcp-agent --config-file /etc/neutron/neutron.conf \ <screen><prompt>#</prompt> <userinput>neutron-dhcp-agent --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/dhcp_agent.ini</userinput></screen> --config-file /etc/neutron/dhcp_agent.ini</userinput></screen>
</listitem> </listitem>
</orderedlist></para> </orderedlist></para>
</listitem> </listitem>
<listitem> <listitem>
<para><emphasis role="bold">Network node—L3 <para><emphasis role="bold">Network node—L3 agent</emphasis><orderedlist>
agent</emphasis><orderedlist>
<listitem> <listitem>
<para>Install the L3 agent.</para> <para>Install the L3 agent.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Add the external network <para>Add the external network bridge</para>
bridge</para>
<screen><prompt>#</prompt> <userinput>ovs-vsctl add-br br-ex</userinput></screen> <screen><prompt>#</prompt> <userinput>ovs-vsctl add-br br-ex</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Add the physical interface, for <para>Add the physical interface, for example eth0, that is
example eth0, that is connected to connected to the outside network to this bridge:</para>
the outside network to this
bridge:</para>
<screen><prompt>#</prompt> <userinput>ovs-vsctl add-port br-ex eth0</userinput></screen> <screen><prompt>#</prompt> <userinput>ovs-vsctl add-port br-ex eth0</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Update the L3 configuration file <para>Update the L3 configuration file <filename>
<filename>
/etc/neutron/l3_agent.ini</filename>:</para> /etc/neutron/l3_agent.ini</filename>:</para>
<programlisting language="ini">[DEFAULT] <programlisting language="ini">[DEFAULT]
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces=True</programlisting> use_namespaces=True</programlisting>
<para><emphasis role="bold">Set the <para><emphasis role="bold">Set the
<literal>use_namespaces</literal> <literal>use_namespaces</literal> option (it is True by
option (it is True by default) default) because TenantA and TenantC have overlapping
because TenantA and TenantC have subnets, and the routers are hosted on one l3 agent network
overlapping subnets, and the node.</emphasis></para>
routers are hosted on one l3 agent
network node.</emphasis></para>
</listitem> </listitem>
<listitem> <listitem>
<para>Start the L3 agent</para> <para>Start the L3 agent</para>
<para>The Networking L3 agent can be a <para>The Networking L3 agent can be a service of operating system.
service of operating system. The The command to start the service depends on your operating
command to start the service system. The following command starts the agent directly:</para>
depends on your operating system.
The following command starts the
agent directly:</para>
<screen><prompt>#</prompt> <userinput>neutron-l3-agent --config-file /etc/neutron/neutron.conf \ <screen><prompt>#</prompt> <userinput>neutron-l3-agent --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/l3_agent.ini</userinput></screen> --config-file /etc/neutron/l3_agent.ini</userinput></screen>
</listitem> </listitem>
@ -421,9 +355,8 @@ use_namespaces=True</programlisting>
<para>All of the commands below can be executed on the network <para>All of the commands below can be executed on the network
node.</para> node.</para>
<note> <note>
<para>Ensure that the following environment variables are <para>Ensure that the following environment variables are set. These are used by the
set. These are used by the various clients to access various clients to access the Identity service.</para>
the Identity service.</para>
</note> </note>
<para> <para>
<programlisting language="bash">export OS_USERNAME=admin <programlisting language="bash">export OS_USERNAME=admin
@ -434,8 +367,7 @@ use_namespaces=True</programlisting>
<para> <para>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Get the tenant ID (Used as $TENANT_ID <para>Get the tenant ID (Used as $TENANT_ID later):</para>
later):</para>
<screen><prompt>#</prompt> <userinput>keystone tenant-list</userinput> <screen><prompt>#</prompt> <userinput>keystone tenant-list</userinput>
<computeroutput>+----------------------------------+---------+---------+ <computeroutput>+----------------------------------+---------+---------+
| id | name | enabled | | id | name | enabled |
@ -503,19 +435,14 @@ use_namespaces=True</programlisting>
+------------------+--------------------------------------------+ +------------------+--------------------------------------------+
</computeroutput></screen> </computeroutput></screen>
<para><emphasis role="bold"> <para><emphasis role="bold">
<literal>provider:network_type <literal>provider:network_type local</literal> means that Networking
local</literal> means that Networking does not have to realize this network through provider network.
does not have to realize this network <literal>router:external true</literal> means that an external
through provider network. network is created where you can create floating IP and router gateway
<literal>router:external
true</literal> means that an external
network is created where you can create
floating IP and router gateway
port.</emphasis></para> port.</emphasis></para>
</listitem> </listitem>
<listitem> <listitem>
<para>Add an IP on external network to <para>Add an IP on external network to br-ex.</para>
br-ex.</para>
<para>Because br-ex is the external network <para>Because br-ex is the external network
bridge, add an IP 30.0.0.100/24 to br-ex and bridge, add an IP 30.0.0.100/24 to br-ex and
ping the floating IP of the VM from our ping the floating IP of the VM from our
@ -571,8 +498,7 @@ use_namespaces=True</programlisting>
1.</para> 1.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Create a subnet on the network <para>Create a subnet on the network TenantA-Net:</para>
TenantA-Net:</para>
<screen><prompt>#</prompt> <userinput> <screen><prompt>#</prompt> <userinput>
neutron --os-tenant-name TenantA --os-username UserA --os-password password \ neutron --os-tenant-name TenantA --os-username UserA --os-password password \
--os-auth-url=http://localhost:5000/v2.0 subnet-create TenantA-Net 10.0.0.0/24</userinput> --os-auth-url=http://localhost:5000/v2.0 subnet-create TenantA-Net 10.0.0.0/24</userinput>
@ -637,15 +563,13 @@ neutron --os-tenant-name TenantA --os-username UserA --os-password password \
<screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \ <screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \
--os-auth-url=http://localhost:5000/v2.0 router-interface-add \ --os-auth-url=http://localhost:5000/v2.0 router-interface-add \
TenantA-R1 51e2c223-0492-4385-b6e9-83d4e6d10657</userinput></screen> TenantA-R1 51e2c223-0492-4385-b6e9-83d4e6d10657</userinput></screen>
<para>Added interface to router <para>Added interface to router TenantA-R1</para>
TenantA-R1</para>
<screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \ <screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \
--os-auth-url=http://localhost:5000/v2.0 \ --os-auth-url=http://localhost:5000/v2.0 \
router-gateway-set TenantA-R1 Ext-Net</userinput></screen> router-gateway-set TenantA-R1 Ext-Net</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Associate a floating IP for <para>Associate a floating IP for TenantA_VM1.</para>
TenantA_VM1.</para>
<para>1. Create a floating IP:</para> <para>1. Create a floating IP:</para>
<screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \ <screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \
--os-auth-url=http://localhost:5000/v2.0 floatingip-create Ext-Net</userinput> --os-auth-url=http://localhost:5000/v2.0 floatingip-create Ext-Net</userinput>
@ -673,8 +597,7 @@ neutron --os-tenant-name TenantA --os-username UserA --os-password password \
| 6071d430-c66e-4125-b972-9a937c427520 | | fa:16:3e:a0:73:0d | {"subnet_id": "51e2c223-0492-4385-b6e9-83d4e6d10657", "ip_address": "10.0.0.3"} | | 6071d430-c66e-4125-b972-9a937c427520 | | fa:16:3e:a0:73:0d | {"subnet_id": "51e2c223-0492-4385-b6e9-83d4e6d10657", "ip_address": "10.0.0.3"} |
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------+ +--------------------------------------+------+-------------------+---------------------------------------------------------------------------------+
</computeroutput></screen> </computeroutput></screen>
<para>3. Associate the floating IP with <para>3. Associate the floating IP with the VM port:</para>
the VM port:</para>
<screen><prompt>$</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \ <screen><prompt>$</prompt> <userinput>neutron --os-tenant-name TenantA --os-username UserA --os-password password \
--os-auth-url=http://localhost:5000/v2.0 floatingip-associate \ --os-auth-url=http://localhost:5000/v2.0 floatingip-associate \
5a1f90ed-aa3c-4df3-82cb-116556e96bf1 6071d430-c66e-4125-b972-9a937c427520</userinput> 5a1f90ed-aa3c-4df3-82cb-116556e96bf1 6071d430-c66e-4125-b972-9a937c427520</userinput>
@ -689,8 +612,7 @@ neutron --os-tenant-name TenantA --os-username UserA --os-password password \
</computeroutput></screen> </computeroutput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Ping the public network from the <para>Ping the public network from the server of TenantA.</para>
server of TenantA.</para>
<para>In my environment, 192.168.1.0/24 is <para>In my environment, 192.168.1.0/24 is
my public network connected with my my public network connected with my
physical router, which also connects physical router, which also connects
@ -710,8 +632,7 @@ rtt min/avg/max/mdev = 1.234/1.495/1.745/0.211 ms
</computeroutput></screen> </computeroutput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Ping floating IP of the TenantA's <para>Ping floating IP of the TenantA's server:</para>
server:</para>
<screen><prompt>$</prompt> <userinput>ping 30.0.0.2</userinput> <screen><prompt>$</prompt> <userinput>ping 30.0.0.2</userinput>
<computeroutput>PING 30.0.0.2 (30.0.0.2) 56(84) bytes of data. <computeroutput>PING 30.0.0.2 (30.0.0.2) 56(84) bytes of data.
64 bytes from 30.0.0.2: icmp_req=1 ttl=63 time=45.0 ms 64 bytes from 30.0.0.2: icmp_req=1 ttl=63 time=45.0 ms
@ -724,8 +645,7 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
</computeroutput></screen> </computeroutput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Create other servers for <para>Create other servers for TenantA.</para>
TenantA.</para>
<para>We can create more servers for <para>We can create more servers for
TenantA and add floating IPs for TenantA and add floating IPs for
them.</para> them.</para>
@ -741,8 +661,7 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
IPs.</para> IPs.</para>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Create networks and subnets for <para>Create networks and subnets for TenantC:</para>
TenantC:</para>
<screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantC --os-username UserC --os-password password \ <screen><prompt>#</prompt> <userinput>neutron --os-tenant-name TenantC --os-username UserC --os-password password \
--os-auth-url=http://localhost:5000/v2.0 net-create TenantC-Net1</userinput> --os-auth-url=http://localhost:5000/v2.0 net-create TenantC-Net1</userinput>
<prompt>#</prompt> <userinput>neutron --os-tenant-name TenantC --os-username UserC --os-password password \ <prompt>#</prompt> <userinput>neutron --os-tenant-name TenantC --os-username UserC --os-password password \
@ -798,15 +717,13 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
them to create VMs and router.</para> them to create VMs and router.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Create a server TenantC-VM1 for <para>Create a server TenantC-VM1 for TenantC on TenantC-Net1.</para>
TenantC on TenantC-Net1.</para>
<screen><prompt>#</prompt> <userinput>nova --os-tenant-name TenantC --os-username UserC --os-password password \ <screen><prompt>#</prompt> <userinput>nova --os-tenant-name TenantC --os-username UserC --os-password password \
--os-auth-url=http://localhost:5000/v2.0 boot --image tty --flavor 1 \ --os-auth-url=http://localhost:5000/v2.0 boot --image tty --flavor 1 \
--nic net-id=91309738-c317-40a3-81bb-bed7a3917a85 TenantC_VM1</userinput></screen> --nic net-id=91309738-c317-40a3-81bb-bed7a3917a85 TenantC_VM1</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Create a server TenantC-VM3 for <para>Create a server TenantC-VM3 for TenantC on TenantC-Net2.</para>
TenantC on TenantC-Net2.</para>
<screen><prompt>#</prompt> <userinput>nova --os-tenant-name TenantC --os-username UserC --os-password password \ <screen><prompt>#</prompt> <userinput>nova --os-tenant-name TenantC --os-username UserC --os-password password \
--os-auth-url=http://localhost:5000/v2.0 boot --image tty --flavor 1 \ --os-auth-url=http://localhost:5000/v2.0 boot --image tty --flavor 1 \
--nic net-id=5b373ad2-7866-44f4-8087-f87148abd623 TenantC_VM3</userinput></screen> --nic net-id=5b373ad2-7866-44f4-8087-f87148abd623 TenantC_VM3</userinput></screen>
@ -827,13 +744,10 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
will use them later.</para> will use them later.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Make sure servers get their <para>Make sure servers get their IPs.</para>
IPs.</para> <para>We can use VNC to log on the VMs to check if they get IPs. If not,
<para>We can use VNC to log on the VMs to we have to make sure the Networking components are running right and
check if they get IPs. If not, we have the GRE tunnels work.</para>
to make sure the Networking components
are running right and the GRE tunnels
work.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Create and configure a router for <para>Create and configure a router for
@ -851,8 +765,12 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
router-gateway-set TenantC-R1 Ext-Net</userinput></screen> router-gateway-set TenantC-R1 Ext-Net</userinput></screen>
</listitem> </listitem>
<listitem> <listitem>
<para>Checkpoint: ping from within <para>Checkpoint: ping from within TenantC's servers.</para>
TenantC's servers.</para> <para>Since we have a router connecting to two subnets, the VMs on these subnets are able to ping each other.
And since we have set the router's gateway interface, TenantC's servers are able to ping external network IPs, such as 192.168.1.1, 30.0.0.1 etc.</para>
</listitem>
<listitem>
<para>Associate floating IPs for TenantC's servers.</para>
<para>Since we have a router connecting to <para>Since we have a router connecting to
two subnets, the VMs on these subnets two subnets, the VMs on these subnets
are able to ping each other. And since are able to ping each other. And since
@ -862,19 +780,7 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
192.168.1.1, 30.0.0.1 etc.</para> 192.168.1.1, 30.0.0.1 etc.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Associate floating IPs for TenantC's <para>Associate floating IPs for TenantC's servers.</para>
servers.</para>
<para>Since we have a router connecting to
two subnets, the VMs on these subnets
are able to ping each other. And since
we have set the router's gateway
interface, TenantC's servers are able
to ping external network IPs, such as
192.168.1.1, 30.0.0.1 etc.</para>
</listitem>
<listitem>
<para>Associate floating IPs for TenantC's
servers.</para>
<para>We can use the similar commands as <para>We can use the similar commands as
we used in TenantA's section to finish we used in TenantA's section to finish
this task.</para> this task.</para>
@ -885,26 +791,20 @@ rtt min/avg/max/mdev = 0.898/15.621/45.027/20.793 ms
</para> </para>
</section> </section>
<section xml:id="section_use-cases-tenant-router"> <section xml:id="section_use-cases-tenant-router">
<title>Use case: per-tenant routers with private <title>Use case: per-tenant routers with private networks</title>
networks</title> <para>This use case represents a more advanced router scenario in which each tenant gets at
<para>This use case represents a more advanced router scenario least one router, and potentially has access to the Networking API to create additional
in which each tenant gets at least one router, and routers. The tenant can create their own networks, potentially uplinking those networks
potentially has access to the Networking API to create to a router. This model enables tenant-defined, multi-tier applications, with each tier
additional routers. The tenant can create their own being a separate network behind the router. Since there are multiple routers, tenant
networks, potentially uplinking those networks to a subnets can overlap without conflicting, since access to external networks all happens
router. This model enables tenant-defined, multi-tier via SNAT or Floating IPs. Each router uplink and floating IP is allocated from the
applications, with each tier being a separate network external network subnet.</para>
behind the router. Since there are multiple routers,
tenant subnets can overlap without conflicting, since
access to external networks all happens via SNAT or
Floating IPs. Each router uplink and floating IP is
allocated from the external network subnet.</para>
<para> <para>
<mediaobject> <mediaobject>
<imageobject> <imageobject>
<imagedata scale="55" <imagedata scale="55"
fileref="../common/figures/UseCase-MultiRouter.png" fileref="../common/figures/UseCase-MultiRouter.png" align="left"/>
align="left"/>
</imageobject> </imageobject>
</mediaobject> </mediaobject>
<!--Image source link: https://docs.google.com/a/nicira.com/drawings/d/1mmQc8cBUoTEfEns-ehIyQSTvOrjUdl5xeGDv9suVyAY/edit --> <!--Image source link: https://docs.google.com/a/nicira.com/drawings/d/1mmQc8cBUoTEfEns-ehIyQSTvOrjUdl5xeGDv9suVyAY/edit -->

View File

@ -96,7 +96,7 @@
<listitem> <listitem>
<para>Edit file <filename>/etc/neutron/neutron.conf</filename> <para>Edit file <filename>/etc/neutron/neutron.conf</filename>
and modify: and modify:
<programlisting language="ini">core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin <programlisting language="ini">core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
auth_strategy = keystone auth_strategy = keystone
fake_rabbit = False fake_rabbit = False
rabbit_password = guest</programlisting> rabbit_password = guest</programlisting>
@ -104,13 +104,12 @@ rabbit_password = guest</programlisting>
</listitem> </listitem>
<listitem> <listitem>
<para>Edit file <filename> <para>Edit file <filename>
/etc/neutron/plugins/ml2/ml2_conf.ini</filename> /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini</filename>
and modify:</para> and modify:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@localhost:3306/neutron connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@localhost:3306/neutron
[ml2] [ovs]
tenant_network_type = vlan tenant_network_type = vlan
[ml2_type_vlan]
network_vlan_ranges = physnet1:100:2999</programlisting> network_vlan_ranges = physnet1:100:2999</programlisting>
</listitem> </listitem>
<listitem> <listitem>
@ -166,15 +165,13 @@ rabbit_host = controller</programlisting>
<step> <step>
<para>Update the plug-in configuration file, <para>Update the plug-in configuration file,
<filename> <filename>
/etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini
</filename>:</para> </filename>:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@controller:3306/neutron connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@controller:3306/neutron
[ml2]
tenant_network_type=vlan
[ml2_type_vlan]
network_vlan_ranges = physnet1:1:4094
[ovs] [ovs]
tenant_network_type=vlan
network_vlan_ranges = physnet1:1:4094
bridge_mappings = physnet1:br-eth1</programlisting> bridge_mappings = physnet1:br-eth1</programlisting>
</step> </step>
<step> <step>
@ -281,14 +278,12 @@ rabbit_host = controller</programlisting>
</step> </step>
<step> <step>
<para>Update the file <filename> <para>Update the file <filename>
/etc/neutron/plugins/ml2/ml2_conf.ini</filename>:</para> /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini</filename>:</para>
<programlisting language="ini">[database] <programlisting language="ini">[database]
connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@controller:3306/neutron connection = mysql://neutron:<replaceable>NEUTRON_DBPASS</replaceable>@controller:3306/neutron
[ml2]
tenant_network_type = vlan
[ml2_type_vlan]
network_vlan_ranges = physnet1:1:4094
[ovs] [ovs]
tenant_network_type = vlan
network_vlan_ranges = physnet1:1:4094
bridge_mappings = physnet1:br-eth1</programlisting> bridge_mappings = physnet1:br-eth1</programlisting>
</step> </step>
<step> <step>

View File

@ -88,7 +88,7 @@
</informaltable> </informaltable>
<para>The demo assumes the following prerequisites:</para> <para>The demo assumes the following prerequisites:</para>
<para><emphasis role="bold">Controller node</emphasis></para> <para><emphasis role="bold">Controller node</emphasis></para>
<itemizedlist> <orderedlist>
<listitem> <listitem>
<para>Relevant Compute services are installed, configured, <para>Relevant Compute services are installed, configured,
and running.</para> and running.</para>
@ -119,13 +119,13 @@
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
</itemizedlist> </orderedlist>
<para><emphasis role="bold">Compute node</emphasis></para> <para><emphasis role="bold">Compute node</emphasis></para>
<itemizedlist> <orderedlist>
<listitem> <listitem>
<para>Compute is installed and configured.</para> <para>Compute is installed and configured.</para>
</listitem> </listitem>
</itemizedlist> </orderedlist>
<section xml:id="demo_flat_installions"> <section xml:id="demo_flat_installions">
<title>Install</title> <title>Install</title>
<itemizedlist> <itemizedlist>
@ -162,6 +162,7 @@ core_plugin = neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
control_exchange = neutron control_exchange = neutron
rabbit_host = controller rabbit_host = controller
notification_driver = neutron.openstack.common.notifier.rabbit_notifier notification_driver = neutron.openstack.common.notifier.rabbit_notifier
[keystone_authtoken] [keystone_authtoken]
admin_tenant_name=service admin_tenant_name=service
admin_user=neutron admin_user=neutron
@ -176,7 +177,6 @@ admin_password=<replaceable>NEUTRON_PASS</replaceable>
connection = mysql://root:root@controller:3306/ovs_neutron?charset=utf8 connection = mysql://root:root@controller:3306/ovs_neutron?charset=utf8
[ovs] [ovs]
network_vlan_ranges = physnet1 network_vlan_ranges = physnet1
[ovs]
bridge_mappings = physnet1:br-eth0 bridge_mappings = physnet1:br-eth0
</programlisting> </programlisting>
</listitem> </listitem>
@ -200,12 +200,14 @@ bridge_mappings = physnet1:br-eth0
following line is at the end of the following line is at the end of the
file:</para> file:</para>
<programlisting language="ini">network_api_class=nova.network.neutronv2.api.API <programlisting language="ini">network_api_class=nova.network.neutronv2.api.API
neutron_admin_username=neutron neutron_admin_username=neutron
neutron_admin_password=<replaceable>NEUTRON_PASS</replaceable> neutron_admin_password=<replaceable>NEUTRON_PASS</replaceable>
neutron_admin_auth_url=http://controller:35357/v2.0/ neutron_admin_auth_url=http://controller:35357/v2.0/
neutron_auth_strategy=keystone neutron_auth_strategy=keystone
neutron_admin_tenant_name=service neutron_admin_tenant_name=service
neutron_url=http://controller:9696/ neutron_url=http://controller:9696/
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
</programlisting> </programlisting>
</listitem> </listitem>
@ -248,7 +250,6 @@ notification_driver = neutron.openstack.common.notifier.rabbit_notifier</program
connection = mysql://root:root@controller:3306/ovs_neutron?charset=utf8 connection = mysql://root:root@controller:3306/ovs_neutron?charset=utf8
[ovs] [ovs]
network_vlan_ranges = physnet1 network_vlan_ranges = physnet1
[ovs]
bridge_mappings = physnet1:br-eth0</programlisting> bridge_mappings = physnet1:br-eth0</programlisting>
</listitem> </listitem>
<listitem> <listitem>