Instalación y configuración de OpenStack Mitaka sobre LXC en Ubuntu 14.04
Neutron, es junto a Cinder los dos servicios que no aislaremos en contenedores, ya que esto supondría tener que otorgar permisos a dichos contenedores que harían que el aislamiento de estos fuera inexistente. Por lo tanto, Neutro y Cinder serán instalados en el Host CONTROLLER.
En nova-controller, creamos la base de datos y el usuario para "neutron", y otorgamos los permisos necesarios.
root@nova-controller:~# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE neutron;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
Cargamos las credenciales del usuario Admin.
user@client:~$ source admin-openrc
Creamos el usuario "neutron", lo añadimos al rol "admin" y al projecto "service".
user@client:~$ openstack user create --domain default --password-prompt neutron
user@client:~$ openstack role add --project service --user neutron admin
Creamos la entidad de servicio para *neutron*.
user@client:~$ openstack service create --name neutron --description "OpenStack Networking" network
Creamos los endpoints para la API de neutron.
user@client:~$ openstack endpoint create --region RegionOne network public http://NEUTRON_INTERNAL_IP:9696
user@client:~$ openstack endpoint create --region RegionOne network internal http://NEUTRON_INTERNAL_IP:9696
user@client:~$ openstack endpoint create --region RegionOne network admin http://NEUTRON_INTERNAL_IP:9696
En el Host CONTROLLER, instalamos los siguientes paquetes:
root@CONTROLLER:~# apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent python-memcache
Editamos el fichero /etc/neutron/neutron.conf y añadimos las siguiente líneas.
root@CONTROLLER:~# emacs /etc/neutron/neutron.conf
[DEFAULT]
auth_strategy=keystone
core_plugin=ml2
service_plugins = router
allow_overlapping_ips=True
notify_nova_on_port_status_changes=True
notify_nova_on_port_data_changes=True
rpc_backend=rabbit
[agent]
root_helper=sudo /usr/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
[database]
connection=mysql+pymysql://neutron:NEUTRON_DBPASS@NOVA_CONTROLLER_INTERNAL_IP/neutron
[keystone_authtoken]
auth_uri=http://KEYSTONE_INTERNAL_IP:5000
auth_url=http://KEYSTONE_INTERNAL_IP:35357
memcached_servers = NOVA_CONTROLLER_INTERNAL_IP:11211
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=nova
password=NOVA_PASS
[nova]
auth_url=http://KEYSTONE_INTERNAL_IP:35357
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS
[oslo_messaging_rabbit]
rabbit_host=NOVA_CONTROLLER_INTERNAL_IP
rabbit_userid=openstack
rabbit_password=RABBIT_PASS
El plug-in ML2 es el encargado de crear la infraestructura de red virtual para las instancias, usando Linux bridge. Para configurar correctamente este plug-in, debemos editar el fichero /etc/neutron/plugins/ml2/ml2_conf.ini.
root@CONTROLLER:~# emacs /etc/neutron/plugins/ml2/ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = True
Configuramos el agente de Linux bridge para el plug-in ml2.
root@CONTROLLER:~# emacs /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[DEFAULT]
[linux_bridge]
physical_interface_mappings = provider:br0
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = true
local_ip = NEUTRON_INTERNAL_IP
l2_population = True
Para poder hacer uso de uso de routing y NAT en nuestras redes virtuales, debemos configurar el agente layer-3.
root@CONTROLLER:~# emacs /etc/neutron/l3_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =
Nuestras redes virtuales deben contar también con un servidor DHCP.
root@CONTROLLER:~# emacs /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
Editamos el fichero /etc/neutron/metadata_agent.ini para que apunte al servidor de metadatos en nova-controller.
root@CONTROLLER:~# emacs /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_ip = NOVA_CONTROLLER_INTERNAL_IP
metadata_proxy_shared_secret = METADATA_SECRET
Editamos el fichero /etc/nova/nova.conf para añadir los nuevos cambios realizados en el contenedor nova-controller.
root@nova-controller:~# emacs /etc/nova/nova.conf
...
[neutron]
url = http://HOST_CONTROLLER_INTERNAL_IP:9696
auth_url = http://KEYSTONE_INTERNAL_IP:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
Poblamos la base de datos.
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
Reiniciamos los servicios para actualizar los cambios.
root@nova-controller:~# service nova-api restart
root@CONTROLLER:~# service neutron-server restart
root@CONTROLLER:~# service neutron-linuxbridge-agent restart
root@CONTROLLER:~# service neutron-dhcp-agent restart
root@CONTROLLER:~# service neutron-metadata-agent restart
root@CONTROLLER:~# service neutron-l3-agent restart