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.
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.
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