Wie weise ich einer zustandslosen virtuellen Ubuntu-Maschine automatisch eine IP zu?

Wie weise ich einer zustandslosen virtuellen Ubuntu-Maschine automatisch eine IP zu?

Ich plane, ein wiederverwendbares Vorlagenimage zu erstellen, um meine Anwendung auf mehreren virtuellen Maschinen bereitzustellen, die sich möglicherweise in unterschiedlichen Netzwerken und Rechenzentren befinden. Ich plane, die volle Kontrolle über das Hostsystem zu haben und KVM als Hypervisor auszuführen.

Das Image wird beim Anhängen an die virtuelle Maschine unveränderlich gemacht, sodass ich Änderungen einfacher bereitstellen kann, indem ich eine einzelne Vorlage aktualisiere, anstatt die interne Software jeder Maschine.

Ich weiß, wie man die Datei /etc/network/interfaces auf einem normalen Ubuntu-System konfiguriert, aber wie weist man jeder virtuellen Maschine automatisch eine oder mehrere IP-Adressen zu, wenn man beim ersten Start mit einem unveränderlichen Image für die virtuelle Maschine arbeitet?

Die einzige Möglichkeit, die ich mir bisher vorstellen konnte, besteht darin, die Vorlage so einzurichten, dass sie beim Booten DHCP für die Netzwerkverbindung verwendet. Nachdem der Computer gebootet hat, könnte er ein Skript ausführen, das die IP-Konfiguration überprüft und neu konfiguriert, indem es eine Verbindung zu einem anderen Server oder Remote-Dateisystem herstellt, das über die Netzwerkkonfigurationsinformationen verfügt.

Vielleicht könnte ich unmittelbar, nachdem das Netzwerk verfügbar ist, ein Skript auf der Gast-VM ausführen, das die MAC-Adresse der angeschlossenen Netzwerkschnittstelle(n) als eindeutige ID sendet, um die Netzwerkkonfiguration von einem anderen „Master“-Server abzurufen, der über die IP-Zuweisungen verfügt. Dies setzt voraus, dass allen VMs bei ihrer Erstellung eine eindeutige MAC-Adresse zugewiesen wird.

Ich muss möglicherweise das Starten von Diensten wie MySQL und PHP vermeiden, bis das Netzwerk konfiguriert und überprüft wurde, sodass der Netzwerkneustart kurz nach dem Booten keine wichtigen Vorgänge unterbricht.

Klingt das nach einer korrekten Vorgehensweise?

Verfolgen Amazon EC2, OpenStack oder andere einen anderen Ansatz zur Netzwerkautomatisierung? Stellen sie vielleicht eine API und/oder Skripte bereit, die beim Booten dasselbe tun?

Ich verwende KVM auf dem Ubuntu-Host und das Gastbetriebssystem wird auch Ubuntu sein, falls das wichtig ist.

Antwort1

Das einzige, was Sie von der Hostseite aus steuern können, ist die MAC, die Sie der VM bereitstellen. Der einfachste Ansatz besteht also darin, die IP, die eine bestimmte VM haben soll, in DHCP für eine bestimmte MAC zu reservieren und diese MAC-Adresse dann der betreffenden VM beim Einrichten zuzuweisen. Dies lässt sich bis zu einem gewissen Punkt skalieren, aber bei Hunderten von VMs kann die Verwaltung von MACs mühsam werden.

Der nächste Ansatz besteht darin, eine VM mit einem angehängten ISO- oder Disketten-Image zu booten, wobei eine zusätzliche Einstellungsdatei pro VM bereitgestellt wird. Die VM führt beim Booten ein Skript aus, das nach dem angehängten ISO-/Disketten-Image sucht und die dort gefundenen Einstellungen anwendet, wenn ein solches Image angehängt ist. Einfach zu verwenden, wenn neue VMs konfiguriert oder vorhandene neu konfiguriert werden.

Der beste Ansatz ist natürlich die Verwendung eines Konfigurationsmanagementsystems (Puppet/Chef/Cfengine/Ansible/Saltstack/usw.) oder einer Art konvergentem Bereitstellungs-/Konfigurationssystem wie theForeman. Dies ist so skalierbar wie nur möglich und bietet Ihnen viel Flexibilität bei der Verwaltung der Einstellungen für mehr als nur das Netzwerk.

Antwort2

Ich glaube, Sie versuchen, dies unnötig kompliziert zu machen. Das standardmäßige KVM-Netzwerk in Ubuntu heißt „Benutzermodus“.

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

Dadurch wird auf Ihrem physischen Host ein NAT erstellt, sodass alle Ihre VMs über NAT auf das Netzwerk zugreifen können. Die VMs erhalten eine DHCP-Adresse, wie Sie oben beschrieben haben, und das war’s.

Alternativ können SieÜberbrücktes Netzwerkum externen Hosts den direkten Zugriff auf Dienste auf dem Gastbetriebssystem zu ermöglichen.

verwandte Informationen