Juju Charm - Neutron Gateway
Go to file
2015-05-06 10:15:15 +01:00
actions Move config_changed into try block 2015-04-15 16:46:22 +00:00
files Rebuild ovs tunnel only if local agent is alive, other minor change. 2015-01-19 18:43:09 +08:00
hooks conntrack needed for ha 2015-05-05 17:28:51 +00:00
templates Move deploy from source template files to templates/git 2015-04-13 14:24:40 +00:00
tests Point charmhelper sync and amulet tests at stable branches 2015-04-24 11:07:10 +01:00
unit_tests Fix lint and unit tests 2015-05-06 10:15:15 +01:00
.bzrignore Deploy from source 2015-04-10 14:22:04 +00:00
.coveragerc Redux to use agree structure and OS templating 2013-07-19 10:46:25 +01:00
.project Updates post review including better backwards compatibility with 12.04 2012-12-06 10:22:24 +00:00
.pydevproject Redux to use agree structure and OS templating 2013-07-19 10:46:25 +01:00
actions.yaml Deploy from source 2015-04-10 14:22:04 +00:00
charm-helpers-hooks.yaml [trivial] Point charm-helpers-*.yaml at dev branch 2015-05-03 00:35:06 +02:00
charm-helpers-tests.yaml [trivial] Point charm-helpers-*.yaml at dev branch 2015-05-03 00:35:06 +02:00
config.yaml [coreycb,r=james-page] Add deploy from source support. 2015-04-16 21:07:38 +01:00
copyright Add missing copyright file 2012-12-07 08:39:53 +00:00
icon.svg Update icon.svg 2013-10-23 13:14:57 -07:00
Makefile auto Makefile test target (amulet): bump juju test timeout to 2700s (same value as the juju-deployer default). Also remove explicit test names, which will cause all +x files in ./tests to be executed (as bundletester does by default). 2015-04-16 21:32:07 +00:00
metadata.yaml Rebase and resync 2015-02-24 12:07:07 +00:00
README.md fix typo 2015-05-01 12:33:20 +02:00
revision added postgresql 2014-03-28 12:02:09 +01:00
setup.cfg turn down logging a bit 2013-10-19 20:54:13 +01:00

Overview

Neutron provides flexible software defined networking (SDN) for OpenStack.

This charm is designed to be used in conjunction with the rest of the OpenStack related charms in the charm store) to virtualized the network that Nova Compute instances plug into.

Its designed as a replacement for nova-network; however it does not yet support all of the features as nova-network (such as multihost) so may not be suitable for all.

Neutron supports a rich plugin/extension framework for propriety networking solutions and supports (in core) Nicira NVP, NEC, Cisco and others...

The Openstack charms currently only support the fully free OpenvSwitch plugin and implements the 'Provider Router with Private Networks' use case.

See the upstream Neutron documentation for more details.

Usage

In order to use Neutron with Openstack, you will need to deploy the nova-compute and nova-cloud-controller charms with the network-manager configuration set to 'Neutron':

nova-cloud-controller:
    network-manager: Neutron

This decision must be made prior to deploying Openstack with Juju as Neutron is deployed baked into these charms from install onwards:

juju deploy nova-compute
juju deploy --config config.yaml nova-cloud-controller
juju add-relation nova-compute nova-cloud-controller

The Neutron Gateway can then be added to the deploying:

juju deploy quantum-gateway
juju add-relation quantum-gateway mysql
juju add-relation quantum-gateway rabbitmq-server
juju add-relation quantum-gateway nova-cloud-controller

The gateway provides two key services; L3 network routing and DHCP services.

These are both required in a fully functional Neutron Openstack deployment.

See upstream Neutron multi extnet

Configuration Options

External Port Configuration

If the port to be used for external traffic is consistent accross all physical servers then is can be specified by simply setting ext-port to the nic id:

quantum-gateway:
    ext-port: eth2

However, if it varies between hosts then the mac addresses of the external nics for each host can be passed as a space seperated list:

quantum-gateway:
    ext-port: <MAC ext port host 1> <MAC ext port host 2> <MAC ext port host 3>

Multiple Floating Pools

If multiple floating pools are needed then an L3 agent (which corresponds to a quantum-gateway for the sake of this charm) is needed for each one. Each gateway needs to be deployed as a seperate service so that the external network id can be set differently for each gateway e.g.

juju deploy quantum-gateway quantum-gateway-extnet1
juju add-relation quantum-gateway-extnet1 mysql
juju add-relation quantum-gateway-extnet1 rabbitmq-server
juju add-relation quantum-gateway-extnet1 nova-cloud-controller
juju deploy quantum-gateway quantum-gateway-extnet2
juju add-relation quantum-gateway-extnet2 mysql
juju add-relation quantum-gateway-extnet2 rabbitmq-server
juju add-relation quantum-gateway-extnet2 nova-cloud-controller

Create extnet1 and extnet2 via neutron client and take a note of their ids

juju set quantum-gateway-extnet1 "run-internal-router=leader"
juju set quantum-gateway-extnet2 "run-internal-router=none"
juju set quantum-gateway-extnet1 "external-network-id=<extnet1 id>"
juju set quantum-gateway-extnet2 "external-network-id=<extnet2 id>"

Instance MTU

When using Open vSwitch plugin with GRE tunnels default MTU of 1500 can cause packet fragmentation due to GRE overhead. One solution is to increase the MTU on physical hosts and network equipment. When this is not possible or practical the charm's instance-mtu option can be used to reduce instance MTU via DHCP.

juju set quantum-gateway instance-mtu=1400

OpenStack upstream documentation recomments a MTU value of 1400: Openstack documentation

Note that this option was added in Havana and will be ignored in older releases.

Deploying from source

The minimum openstack-origin-git config required to deploy from source is:

openstack-origin-git: include-file://neutron-juno.yaml

neutron-juno.yaml
-----------------
repositories:
- {name: requirements,
   repository: 'git://github.com/openstack/requirements',
   branch: stable/juno}
- {name: neutron,
   repository: 'git://github.com/openstack/neutron',
   branch: stable/juno}

Note that there are only two 'name' values the charm knows about: 'requirements' and 'neutron'. These repositories must correspond to these 'name' values. Additionally, the requirements repository must be specified first and the neutron repository must be specified last. All other repostories are installed in the order in which they are specified.

The following is a full list of current tip repos (may not be up-to-date):

openstack-origin-git: include-file://neutron-master.yaml

neutron-master.yaml
-------------------
repositories:
- {name: requirements,
   repository: 'git://github.com/openstack/requirements',
   branch: master}
- {name: oslo-concurrency,
   repository: 'git://github.com/openstack/oslo.concurrency',
   branch: master}
- {name: oslo-config,
   repository: 'git://github.com/openstack/oslo.config',
   branch: master}
- {name: oslo-context,
   repository: 'git://github.com/openstack/oslo.context',
   branch: master}
- {name: oslo-db,
   repository: 'git://github.com/openstack/oslo.db',
   branch: master}
- {name: oslo-i18n,
   repository: 'git://github.com/openstack/oslo.i18n',
   branch: master}
- {name: oslo-messaging,
   repository: 'git://github.com/openstack/oslo.messaging',
   branch: master}
- {name: oslo-middleware,
   repository': 'git://github.com/openstack/oslo.middleware',
   branch: master}
- {name: oslo-rootwrap',
   repository: 'git://github.com/openstack/oslo.rootwrap',
   branch: master}
- {name: oslo-serialization,
   repository: 'git://github.com/openstack/oslo.serialization',
   branch: master}
- {name: oslo-utils,
   repository: 'git://github.com/openstack/oslo.utils',
   branch: master}
- {name: pbr,
   repository: 'git://github.com/openstack-dev/pbr',
   branch: master}
- {name: stevedore,
   repository: 'git://github.com/openstack/stevedore',
   branch: 'master'}
- {name: python-keystoneclient,
   repository: 'git://github.com/openstack/python-keystoneclient',
   branch: master}
- {name: python-neutronclient,
   repository: 'git://github.com/openstack/python-neutronclient',
   branch: master}
- {name: python-novaclient,
   repository': 'git://github.com/openstack/python-novaclient',
   branch: master}
- {name: keystonemiddleware,
   repository: 'git://github.com/openstack/keystonemiddleware',
   branch: master}
- {name: neutron-fwaas,
   repository': 'git://github.com/openstack/neutron-fwaas',
   branch: master}
- {name: neutron-lbaas,
   repository: 'git://github.com/openstack/neutron-lbaas',
   branch: master}
- {name: neutron-vpnaas,
   repository: 'git://github.com/openstack/neutron-vpnaas',
   branch: master}
- {name: neutron,
   repository: 'git://github.com/openstack/neutron',
   branch: master}

TODO

  • Provide more network configuration use cases.
  • Support VLAN in addition to GRE+OpenFlow for L2 separation.