Como atribuir IP automaticamente a uma máquina virtual Ubuntu sem estado?

Como atribuir IP automaticamente a uma máquina virtual Ubuntu sem estado?

Pretendo criar uma imagem de modelo reutilizável para implantar meu aplicativo em várias máquinas virtuais que podem estar em redes e datacenters diferentes. Pretendo ter controle total do sistema host e executar o KVM como hipervisor.

A imagem se tornará imutável quando anexada à máquina virtual para que eu possa implantar as alterações com mais facilidade, atualizando um único modelo em vez do software interno de cada máquina.

Eu entendo como configurar o arquivo /etc/network/interfaces em um sistema Ubuntu normal, mas como você atribuiria automaticamente a cada máquina virtual 1 ou mais endereços IP quando estiver trabalhando com uma imagem imutável para a máquina virtual na primeira inicialização?

A única maneira que imaginei fazer isso até agora é configurar o modelo para contar com DHCP para rede quando for inicializado. Depois que a máquina for inicializada, ela poderá executar um script que verifica e reconfigura a configuração IP conectando-se a outro servidor ou sistema de arquivos remoto que possui as informações de configuração de rede.

Talvez, imediatamente após a rede estar disponível, eu possa executar um script na VM convidada que envie o endereço MAC da(s) interface(s) de rede anexada(s) como o ID exclusivo para recuperar a configuração de rede de outro servidor "mestre" que tenha o IP atribuições. Isso pressupõe que todas as VMs receberão um endereço MAC exclusivo quando forem criadas.

Talvez eu precise evitar iniciar serviços como mysql e php até que a rede tenha sido configurada e verificada para que a reinicialização da rede logo após a inicialização não atrapalhe nada importante.

Isso soaria como uma maneira correta de fazer isso?

O Amazon EC2, openstack ou outros têm uma abordagem diferente para automação de rede? Talvez eles forneçam uma API e/ou scripts que fazem a mesma coisa durante a inicialização?

Estou usando o KVM no host Ubuntu e o sistema operacional convidado também será o Ubuntu, se isso for importante.

Responder1

A única coisa que você pode controlar do lado do host é o MAC fornecido à VM. Portanto, a abordagem mais simples é reservar o IP que você deseja que uma VM específica tenha no DHCP para um MAC específico e, em seguida, fornecer esse endereço MAC à VM em questão ao configurá-la. Isso pode ser dimensionado até certo ponto, mas com centenas de VMs, o gerenciamento de MACs pode se tornar entediante.

Portanto, a próxima abordagem é inicializar uma VM com uma imagem ISO ou de disquete anexada, onde é fornecido um arquivo de configurações adicional por VM. A VM executará um script na inicialização que procurará a imagem ISO/disquete anexada e aplicará as configurações encontradas lá, se tal imagem estiver anexada. Fácil de usar ao configurar novas VMs ou reconfigurar as existentes.

A melhor abordagem, claro, é usar um sistema de gerenciamento de configuração (puppet/chef/cfengine/ansible/saltstack/etc) ou algum tipo de sistema convergente de implantação/configuração como o Foreman. Isso é o mais escalonável possível e permite muita flexibilidade no gerenciamento das configurações para mais do que apenas rede.

Responder2

Acho que você está tentando tornar isso mais difícil do que precisa ser. A rede KVM padrão no Ubuntu é chamada Usermode.

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

Isso criará um NAT em seu host físico, permitindo que todas as suas VMs acessem a rede por NAT. As VMs obtêm um endereço DHCP como você disse acima e pronto.

Como alternativa, você pode usarRede em pontepara permitir que hosts externos acessem diretamente os serviços no sistema operacional convidado.

informação relacionada