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)