¿Cómo asignar IP automáticamente a una máquina virtual Ubuntu sin estado?

¿Cómo asignar IP automáticamente a una máquina virtual Ubuntu sin estado?

Planeo crear una imagen de plantilla reutilizable para implementar mi aplicación en múltiples máquinas virtuales que pueden estar en diferentes redes y diferentes centros de datos. Planeo tener control total del sistema host y ejecutar KVM como hipervisor.

La imagen se volverá inmutable cuando se conecte a la máquina virtual para que pueda implementar cambios más fácilmente actualizando una única plantilla en lugar del software interno de cada máquina.

Entiendo cómo configurar el archivo /etc/network/interfaces en un sistema ubuntu normal, pero ¿cómo asignaría automáticamente a cada máquina virtual 1 o más direcciones IP cuando trabaja con una imagen inmutable para la máquina virtual en el primer arranque?

La única forma que he imaginado de hacer esto hasta ahora es configurar la plantilla para que dependa de DHCP para la conexión en red cuando se inicie. Una vez que la máquina se ha iniciado, podría ejecutar un script que verifique y reconfigure la configuración IP conectándose a otro servidor o sistema de archivos remoto que tenga la información de configuración de la red.

Quizás, inmediatamente después de que la red esté disponible, podría ejecutar un script en la máquina virtual invitada que envíe la dirección MAC de las interfaces de red adjuntas como identificación única para recuperar la configuración de red de otro servidor "maestro" que tenga la IP. asignaciones. Esto supone que a todas las máquinas virtuales se les asignará una dirección MAC única cuando se creen.

Es posible que deba evitar iniciar servicios como mysql y php hasta que la red haya sido configurada y verificada para que el reinicio de la red poco después del arranque no interrumpa nada importante.

¿Le parecería una forma correcta de hacerlo?

¿Amazon EC2, openstack u otros tienen un enfoque diferente para la automatización de redes? ¿Quizás proporcionan una API y/o scripts que hacen lo mismo durante el arranque?

Estoy usando KVM en el host de Ubuntu y el sistema operativo invitado también será Ubuntu si eso es importante.

Respuesta1

Lo único que puede controlar desde el lado del host es la MAC que proporciona a la VM. Entonces, el enfoque más simple es reservar la IP que desea que tenga una máquina virtual específica en DHCP para una MAC específica y luego darle esa dirección MAC a la máquina virtual en cuestión cuando la configure. Esto puede escalar hasta cierto punto, pero con cientos de máquinas virtuales, administrar las MAC puede resultar tedioso.

Entonces, el siguiente enfoque es iniciar una máquina virtual con una imagen ISO o de disquete adjunta, donde se proporciona un archivo de configuración adicional por máquina virtual. La máquina virtual ejecutará un script al arrancar que buscará la imagen ISO/disquete adjunta y aplicará la configuración que se encuentra allí, si dicha imagen está adjunta. Fácil de usar al configurar nuevas máquinas virtuales o al reconfigurar las existentes.

El mejor enfoque, por supuesto, es utilizar un sistema de gestión de configuración (puppet/chef/cfengine/ansible/saltstack/etc) o algún tipo de sistema de implementación/configuración convergente como theForeman. Esto es lo más escalable posible y le permite mucha flexibilidad a la hora de administrar la configuración para algo más que la creación de redes.

Respuesta2

Creo que estás intentando hacer esto más difícil de lo necesario. La red KVM predeterminada en Ubuntu se llama Modo de usuario.

https://help.ubuntu.com/community/KVM/Networking#usermodenetworking

Esto creará una NAT en su host físico que permitirá que todas sus máquinas virtuales accedan a la red a través de NAT. Las máquinas virtuales obtienen una dirección DHCP como dijiste anteriormente y eso es todo.

Alternativamente, puedes usarRedes puenteadaspara permitir que los hosts externos accedan directamente a los servicios en el sistema operativo invitado.

información relacionada