| Kategorien: | Automatisierung credativ® Inside HowTos |
|---|---|
| Tags: | Debian DevOps Foreman |
Foreman ist eindeutig in einer IPv4-Welt verwurzelt. Das sieht man überall. Es scheint, als ob es Ihnen keinen Host ohne IPv4 geben möchte, aber ohne IPv6 ist es in Ordnung. Aber das muss nicht so sein, also begeben wir uns gemeinsam auf eine Reise, um Foreman und die Dinge um ihn herum in die Gegenwart zu bringen.
Wir beginnen mit einer typischen Foreman-Installation, die zum Bootstrappen neuer Systeminstallationen verwendet wird. Dieser Foreman verwendet einen ISC-DHCP-Server und einen TFTP-Server, um Systeme mit Boot-Informationen zu versorgen. Er verwendet einen Foreman-Proxy, um diese DHCP- und TFTP-Server zu konfigurieren.
Der DHCP-Server speichert Leases für jedes System. Für jede MAC-Adresse speichert der DHCP-Server den Hostnamen, die IPv4-Adresse und die Boot-Datei, die auf ein Standard-PXELinux verweist. Die Leases werden von Foreman bei jeder Änderung seines internen Zustands eingerichtet.
Der TFTP-Server speichert alle für das Booten erforderlichen Dateien. Der TFTP-Server stellt die statischen PXELinux-Binärdateien bereit. Er speichert auch PXELinux-Konfigurationsdateien für jede MAC-Adresse separat. Diese Konfigurationen teilen jedem System mit, ob es ein Installationsprogramm oder das System auf dem lokalen Speicher booten soll. Foreman ändert diese Konfigurationsdateien ständig, abhängig vom internen Zustand.
Das bedeutet, dass wir viele Orte haben, an denen wir Daten speichern müssen. Nicht nur Foreman speichert alle Informationen in seiner eigenen Datenbank, sondern auch der DHCP- und TFTP-Server müssen Informationen für den normalen Betrieb des Gesamtsystems speichern. Wir können diese Informationen wiederherstellen, wenn sie verloren gehen, aber dieser Prozess ist manuell.
qemu verwendet iPXE als Standard-PXE-Loader. libvirt verwendet beispielsweise qemu. iPXE ist leistungsstark und verfügt über eine eigene Skriptsprache. Außerdem implementiert es IPv6 in einem nützlichen Zustand.
iPXE unterstützt Skripte. Foreman verwendet dies im iPXE Intermediate Script, das auf der Registerkarte „Betriebssystem“ als „PXE Loader“ angezeigt wird. Dieses Skript versucht den dhcp iPXE-Befehl auf vielen Netzwerkgeräten, der dann sowohl die IPv4- als auch die IPv6-Konfiguration ausprobiert. Wenn iPXE eine Konfiguration findet, fragt es Foreman nach der nächsten Bootloader-Phase, die ebenfalls ein Skript ist, das entweder ein Installationsprogramm oder das installierte System ausführt.
iPXE unterstützt IPv6 in einem nützlichen Zustand. iPXE kann IPv6 Router Advertisements empfangen und verwendet diese, um seine eigene Hostadresse und sein Gateway festzulegen. Außerdem verwendet es das Flag „other information“, um den DHCPv6-Client auf Anfrage zu aktivieren. Anschließend fragt es über DHCPv6 nach zusätzlichen Konfigurationen, wie z. B. der Boot-Datei. Die Boot-Datei verweist auf den Loader der nächsten Phase und ist somit ein kritischer Informationsteil.
dnsmasq kann sowohl Router Advertisements als auch zustandslose DHCPv6 bereitstellen.
dhcp-range=2001:db8::,ra-stateless dhcp-option=option6:bootfile-url,http://foreman.example.com/unattended/iPXE?bootstrap=1
Wenn Sie ein aktuelles iPXE haben, ist das Ganze einfach. Aber jetzt kommt UEFI ins Spiel. UEFI benötigt ebenfalls einen Netzwerk-Stack und qemu stellt iPXE dafür bereit. Aber iPXE bietet nur Netzwerkzugriff, UEFI selbst übernimmt die Kommunikation. Aber UEFI wäre nicht UEFI, wenn es die Dinge vernünftig angehen würde. Das bedeutet, dass zumindest die Referenzimplementierung EDK2 keine Router Advertisements unterstützt, sondern nur zustandsbehaftetes DHCPv6.
Aber das Fehlen der iPXE-Kernfunktionalität bedeutet auch, dass wir eine wichtige Funktion verlieren, die wir oben genutzt haben, die Skriptsprache. Selbst wenn DHCPv6 Adressen bereitstellt, kann dieses Setup jetzt nur noch UEFI-Binärdateien laden.
Aber wir haben immer noch ein vollständiges iPXE für EFI, nur als eigenständige Binärdatei. Wir können diese Binärdatei über TFTP laden und dann dieselbe Boot-Kette wie ohne UEFI wiederverwenden. Beachten Sie jedoch, dass dies viel langsamer ist, da UEFI Minuten braucht, um über IPv4 zu booten.
dhcp-range=2001:db8::1,2001:db8::ffff dhcp-option=option6:dns-server,[2001:db8::] dhcp-option=tag:pxe-amd64,option6:bootfile-url,tftp://2001:db8::/ipxe-amd64.efi dhcp-vendorclass=set:pxe-amd64,enterprise:343,PXEClient:Arch:00007:UNDI:003001 enable-tftp tftp-root=/usr/lib/ipxe/
Natürlich haben wir Fehler gefunden, aber für alle haben wir Workarounds.
Foreman mag es nicht wirklich, wenn das IPv4-Netzwerk leer ist. Wenn Sie versuchen, das IPv4-Netzwerk in der Schnittstellenkonfiguration zu deaktivieren, fügt es einfach eines wieder hinzu. Ich habe dafür noch keinen Fehlerbericht geschrieben.
Ein Workaround, den ich gefunden habe, ist:
169.254.0.0/16.Die Netzwerkinformationen verschwinden dann und nur das IPv6-Netzwerk bleibt übrig.
Das Template-Snippet „preseed_kernel_options“ fügt der Befehlszeile für Preseed (aka Debian) hinzu: netcfg/get_ipaddress=${netX/ip}. Dies verwendet interne iPXE-Variablen, die leer sind, wenn kein DHCPv4 vorhanden ist. Gemeldet als Issue #38536.
--- a/app/views/unattended/provisioning_templates/iPXE/preseed_default_ipxe.erb
+++ b/app/views/unattended/provisioning_templates/iPXE/preseed_default_ipxe.erb
@@ -36,7 +36,7 @@ ping --count 1 ${netX/dns} || echo Ping to DNS failed or ping command not availa
<% kernel = boot_files_uris[0] -%>
<% initrd = boot_files_uris[1] -%>
-kernel <%= kernel %> initrd=initrd.img interface=auto url=<%= url %> ramdisk_size=10800 root=/dev/rd/0 rw auto <%= snippet("preseed_kernel_options", variables: {ipxe_net: true}).strip %>
+kernel <%= Kernel %> initrd=initrd.img interface=auto url=<%= url %> ramdisk_size=10800 root=/dev/rd/0 rw auto <%= snippet("preseed_kernel_options").strip %>
initrd <%= initrd %>
Es bedarf noch etwas Arbeit, aber Foreman kann sowohl in IPv6-lastigen als auch in IPv6-only-Umgebungen arbeiten. Die gesamte Kommunikation zwischen verwalteten Systemen und Foreman, einschließlich Support-Services, verwendet IPv6, wenn dies so konfiguriert ist.
Wir haben auch mehrere Dienste entfernt, die Daten speichern, wie z. B. den ISC-DHCP-Server und den TFTP-Server. Der Ersatz ist größtenteils zustandslos.
| Kategorien: | Automatisierung credativ® Inside HowTos |
|---|---|
| Tags: | Debian DevOps Foreman |
Sie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Brevo. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie müssen den Inhalt von Turnstile laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Turnstile. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen