Laboratorios Virtuales: Una Solución Con Infraestructura De Virtualización

   EMBED

Share

Preview only show first 6 pages with water mark for full document please download

Transcript

Escola Tècnica Superior d’Enginyeria I nformàtica Universitat Politècnica de València Laboratorios virtuales: una solución con infraestructura de virtualización Proyecto Final de Carrera Ingeniería Informática Autor: Antonio Salmerón Bermúdez Director: Jose Ramón García Escrivá 27-09-2013 Laboratorios virtuales: una solución con infraestructura de virtualización 2 Resumen El objetivo de este proyecto es estudiar la viabilidad de una pequeña infraestructura de computación bajo demanda usando software libre, estudiando los servicios que puede ofrecer y compararlos con otras alternativas disponibles. Tras su implementación con OpenStack se analizan los resultados obtenidos y se proponen posibles mejoras. Palabras clave: computación remota, virtualización, nube, OpenStack. 3 Laboratorios virtuales: una solución con infraestructura de virtualización 4 Tabla de contenidos 1. Introducción ................................................................................. 7 Presentación ........................................................................................................ 7 Características del problema .............................................................................. 7 Aproximaciones .................................................................................................. 8 Propósito ............................................................................................................. 8 2. Estado del arte.............................................................................. 9 Software de computación remota ....................................................................... 9 OpenStack ......................................................................................................... 10 Otras tecnologías................................................................................................ 11 3. Planteamiento y objetivos ........................................................... 13 Objetivo ............................................................................................................. 13 Arquitectura ...................................................................................................... 13 4. Memoria y metodología .............................................................. 15 DevStack ............................................................................................................ 15 OpenStack desde repositorio ............................................................................ 16 Modificación de la arquitectura de red ............................................................. 16 Redes virtuales con OpenVSwitch .................................................................... 18 Conexión con IP fija .......................................................................................... 19 Limitaciones del hardware ............................................................................... 22 5. Presentación de resultados ........................................................ 24 6. Mejoras propuestas .................................................................... 26 7. Conclusiones .............................................................................. 27 8. Referencias bibliográficas .......................................................... 28 5 Laboratorios virtuales: una solución con infraestructura de virtualización 6 1. Introducción Presentación Con el auge de internet, estamos viviendo un crecimiento enorme en cuanto al trabajo remoto en el ámbito de la informática. Este tipo de servicios permite trabajar con software especializado, desde cualquier lugar y en cualquier momento, suponiendo una gran facilidad para los usuarios. Sin embargo, en el ámbito informático universitario no se ofrecen estos servicios tanto como cabría esperar, por diversos motivos técnicos y de recursos. Este proyecto pretende afrontar este problema e implementar una solución para los estudiantes de la Universidad Politécnica de Valencia (UPV). Las ventajas del trabajo remoto son muchas. Permiten una gran flexibilidad de horarios para estudiantes con empleo. También permiten el acceso a software específico sin necesidad de desplazarse hasta el campus, propicio para alumnos geográficamente distantes. Además, supone una experiencia similar a la que se puede dar en un trabajo real, donde se suelen contratar servidores con alta disponibilidad externos a la empresa. Características del problema Para ofrecer una situación lo más cercana a la del entorno laboral, deben estar disponibles una serie de facilidades: ● Disponibilidad ininterrumpida: El acceso a las máquinas deberá ser lo más constante posible, sin restricciones de horario, y permitiendo que los servicios ofrecidos por los usuarios estén disponibles en todo momento. ● Acceso como administrador: Los usuarios deberán tener acceso a la gestión avanzada del sistema para poder realizar su trabajo, con permisos para instalar software y modificar parámetros del sistema operativo. ● Soporte a múltiples usuarios: Deberá haber un soporte para usuarios concurrentes independientes, de forma que varios usuarios aislados puedan realizar su trabajo sin afectar en ningún momento al trabajo de los demás. Opcionalmente, se ofrecerán también ciertas facilidades como monitorización de la red, almacenamiento compartido, etcétera. 7 Laboratorios virtuales: una solución con infraestructura de virtualización Aproximaciones Entre las diversas opciones que existen para este problema, destacamos: ● Un equipo por alumno: Esta solución, en principio ideal, resulta completamente impracticable por falta de recursos, además de suponer un desperdicio enorme de los mismos durante el tiempo en el que el alumno no lo está utilizando. Un caso cada vez más interesante es que cada alumno aporte su propio equipo portátil. ● Una imagen local por alumno: Esta solución, implementada en varios laboratorios de la UPV, implica una instalación de sistema operativo independiente para cada usuario. Sin embargo, requiere de la presencia física en el aula a la hora de arrancar el equipo para seleccionar dicha imagen, entre otras limitaciones. ● Una imagen extraíble por alumno: En este caso, el alumno dispondría de una imagen modificable en un medio de almacenamiento extraíble, capaz de ser montado en cualquier equipo. Supone total control para el alumno, pero no permite ofrecer servicios a través de la red. ● Una imagen virtual en red por alumno: Si se implementa correctamente, esta solución ofrece todas las ventajas de un equipo por alumno por una fracción de su coste. Desde un equipo en red puede acceder y controlar su imagen que se encuentra funcionando en un servidor remoto. ● Una imagen virtual por alumno en un cluster: Ofrece una solución que, además de tener todas las ventajas anteriormente descritas, es escalable y ofrece una mayor fiabilidad ante fallos. Propósito Teniendo esto en cuenta, el propósito del proyecto será ofrecer un soporte para el uso bajo demanda de máquinas virtuales en un cluster de equipos. Además se compararán los resultados con lo que hubiéramos obtenido con otras alternativas y se analizarán las capacidades que es capaz de ofrecer a los alumnos. Asimismo se realizarán las modificaciones que se consideren necesarias al software para cumplir con nuestros objetivos, aprovechando las ventajas del uso de software libre. 8 2. Estado del arte Software de computación remota El propósito principal de cualquier nube de computación es ofrecer un servicio a través de internet. Para ello, se ofrece una red de computación de alta disponibilidad con acceso a través de la red y acceso libre bajo demanda. Dependiendo del tipo de servicio que se quiera ofrecer, se han clasificado estos sistemas en tres capas principales 1 : ● Software como servicio (Sofware as a Service, SaaS): La capa más alta, ofrece software directamente a los usuarios finales. Los usuarios sólo tienen que abrir su navegador o programa cliente y conectarse a la nube para usar sus servicios. ● Plataforma como servicio (Platform as a Service, PaaS): La capa intermedia, ofrece una infraestructura de trabajo con facilidades a los desarrolladores. Típicamente se ofrece una plataforma informática con un sistema operativo, entorno de desarrollo, base de datos y servidor web ya instalados. ● Infraestructura como servicio (Infrastructure as a Service, IaaS): La capa inferior, ofrece una infraestructura básica de trabajo dando acceso a máquinas (típicamente máquinas virtuales) y a una serie de herramientas relacionadas como imágenes virtuales, espacio en disco, balanceadores de carga y VLANS. Al concentrarse este proyecto en esta última categoría (IaaS), se procede a comparar diversas tecnologías que proporcionan este servicio. 9 Laboratorios virtuales: una solución con infraestructura de virtualización OpenStack A día de hoy, hablar de software de computación en la nube supone hablar de OpenStack 2 . OpenStack es un proyecto de software libre para proporcionar computación en la nube de tipo IaaS. Nacido de una iniciativa conjunta de Rackspace y NASA en julio de 2010, su popularidad y uso desde su lanzamiento se ha disparado. Más de 200 compañías, incluyendo a IBM, Cisco, Canonical o Red Hat 3 apoyan el proyecto en la actualidad. Este ascenso de debe, entre otras cosas, a la licencia Apache 4 en la que de distribuye. OpenStack es un software completamente libre, con una licencia más permisiva que la licencia GPL 5 (el estándar de facto del software libre). Esto implica que cualquiera puede notificar bugs, desarrollar complementos o incluso programas enteros que utilicen su interfaz de programación de aplicaciones (API, por sus siglas en inglés). Además, OpenStack provee de compatibilidad con la API de Amazon EC2, lo cual facilita el proceso de portar software desde esta popular plataforma. Otro de sus grandes puntos a favor es su modularidad. OpenStack está formado por diferentes componentes. Estos componentes pueden ser instalados en cualquier máquina de la nube e incluso movidos de una máquina a otra sin problemas. Algunos de ellos pueden ser incluso sustituidos por otras alternativas, siempre que utilicen una API soportada. ● OpenStack Compute (alias Nova), es el servicio de control de computación. A través de Nova se controlan las diversas herramientas de virtualización en uso por la nube. Se utiliza tanto en las máquinas de cómputo como en las máquinas de control. ● OpenStackObject Storage (alias Swift) es el servicio de almacenamiento redundante. Permite almacenar o recuperar ficheros (pero no montar directorios). Objetos y ficheros son distribuidos y replicados automáticamente a través de la red a los nodos de almacenamiento. ● OpenStack Block Storage (alias Cinder) es el servicio de almacenamiento de bloques. Permite la persistencia de los datos entre ejecuciones de la instancia. ● OpenStackNetworking (alias Quantum) es el servicio de control de red. Además de controlar la red física de las máquinas, permite a los usuarios crear redes y con ellas conectar instancias entre sí. ● OpenStackDashboard (alias Horizon) es la interfaz gráfica web de todos los componentes de OpenStack. A través de Horizon se pueden realizar la mayoría de operaciones de control, como asignar direcciones IP o lanzar una instancia. ● OpenStackIdentityService (alias Keystone) es la plataforma de autentificación y autorización que usan todos los componentes de OpenStack. También ofrece un catálogo de los servicios disponibles en uso en una nube. 10 ● OpenStackImageService (alias Glance) es el servicio de gestión de imágenes de disco. Ofrece un catálogo y repositorio de imágenes disponibles para el uso en computación con Nova. El uso y configuración de los diversos módulos hace de OpenStack una opción muy versátil, aplicable en multitud de situaciones diferentes. Otras tecnologías Además de OpenStack, hoy en día hay muchas tecnologías disponibles para el despliegue de una nube de computación. En este apartado compararemos algunos proyectos y tecnologías disponibles como software libre que complementan o presentan una alternativa a OpenStack. • DevStack 6 : Se trata de un script bash de despliegue de Openstack en Ubuntu o Fedora de forma desatendida. Utiliza el software de control de versiones git para acceder al repositorio oficial y descargar la última versión estable. Entre sus opciones podemos ver el soporte a XenServer, OpenVZ y LibVirt. • StackOps 7 : Distribución Linux especializada en OpenStack, basada en Ubuntu. La facilidad que ofrece se trata de una interfaz web (instalada localmente) que permite una instalación simplificada paso a paso. No ofrece ninguna otra ventaja ya que tras el despliegue queda una distribución Ubuntu con Openstack que se debe manejar usando Horizon. La documentación no es muy específica y al tratarse de la versión “Community” (en lugar de la “Enterprise”, la versión comercial de pago) no hay mucho soporte disponible. • CloudStack 8 : Al igual que OpenStack, CloudStack es un software de gestión con soporte para hipervisores como KVM y XenServer para la virtualización, soporte para la API de AWS y soporte para Swift (el almacenamiento de Objetos de OpenStack). Tras convertirlo a software libre, recientemente fue donado a Apache para evitar que el proyecto terminara. • RockClusters 9 : Distribución Linux para clusters de computadores de alto rendimiento. Basada en CentOS, es muy popular por su versatilidad, su soporte a diferentes servicios y su facilidad de ampliación. Es relativamente fácil de usar dado que es un software para investigadores y no para informáticos, pero al ser tan concreto para el cálculo no resulta apropiado para otros servicios de los que puede disponer una nube. • Unicore 10 : Se trata de un Middleware en Java para Grid Computing. Al estar desarrollado en Java permite que los equipos en la red sean heterogéneos, pudiendo usar sistemas Windows, Linux o Mac. La herramienta de manejo está basada en Eclipse aunque también dispone de un cliente para línea de comandos. 11 Laboratorios virtuales: una solución con infraestructura de virtualización • Abiquo 11 : Es un toolkit basado en la web desarrollado en Java. Soporta una gran variedad de hipervisores y sistemas de almacenamiento. Dispone de una versión de pago (Enterprise Edition) y una versión Libre (CommunityEdition). Actualmente la versión libre no está disponible para descarga sino sólo el código fuente. StackOps DevStack CloudStack RockClusters Unicore Abiquo Soft. Libre Sí (*) Sí Sí Sí Sí Sí (*) OpenStack Sí Sí No No No No Cloud- oriented Sí Sí Sí No No Sí (*) Disponen de versión Enterprise y versión Community 12 3. Planteamiento y objetivos Objetivo El objetivo final de este proyecto es ofrecer a los usuarios una infraestructura para que puedan administrar y ejecutar máquinas virtuales en cualquier momento a través de internet. Para ello se ofrece un soporte para el uso bajo demanda de máquinas virtuales en un cluster de equipos. Como se ha mencionado en el apartado anterior, para ello se utilizará OpenStack por su alto soporte y su flexibilidad. A partir de los recursos que nos ofrece OpenStack, podemos concretar la funcionalidad a ofrecer. Se dará acceso a la nube a múltiples usuarios, que no tendrán en ningún momento acceso directo al hardware. Los usuarios podrán lanzar instancias a través de la interfaz web y acceder a ellas remotamente. Además se proporcionará unas imágenes virtuales predefinidas como plantilla y puntos de partida de esas instancias, las cuales podrán guardar datos y el estado de la instancia en disco. Arquitectura En la evaluación inicial se decidió optar por una infraestructura de red de cuatro nodos, cada uno conectados a una red compartida. Las cuatro máquinas tienen un procesador de 4 núcleos y 64 bits y de 4 a 8 GB de memoria RAM. La división de los servicios será la siguiente: Una máquina de nodo controlador, para los servicios de identificación, interfaz y gestión de recursos, a la que llamaremos “Uno”. Dos máquinas de nodos de computación, para correr las instancias, a las que llamaremos “Dos” y “Tres”. Finalmente, una máquina de nodo de almacenamiento, para guardar las imágenes virtuales y otros objetos, a la que llamaremos “Cuatro”. 13 Laboratorios virtuales: una solución con infraestructura de virtualización Los nodos se conectan entre ellos a un switch Ethernet, que a su vez está conectado a una máquina proxy. Esta máquina es la que utiliza el redireccionamiento de puertos para servir de pasarela ssh a cada uno de los nodos individuales. La Figura 1 muestra esta arquitectura de red. Figura 1: Arquitectura inicial Fuente: Elaboración propia 14 4. Memoria y metodología DevStack Se escoge DevStack para realizar la instalación y despliegue al estar recomendado tanto en la web de OpenStack como en la de Ubuntu. DevStack es un script de ejecución bash que, usando el software de control de versiones Git 12 , descarga y compila la última versión de OpenStack. Tras editar un fichero de configuración con las variables apropiadas, el proceso de instalación y despliegue está completamente automatizado de forma desatendida. Se realiza pues un primer despliegue en una carpeta local. En el momento de utilizar Keystone para identificarse como usuario se encuentra el primer problema. Usando el token de servicio para ignorar la identificación se crean nuevos usuarios y roles e indicando la ubicación en red y los servicios de las otras máquinas. Se configura a su vez Horizon, el panel de control web de OpenStack y la herramienta principal que usarán los usuarios. Sin embargo, al no estar funcionando correctamente la identificación, no se puede acceder al mismo y por tanto usar el software. El problema que se encuentra es que cuando la máquina en la que se ejecuta DevStack se reinicia no todos los servicios de OpenStack se ponen en marcha. Esto es una decisión de diseño por parte de DevStack, que se considera una herramienta de pruebas y no una instalación permanente. La solución es ejecutar rejoin-stack.sh de la carpeta de instalación, para que todos los servicios se comprueben y se lancen aquellos que no se encuentren en ejecución. Sin embargo Devstack en su versión actual tiene un error en ese script, que se queda en intentando montar la partición loopback de Swift y fallando en un bucle infinito y por tanto no puede reiniciarse correctamente. Tras este problema, se intenta una desinstalación de DevStack, deteniendo los servicios y eliminando los ficheros de la carpeta de instalación. Sin embargo, la instalación había dejado ficheros de configuración por todo el sistema de ficheros y modificado los ficheros de otros servicios secundarios, por lo que decidimos optar por una estrategia conservadora y formatear las máquinas con un Ubuntu Server desde cero. 15 Laboratorios virtuales: una solución con infraestructura de virtualización OpenStack desde repositorio A partir de la habituación que se consigue usando la instalación creada por DevStack, seguimos el proceso de instalación oficial de OpenStack 13 para esta versión. Se comienza por el nodo controlador “Uno” ya que es el más complejo y el que más servicios requiere. Tal y como se muestra en la documentación, se escoge MySQL 14 como proveedor para las bases de datos y se crean las tablas a usar por OpenStack. También se instala RabbitMQ 15 como manejador de colas. Tras configurar estos servicios secundarios, se instala Keystone, el servicio de identificación, y se configura adecuadamente. También se ejecuta un script 16 de la documentación para introducir los usuarios, servicios y puntos de acceso en la base de datos de la autentificación. Tras esto se realiza la instalación y configuración de Glance, siguiendo la misma guía. Como comprobación se descarga una pequeña imagen ISO de CirrOS (una distribución Linux ligera) y se añade a Glance, el gestor de imágenes virtuales. Con un pequeño comando podemos comprobar que se ha subido con éxito y está disponible para todos los usuarios. En el siguiente paso se instala y configuran Nova y Cinder, los servicios de cómputo y almacenamiento persistente del estado de las instancias. Mientras tanto, se procede a la instalación de Nova y Quantum en los nodos “Dos”, “Tres” y “Cuatro”, y se dejan listos para recibir las peticiones del nodo controlador “Uno”. Tras esto se procede a la instalación y configuración de la red de “Uno”. Sin embargo, al utilizar una única interfaz de red, surgen problemas con la configuración de la red privada virtual (VLAN, por sus siglas en inglés), configurada usando OpenVSwitch 17 . Al crear un puente y puerto sobre la interfaz de red en uso, se pierde la conexión SSH que se estaba usando para realizar la configuración. Tras documentarse al respecto de este problema, se decide que la máquina está incomunicada sin remedio. Para solucionarlo se hace uso del teclado físico del equipo y se desinstala OpenVSwitch mientras se barajan otras alternativas de conexión. Modificación de la arquitectura de red Tras una larga búsqueda de documentación al respecto, se determina que es demasiado complejo intentar mantener la arquitectura de red inicial. El acceso SSH y la comunicación entre máquinas vía VLAN no es posible por la misma interfaz de red. Por lo tanto, se añade un nuevo switch a los ordenadores internos, quedando por tanto una red (192.168.100.0) para la gestión directa y acceso a internet, y otra red (192.168.200.0) para la comunicación interna. Además, debido a un problema inesperado de hardware, hubo que retirar la máquina “Cuatro”, quedando la arquitectura final como se muestra en la Figura 2. 16 Figura 2: Arquitectura de red modificada Fuente: Elaboración propia La nueva red interna es configurada adecuadamente en el fichero de configuración “/etc/network/interfaces”, tal que la máscara de red se procese por la nueva interfaz ethernet “eth1”. Tras este cambio se reconfiguran los servicios de las máquinas para que usen las direcciones IP de la red interna. Esto produce un error que no se logra identificar en la máquina “Uno”, al que se le aplica una reinstalación de los servicios. Más tarde se determina que el error se produjo al intentar sincronizar los cambios con la base de datos sin ejecutar como super-usuario (el usuario administrador del sistema Linux). Aunque la mayoría de programas de OpenStack utilizan variables de entorno para realizar la identificación a través de Keystone, algunos de los programas de gestión utilizan el super-usuario para aplicar los cambios necesarios directamente sobre la base de datos. Tras esto surge un nuevo problema, esta vez con Horizon. Al intentar entrar en la interfaz web, Apache 18 devuelve una página de error con una excepción Python 19 . Se logra localizar el error en una orden import de una de las bibliotecas de Python. Tras una búsqueda de casos similares en internet, se determina que se trata de un problema de la versión más actual de Django 20 . Se desinstala el paquete python-django y reinicia el servicio sin más contratiempos, pasando Horizon a utilizar la versión de Django específica instalada al instalar el propio Horizon. 17 Laboratorios virtuales: una solución con infraestructura de virtualización Figura 3: Página inicial de Horizon Fuente: Elaboración propia Redes virtuales con OpenVSwitch Tras tener todos los componentes instalados y configurados correctamente en los nodos, se pasa a intentar que se comuniquen. Gracias a la nueva arquitectura de red se puede seguir con la guía de la documentación oficial. Para ello se instala de nuevo el plugin de OpenVSwitch en los nodos y se configura un puerto virtual en las interfaces eth1, las interfaces de la red interna. Además, se añade una interfaz de red virtual “br- ex” que sustituye a eth0 en “Uno”. Conectando a “Dos” y usando ssh para conectarse por la red interna a “Uno” seguimos con la guía. La interfaz virtual “br-ex” se redirige a “eth0” mediante tres entradas en la tabla iptables (la tabla de enrutamiento de Linux). Sin embargo tras muchas pruebas e intentos, esta redirección no logra funcionar y por lo tanto “Uno” pierde su conexión de red a internet. Tras una búsqueda intensiva de problemas en la configuración o logs, se determina que el problema es el soporte para VLANS del driver y/o la tarjeta de red 21 . 18 Conexión con IP fija Tras los problemas encontrados usando OpenStack, se intenta una aproximación más directa aunque más inusual: configuración directa con direcciones IP estáticas, siguiendo de nuevo la documentación oficial al respecto 22 . Tras unos cuantos intentos fallidos de comunicación, finalmente se encuentra una referencia al paquete “openstack-conductor” como intermediario entre la base de datos y “openstack-compute”. Tras instalarlo, una simple ejecución de “nova-manage service- list” muestra un servicio nova-compute disponible en la máquina “Dos”. Tras un reinicio de la máquina “Tres”, ésta también se muestra disponible. Tras terminar la configuración, se intenta comprobar la conexión mandando ejecutar una instancia desde Horizon 23 . Sin embargo, al intentarlo la instancia se coloca en un estado de error. Tras revisar el procedimiento que se lleva a cabo para ejecutar una instancia y revisar los logs de los servicios que se utilizan, se determina que se trata de un error del sistema de paso de mensajes RabbitMQ 24 . Esto se resuelve finalmente habilitando el bridge “br-int” y reiniciando el servicio de OpenVSwitch en las máquinas “Dos” y “Tres”. Al no usar un puerto virtual, OpenVSwitch puede comunicarse por la red sin usar en exclusiva la tarjeta de red. Finalmente se tiene una nube funcional que ejecuta las imágenes sin problemas, conectadas usando túneles GRE, sin un nodo controlador de red. Figura 4: Estado de las instancias en el Dashboard Fuente: Elaboración propia 19 Laboratorios virtuales: una solución con infraestructura de virtualización El siguiente paso es conectarse a las instancias en ejecución. Para ello se utiliza una redirección de puertos adicional en el servidor proxy, que se encamina al puerto 6080 de la máquina controlador, “Uno”. Editando la URL de acceso en los nodos de computación a la url del proxy, se integra el acceso VNC en el dashboard. De esta forma se logra acceso a las instancias en ejecución, a pesar de que las mismas no adquieran conexión. A continuación se intenta resolver este problema y otorgar una conexión SSH. Figura 5: Acceso VNC a una instancia a través del Dashboard Fuente: Elaboración propia En este momento se encuentra con un problema de ip-netns, el servicio de namespaces de Linux. Un bug 25 impide que, al eliminar redes y routers virtuales en Quantum, éstos se eliminen del servicio de namespaces de Linux y por tanto que el direccionamiento en redes virtuales (y, a su vez, entre máquinas virtuales) no funcione. Sin embargo, el uso de este servicio es opcional 26 , ya que sólo está disponible desde Ubuntu 12.04 en adelante. Por lo tanto se procede a desactivar este servicio y reiniciar las máquinas. Tras esto se encuentra con otro problema más. Los servicios no se encuentran en sus puertos y no hay forma de alcanzarlos. Resulta ser un problema de OpenVSwitch: al reiniciar las máquinas se aplica una actualización del kernel que impide el correcto funcionamiento del mismo. Se instala el módulo necesario para corregir este problema 27 (openvswitch-datapath-source) y reiniciamos. Sin embargo, el problema persiste. 20 Finalmente se determina que la actualización de kernel ha actualizado a su vez ficheros de configuración críticos no compatibles con el software instalado en las máquinas. Esto implica por tanto un downgrade a la versión anterior del kernel no solucionaría el problema tampoco. Se procede pues a formatear las máquinas de nuevo y repetir la instalación hasta donde se había llegado. Siendo nuestro problema principal la conexión a red, se decide cambiar el nodo “Dos” de nodo de cálculo a nodo de red para una mayor independencia de servicios y poder analizar mejor los problemas de conexión. Se instala en el nodo “Dos” por tanto los servicios dhcp-agent y l3-agent, los cuales dan direcciones IP a las máquinas virtuales y conexión a internet respectivamente. Sin embargo, al configurar los puertos virtuales perdemos la conexión a las máquinas “Uno” y “Tres”, dejando la máquina de servicios de red aislada de la nube. Finalmente, tras notar que la conexión a internet no se había perdido, determinamos que es un problema de enrutamiento. Las conexiones a los nodos “Uno” y “Dos” no pasan a la red ya que se enrutan hacia la red virtual. Eliminamos los puertos virtuales que se habían creado con la herramienta de OpenVSwitch para consola ovs- vsctl y se solventa el problema. Figura 6: Topología de la red como se muestra en el Dashboard Fuente: Elaboración propia 21 Laboratorios virtuales: una solución con infraestructura de virtualización Tras documentarse mejor sobre el funcionamiento del propio dhcp-agent, se eliminan las direcciones IP de la red interna 192.168.200.0/24 de forma que la máquina host pueda aceptar las peticiones dhcp enviadas a las máquinas virtuales. A través del servicio ip-netns y el namespace virtual se consigue enviar un ping a la instancia en ejecución y recibir respuesta. También se prueba a acceder mediante SSH y también se consigue con éxito. Las instancias reciben con éxito las direcciones IP asignadas por dhcp-agent y son capaces de comunicarse entre sí (estando en la misma red virtual). Limitaciones del hardware Finalmente se determina que uno de los propósitos fundamentales del proyecto, ofrecer máquinas virtuales con conectividad a internet, resulta imposible según el hardware disponible. Como se ha mostrado en anteriores diagramas, disponemos de dos tarjetas de red por nodo y dos redes en total. Según esto, se ha intentado aplicar la siguiente arquitectura: Figura 7: Arquitectura de red simple Fuente: http://docs.openstack.org/grizzly/basic-install/apt/content/basic-install_architecture.html Sin embargo, esto no ha sido posible ya que no se ha podido compartir la conexión de datos y la conexión de control en la misma interfaz, habiéndose intentado mediante túneles GRE y VLANs. El problema de conectividad se puede reducir a esa simple cuestión: compartir la línea de control y la línea de datos en una misma tarjeta de red. 22 Las soluciones propuestas por OpenStack para este problema pasan por usar OpenVSwitch para tomar control de la interfaz de red y separar los tráficos mediante identificadores GRE o VLAN, permitiendo a OpenVSwitch redirigir todo el tráfico según sus iptables. Como ya se ha mencionado anteriormente, esto no es una opción disponible para nuestras máquinas, que no soportan VLAN y redirección de tráfico según identificadores GRE. Otros plugins de control de red, como LinuxBridges, son mucho más limitados ya que no ofrecen túneles GRE y su documentación de uso con OpenStack es muy escasa. Tras un infructuoso intento de utilizar LinuxBridges, se pierde la conexión entre los nodos. Se restaura pues el plugin de red a OpenVSwitch y se restaura la conexión a su estado anterior. Se determina pues que OpenVSwitch sigue siendo la mejor alternativa de la que se dispone actualmente y que el estado actual del proyecto es el más avanzado que se puede conseguir con el hardware disponible. 23 Laboratorios virtuales: una solución con infraestructura de virtualización 5. Presentación de resultados En la iteración final del proyecto se dispone de tres máquinas conectadas entre sí. Una de ellas actúa de controlador y proporciona la interfaz web, otra proporciona la conexión a las máquinas virtuales y la tercera es la máquina de cómputo. Se ofrece pues una plataforma para el trabajo remoto, disponible ininterrumpidamente y sin restricciones de horario, abierta al uso bajo demanda. A través de la interfaz web se ofrecen diversas opciones de potencia de cálculo y tamaño de memoria a elegir dependiendo de la tarea a realizar. Además, se ofrecen diversas imágenes de arranque diferentes según la preferencia de los usuarios: CirrOS 0.3.1, Ubuntu 12.04, Fedora 19. Figura 8: Imágenes virtuales e instantáneas de instancias disponibles según el Dashboard Fuente: Elaboración propia El acceso a las máquinas virtuales puede hacerse mediante la propia interfaz web, vía VNC, o mediante un túnel SSH desde la máquina “Dos”. Cada usuario tiene acceso a todas las instancias en ejecución sobre las que tenga permiso, y en todas ellas tendrá acceso administrador para poder llevar a cabo las tareas de configuración que necesite. El acceso es concurrente, de forma que varios usuarios pueden trabajar en varias instancias al mismo tiempo sin interferirse entre ellos. A pesar de no haberse realizado una prueba de carga exhaustiva, el sistema soporta al menos cuatro máquinas virtuales pequeñas sin presentar problemas ni congestión de tráfico. 24 Figura 9: Diálogo para lanzar una instancia desde el Dashboard Fuente: Elaboración propia En cuanto a la conectividad a internet, este aspecto limita mucho el aspecto práctico del sistema. Mientras que en nuestra propuesta inicial se pretendía que los usuarios pudieran arrancar y detener a su gusto servicios como páginas web, descarga de ficheros o servidores de correo, en la práctica nada de esto es realizable. Se dispone pues de una “caja cerrada”, que permite la entrada de usuarios para que realicen las tareas que necesiten y vuelvan a salir. Esto se puede aplicar a cálculos o compilaciones en los que se pueda introducir los ficheros mediante SSH, realizar la computación y retirar los resultados mediante SSH de nuevo. Mediante la creación de imágenes virtuales personalizadas se puede optimizar este tipo de servicio de computación desatendida. 25 Laboratorios virtuales: una solución con infraestructura de virtualización 6. Mejoras propuestas La solución propuesta para conseguir la conectividad se trata de añadir una tercera interfaz de red al nodo de red y conectarlo al nodo de computación, como se muestra en el siguiente diagrama: Figura 10: Arquitectura de red con redes independientes Fuente: http://docs.openstack.org/grizzly/openstack-network/admin/content/app_demo_single_router.html De implementarse esta arquitectura, los problemas de red se solventarían ya que cada una de las redes estaría perfectamente separada de las demás mediante tarjetas de red independientes. Se seguiría aplicando el modelo DHCP para las máquinas virtuales, permitiendo una escalabilidad sin más problemas que replicar los nodos de cálculo. El punto débil de esta arquitectura queda en el nodo de red, del cual en caso de perder una de sus conexiones dejaría al sistema prácticamente inutilizable. Éste nodo también es replicable, aunque al necesitar una tarjeta de red más y no proporcionar potencia de cómputo resulta muy caro como simple salvaguarda. 26 7. Conclusiones La experiencia que se ha podido sacar de este proyecto es que crear y mantener una infraestructura de este tipo no es algo trivial. A pesar de la abrumadora cantidad de soporte que tiene OpenStack en la red, cada caso es esencialmente diferente ya que cada sistema tiene su propia arquitectura de red, su propia división de los servicios por máquinas, y su uso de diferentes plugins y tecnologías subyacentes. Dicho esto, cada error ha sido una oportunidad más de aprender sobre el funcionamiento y la relación que hay entre los diferentes módulos de OpenStack. También se debe destacar que, haciendo uso del propósito del proyecto, este trabajo se ha llevado a cabo en gran parte a distancia, a través de una conexión SSH. Y aunque ha sido una experiencia positiva, hay ciertas tareas para las que no hay sustituto de un monitor y un teclado físicos, sobre todo en tareas de mantenimiento y configuración de interfaces de red. 27 Laboratorios virtuales: una solución con infraestructura de virtualización 8. Referencias bibliográficas • [1] "The NIST Definition of Cloud Computing". National Institute of Standards and Technology. http://csrc.nist.gov/publications/nistpubs/800-145/SP800- 145.pdf • [2] “About OpenStack”. OpenStack Foundation, http://www.openstack.org/software/ • [3] “Companies Supporting the OpenStack Foundation”. OpenStack Foundation, http://www.openstack.org/foundation/companies/ • [4] “Apache License, Version 2.0”. The Apache Software Foundation, http://www.apache.org/licenses/LICENSE-2.0.html • [5] “GNU General Public License”. Free Software Foundation, http://www.gnu.org/licenses/gpl.html • [6] “DevStack Overview”. OpenStack Foundation, http://devstack.org/overview.html • [7] “What is StackOps”.StackOps, http://www.stackops.org/ • [8] “About Apache CloudStack”. The Apache Software Foundation, http://cloudstack.apache.org/about.html • [9] “About Rocks”, rocksclusters.org, http://www.rocksclusters.org/wordpress/?page_id=57 • [10] “Unicore - Objectives”. UNICORE, http://www.unicore.eu/unicore/ • [11] “Product Overview”. Abiquo, http://www.abiquo.com/product/overview/ • [12] “Git - About”. Git, http://git-scm.com/about • [13] “OpenStack Basic Installation Guide for Ubuntu 12.04 (LTS)”, OpenStack Foundation, http://docs.openstack.org/grizzly/basic- install/apt/content/index.html • [14] “MySQL Editions”, Oracle Corporation, http://www.mysql.com/products/ • [15] “What can RabbitMQ do for you?”.GoPivotal Inc., http://www.rabbitmq.com/features.html 28 • [16] “Basic Install Controller Node”. OpenStack Foundation, http://docs.openstack.org/grizzly/basic-install/apt/content/basic- install_controller.html#basic-install_controller-keystone • [17] “About”. Open VSwitch, http://openvswitch.org/ • [18] “About the Apache HTTP Server Project”, The Apache Software Foundation, http://httpd.apache.org/ABOUT_APACHE.html • [19] “About Python”. Python Software Foundation, http://www.python.org/about/ • [20] “Django at a glance”. Django Software Foundation, https://docs.djangoproject.com/en/1.5/intro/overview/ • [21] “Bridging breaks VLAN support for RTL8111/8168B PCI Express Gigabit Ethernet controller on Karmic”. Mark Ziesemer, https://bugs.launchpad.net/ubuntu/+source/linux/+bug/499766 • [22] “Configurin Flat Networking”, OpenStack Foundation, http://docs.openstack.org/admin-guide-cloud/content/configuring-flat- networking.html • [23] “Launching instances using Dashboard”, OpenStack Foundation, http://docs.openstack.org/admin-guide- cloud/content/Launching_Instances_using_Dashboard.html • [24] “Why can't Nova Conductor connect to rabbitmq?”.OmidKosari, https://ask.openstack.org/en/question/1065/why-cant-nova-conductor- connect-to-rabbitmq/ • [25] “Quantum: root cannot access network namespaces created by Quantum service”. Dan Prince, https://bugzilla.redhat.com/show_bug.cgi?id=872689 • [26] “Chapter 11. Limitations”. OpenStack Foundation, http://docs.openstack.org/trunk/openstack- network/admin/content/ch_limitations.html • [27] “OpenStack – Quantum – Open vSwitch – datapath for tunnels or patch ports”, VentzPetkov, http://blog.vpetkov.net/2013/08/31/openstack-quantum- open-vswitch-datapath-for-tunnels-or-patch-ports/ 29