Revista Tecnología

OpenStack desde cero - Neutron (parte 1)

Publicado el 27 abril 2015 por Dbigcloud @dbigcloud

En semanas anteriores hemos hablado de tres de los componentes esenciales de OpenStack, el servicio de identidades, KeyStone, el servicio de imágenes, Glance y Nova el administrador/gestor de recursos, vimos como instalarlos e integrarlos con KeyStone. Esta semana, para continuar con el nodo de cómputo, vamos a ver el servicio encargado de la administración de red, llamado Neutron.

 

openstack neutron por DBigCloud

Tenemos que tener en cuenta que en versiones anteriores de OpenStack, podemos encontrarnos con Nova-network como el servicio de administración de red, pero desde Juno éste, es sustituido por Neutron, aunque podemos usarlo.

El componente de administración de red en OpenStack es uno de los más complejos debido a la cantidad de posibilidades de configuración que tenemos, por lo que no vamos a entrar en profundidad,  a demás he de reconocer que no soy un experto en este apartado. Ya hay libros escritos solo de este componente, como por ejemplo Learning OpenStack Networking (Neutron) de James Denton o bien la documentación oficial por si quereis profundizar.

Neutron nos permite hacer uso de su API a través de plugins y agentes capaces de conectar/ desconectar puertos, provisionar redes y subredes, etc, todo ello vinculado al proveedor que vayamos a usar en nuestra nube, como por ejemplo switches físicos o virtuales de Cisco, productos de NEC OpenFlow, Open vSwitch, Linux bridging, Ryu Network Operating System o VMware NSX.

Los tres principales componentes de neutron son:

  • Neutron L3 agent
  • DHCP agent
  • Neutron plugin agent.

En el siguiente esquema podemos ver de forma representativa la comunicación que se realizada entre el servicio de administración de red y los nodos de una arquitectura de OpenStack.

Neutron diagrama por DBigCloud

Hay que tener en cuenta que en el esquema anterior, se usa un nodo independiente para la administración de red, yo en los ejemplos que pondré y su instalación será en el nodo de computo.

Instalar Nova en el nodo Controlador

Como cualquier otro servicio de OpenStack, debemos crear la base de datos en el nodo controlador y realizar la integración con KeyStone, para ello realizamos lo siguiente:


Crear la base de datos para Neutron

mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
Integrar Neutron con KeyStone

Creación del usuario:

keystone user-create --name neutron --pass NEUTRON_PASS

Creación del rol:

keystone user-role-add --user neutron --tenant service --role admin

Creación del servicio:

keystone service-create --name neutron --type network \
  --description "OpenStack Networking"

Creación del endpoint:

keystone endpoint-create \
  --service-id $(keystone service-list | awk '/ network / {print $2}') \
  --publicurl http://controller:9696 \
  --adminurl http://controller:9696 \
  --internalurl http://controller:9696 \
  --region regionOne

A continuación debemos instalar los componentes de neutron en el nodo controlador, usando el repositorio de Ubuntu Cloud:

apt-get install neutron-server neutron-plugin-ml2 python-neutronclient

Si observáis el post anterior cuando hablamos de Nova, observaréis que estamos realizando las mismas operaciones.

El archivo de configuración de Neutron es /etc/nova/neutron.conf en el que debemos de configurar lo siguientes parámetros:

[database]
...
connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron

RabbitMQ

[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS

Autenticación con keystone

[DEFAULT]
...
auth_strategy = keystone
 
[keystone_authtoken]
...
auth_uri = http://controller:5000/v2.0
identity_uri = http://controller:35357
admin_tenant_name = service
admin_user = neutron
admin_password = NEUTRON_PASS

Vamos a habilitar los plugins Modular Layer 2 (ML2), servicio de router y overlapping IP addresses:

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

Por último vamos a hablitar la notificación con el nodo de Computo:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
nova_url = http://controller:8774/v2
nova_admin_auth_url = http://controller:35357/v2.0
nova_region_name = regionOne
nova_admin_username = nova
nova_admin_tenant_id = SERVICE_TENANT_ID
nova_admin_password = NOVA_PASS
 
Configuración del plugin Modular Layer 2 (ML2)

Para la creación de las redes virtuales el plugin ML2 usa el agente de Open vSwitch (OVS), por lo que es necesario configurar el fichero /etc/neutron/plugins/ml2/ml2_conf.ini existen diferentes tipos de configuración pudiendo usar Neutron con GRE segmentation o a través de vLAN, o incluso usando software de terceros como pueda ser VMware NSX, en estos ejemplo voy a ver como se configura a través de GRE sgmentation.

Para usar flat, el driver de red generic routing encapsulation (GRE) , redes de tenant GRE y el agente de OVS,  lo haremos con lo siguientes parámetros:

[ml2]
...
type_drivers = flat,gre
tenant_network_types = gre
mechanism_drivers = openvswitch

Ahora indicaremos el rango de túneles que tendremos disponibles para GRE:

[ml2_type_gre]
...
tunnel_id_ranges = 1:1000

Y por último habilitaremos las políticas de grupos, asignación de IP e iptable como firewall para OVS:

[securitygroup]
...
enable_security_group = True
enable_ipset = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

Por defecto en Nova aun viene configurado con Nova-Network, por lo que necesitamos editar el fichero de configuración /etc/nova/nova.conf y realizar los siguientes cambios para habilitar Neutron:

[DEFAULT]
...
network_api_class = nova.network.neutronv2.api.API
security_group_api = neutron
linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[neutron]
...
url = http://controller:9696
auth_strategy = keystone
admin_auth_url = http://controller:35357/v2.0
admin_tenant_name = service
admin_username = neutron
admin_password = NEUTRON_PASS

Para finalizar la configuración de Neutron en el nodo Controlador, crearemos las tablas de 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 juno" neutron

Con esto ya disponemos de nuestro nodo controlador preparado para usar Neutron como administrador de redes en OpenStack, en el siguiente post, veremos la instalación de Neutron en el nodo de computo e iniciaremos las redes las redes principales que haremos uso en nuestro entorno de OpenStack.

Servicios de OpenStack

  • KeyStone
  • Glance
  • Nova


Volver a la Portada de Logo Paperblog