OpenStack desde cero - Neutron (parte 2)

Publicado el 25 mayo 2015 por Dbigcloud @dbigcloud

Anteriormente en OpenStack desde cero, estuvimos viendo cada uno de los componentes de OpenStack, KeyStone, Glance, Nova y comenzamos con Neutron, realizando la instalación en el nodo controlador y junto con su integración con KeyStone. Esta semana vamos a finalizar la instalación de Neutron en el nodo de computo, el cual nos va a ofrecer Network as a service (NaaS) y crearemos las redes para inicializar nuestro entorno de OpenStack.

Todo lo que vayamos a hablar en este post, vamos a aplicarlo en el nodo de Computo.

Antes de realizar la instalación de los componentes de Neutron, necesitamos habilitar unos parámetros en el kernel, ya que este nodo realiza de Gateway para las máquinas virtuales, por lo que es necesario añadir lo siguiente en el fichero /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Ahora vamos a forzar para que el fichero sea leído nuevamente y el kernel detecte los cambios.

sysctl -p

Ahora ya podríamos comenzar con la instalación de Neutron, pero antes vamos a recordar con el siguiente esquema, como queda definida la comunicación que se realizada entre el servicio de administración de red y los nodos de una arquitectura de OpenStack.

Instalar Nuetron en el nodo de computo

Debemos instalar los componentes de Neutron en el nodo de computo, usando el repositorio de Ubuntu Cloud:

apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent

En el fichero /etc/neutron/neutron.conf debemos de comentar las entradas referentes a la base de datos ya que este nodo no necesita acceso a ella, posteriormente necesitamos configurar RabbitMQ, KeyStone y el plugin Modular Layer 2.

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

Lo siguiente es configurar el plugin Modular Layer 2 (ML2) para que use Open vSwitch (OVS), necesitamos añadir las siguientes líneas en el fichero /etc/neutron/plugins/ml2/ml2_conf.ini

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

[ml2_type_gre]
...
tunnel_id_ranges = 1:1000

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

[ovs]
...
local_ip = INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
enable_tunneling = True

[agent]
...
tunnel_types = gre

Una vez configurado, necesitamos reiniciar el servicio de OVS.

service openvswitch-switch restart

La instalación por defecto de Nova, viene configurada para usar Nova Network, por lo que necesitamos editar el fichero /etc/nova/nova.conf para habilitar Neutron y su API.

[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

Con esto ya tenemos configurado Neutron, ahora es necesario reiniciar los servicios para que los cambios estén habilitados:

service nova-compute restart
service neutron-plugin-openvswitch-agent restart

Creación de las redes de iniciales de OpenStack

Para que nuestro entorno sea operativo, necesitamos configurar las redes iniciales con las que iniciaremos OpenStack, Red externa y Red de tenants.

En el siguiente esquema podéis observar la comunicación entre dichas redes, usando direccionamientos de ejemplo:

Cómo configurar la red externa

La red externa nos va a proveer de acceso a internet a nuestras instancias, usando IP flotantes, en los ejemplos voy a usar el mismo direccionamiento que hemos visto en el esquema anterior, para ello debemos realizar lo siguiente:

Creación de la red

neutron net-create ext-net --router:external True \
  --provider:physical_network external --provider:network_type flat

Como cualquier red física, es necesario especificar el direccionamiento (creación de la subnet) que vamos a usar:

neutron subnet-create ext-net --name ext-subnet \
  --allocation-pool start=203.0.113.101,end=203.0.113.200 \
  --disable-dhcp --gateway 203.0.113.1 203.0.113.0/24

Creación de la red de tenants

Creación de la red:

neutron subnet-create tenant-net --name tenant-subnet \
  --gateway 192.168.1.1 192.168.1.0/24

Para poder usar esta red, necesitamos crear un router virtual:

neutron router-create tenant-router

Posteriormente añadir una interfaz para realizar la conexión con dicha red:

neutron router-interface-add tenant-router tenant-subnet

Y especificar la red externa que vimos anteriormente como Gateway:

neutron router-gateway-set tenant-router ext-net

Con ésto, ya podemos decir que tenemos un entorno de OpenStack funcional el cual podríamos administrar a través de línea de comandos, pero esto no es muy operativo, por ello OpenStack dispone de un dashboard llamado Horizon, el cual veremos en la próxima entrega.

Servicios de OpenStack

  • KeyStone

  • Glance

  • Nova

  • Neutron (Nodo controlador)