Network Managers (Legacy networking)

Durante el proceso de creación de instancias, el nodo de cómputo asigna una IP privada a cada máquina virtual. Este servicio diferencia entre una IP estática(Fixed IP) y una IP dinamica(Floating IP). Las IPs estáticas son aquellas que permanecen asignadas a lo largo de su vida operativa de una máquina virtual . Por otra parte, las IPs dinámicas o flotantes pueden ser asignadas con una máquina virtual por un periodo de tiempo definido.

Existen tres opciones (FlatManager, FlatDHCPManager y VlanManager) soportadas como manejadores de red para Nova, estas proveen redes virtuales para que las máquinas virtuales puedan comunicarse entre distintos nodos de cómputo y/o con la red publica. Además, han sido descritas hace tiempo en artículos de Mirantis, sin embargo considero conveniente escribir al respecto. Estos tipos de redes pueden coexistir en una implementación, pero debido a que no se puede seleccionar el tipo de rede para cada proyecto, no es posible seleccionar varios tipos para un nodo de cómputo y es por eso que solo una clase puede ser especificada en el archivo de configuración de nova para el nodo de cómputo y su elección depende de las necesidades del negocio. Estas opciones comparten la necesidad de ser administradas y monitoreadas por el operador de la nube.

Todos los administradores de red operan tanto en modo single-host como multi-host(variable de configuracion multi_host). La diferencia entre cada uno es la cantidad de servicios de nova-network que son ejecutados, mientras que single-host, levanta un solo servicio de nova-network ofreciendo servicios como Network Address Translation (NAT), DHCP, y DNS para las máquinas virtuales, para el modo de multi-host cada nodo de cómputo levanta su propio servicio de nova-network.  Esta última opción, permite tener alta disponibilidad y evitando cuellos de botella en el tráfico de red.

nova.network.manager.FlatManager

flatnetwork-diagram-1

La primera clase a analizar es FlatManager, entre las posibles razones para utilizar dicha clase es la existencia de un servicio externo de DHCP y la simplicidad de su uso. Esta opción no ofrece ningún bridge, su creación en cada nodo de cómputo, es responsabilidad del operador y se define en el archivo de configuración con la variable flat_network_bridge. Estos son los cambios necesarios en el archivo de configuración:

/etc/nova/nova.conf

[DEFAULT]
...
network_api_class = nova.network.api.API
public_interface = eth0
flat_network_bridge = br100
network_manager = nova.network.manager.FlatManager
dhcp_domain = novalocal

Es necesario reiniciar el servicio para que los cambios tomen efecto( el nombre del servicio y la forma dependerá de la distribución de Linux que se está usando). Una vez que el servicio inicie con los valores previamente configurados es necesario especificar el rango de redes. Estas direcciones de IP serán inyectadas en la imagen utilizada en la construcción de la máquina virtual. En otras palabras, cada instancia recibe una IP fija de un conjunto disponible.

# service nova-network restart
$ nova-manage network create --label=demo-net --bridge=br100 --multi-host=T --fixed_range_v4=203.0.113.24/29

nova.network.manager.FlatDHCPManager

flat-dhcp-networking-diagrams-4

La clase FlatDHCPManager es similar a la clase FlatManager con la diferencia de que OpenStack levanta un servicio de DHCP a través del servicio de dnsmasq. Al igual que FlatManager, todas las instancias son conectadas a un único bridge del nodo de computo. El servicio de computo asigna una IP estática a cada instancia y dnsmasq registra la dirección de IP con el MAC ID de la máquina virtual para garantizar que cada instancia mantenga su IP estática. Cabe señalar que el servicio de dnsmasq no toma parte del proceso de asignación de direcciones IP, solo lleva el registro(por medio del comando dhcpdiscover) en un archivo que se almacena en la carpeta definida por la variable networks_path del archivo de configuración( por lo general /var/lib/nova/networks/), de cada nodo de cómputo.

/etc/nova/nova.conf

[DEFAULT]
...
network_api_class = nova.network.api.API
public_interface = eth0
flat_interface = eth0
flat_network_bridge = br100
network_manager = nova.network.manager.FlatDHCPManager

También es necesario reiniciar los servicios y crear los rangos de red.

# service nova-network restart
$ nova-manage network create --label=demo-net --bridge=br100 --multi-host=T --fixed_range_v4=203.0.113.24/29

nova.network.manager.VlanManager

vlanmanager-2-hosts-2-tenants

Esta es la clase utilizada por el servicio de Nova Network por defecto. En este modo, los operadores de la nube deben crear una VLAN y un bridge para cada proyecto. En cuanto a hardware, se requiere que el switch utilizado entre varios nodos de cómputo soporte VLAN tagging (IEEE 802.1Q). El rango de IPs privadas son solo accesibles dentro de la VLAN. Para que un usuario pueda acceder a sus máquinas virtuales en cada proyecto, es necesario crear una instancia VPN(llamada cloudpipe).

/etc/nova/nova.conf

[DEFAULT]
...
network_api_class = nova.network.api.API
public_interface = eth0
vlan_interface = eth0
flat_network_bridge = br100
network_manager = nova.network.manager.VlanManager

De igual forma, el rango de IPs es especificado por el administrador para ser asignado(el rango de IPs) dinámicamente a un proyecto cuando es necesario.

# service nova-network restart
$ nova-manage network create --fixed_range_v4=10.0.1.0/24 --vlan=102

Para mayor información, está disponible la guia oficial de administración.