Hotdog ist eine Reihe von OCI-Hooks, mit denen der Log4j Hot Patch in Container eingefügt wird.
Wenn runc den Container einrichtet, ruft es hotdog-cc-hook
auf. hotdog-cc-hook
bindet die Hotpatch-Dateien im Dateisystem des Containers unter /dev/shm/.hotdog
ein. Nachdem der Hauptcontainerprozess gestartet ist, ruft runc hotdog-poststart-hook
auf, der nsenter
verwendet, um in die Namespaces des Containers einzutreten und einen hotdog-hotpatch
-Prozess abzuzweigen. hotdog-hotpatch
wird mehrmals mit abnehmender Häufigkeit (derzeit 1 s, 5 s, 10 s, 30 s) ausgeführt, um JVMs im Container zu erkennen und per Hotpatch zu installieren.
hotdog-hotpatch
-Prozess beendet wurde, werden sie nicht im laufenden Betrieb gepatcht.hotdog-hotpatch
möglicherweise für kurze Zeit bestehen, nachdem der Container beendet wurde./dev/shm/.hotdog
im Container. Wenn /dev/shm
nicht vorhanden ist (z. B. im Fall von Docker-Containern, die mit --ipc=none
gestartet wurden), wird Hotdog nicht in den Container eingefügt und stellt kein Hotpatching bereit. Hotdog ist standardmäßig in Bottlerocket 1.5.0 enthalten.
Hotpatching kann für Neueinführungen von Bottlerocket aktiviert werden, indem die folgenden Einstellungen in die Benutzerdaten übernommen werden.
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
Für bestehende Hosts, auf denen die neueste Version von Bottlerocket ausgeführt wird, kann Hotpatching über den API-Client aktiviert werden.
apiclient set oci-hooks.log4j-hotpatch-enabled=true
Das Aktivieren der Einstellung zur Laufzeit hat keine Auswirkungen auf die Ausführung von Containern. Neu gestartete Container werden per Hotpatch aktualisiert.
Um Hotdog zu installieren, müssen Sie die folgenden Dateien an den richtigen Speicherort kopieren und die entsprechende Konfiguration festlegen.
Log4jHotPatch.jar
nach /usr/share/hotdog
(wenn Sie den Hotpatch aus dem Quellcode erstellen, finden Sie ihn in build/libs
)make && sudo make install
aus, um hotdog-cc-hook
und hotdog-poststart-hook
in /usr/libexec/hotdog
und hotdog-hotpatch
in /usr/share/hotdog
zu installierenoci-add-hooks
oci-add-hooks
mit den Hotdog-Hooks, indem Sie den folgenden Inhalt in /etc/hotdog/config.json
schreiben: {
"hooks" : {
"prestart" : [{
"path" : " /usr/libexec/hotdog/hotdog-cc-hook "
}],
"poststart" : [{
"path" : " /usr/libexec/hotdog/hotdog-poststart-hook "
}]
}
}
/etc/docker/daemon.json
schreiben: {
"runtimes" : {
"hotdog" : {
"path" : " oci-add-hooks " ,
"runtimeArgs" : [
" --hook-config-path " , " /etc/hotdog/config.json " ,
" --runtime-path " , " /usr/sbin/runc "
]
}
}
}
Um einen Container mit aktiviertem Hotpatching auszuführen, geben Sie docker run --runtime hotdog
an. Um die Ausführung mit standardmäßig aktiviertem Hotpatching in allen Containern zu ermöglichen, fügen Sie den folgenden Inhalt zu /etc/docker/daemon.json
hinzu:
"default-runtime": "hotdog"
Wenn Sie hotdog
deaktivieren möchten, selbst wenn es standardmäßig aktiviert ist, geben Sie --runtime runc
an.
hotdog
fügt in jedem Container mehrere Dateien zum Verzeichnis /dev/shm/.hotdog
hinzu. Sie finden das Protokoll von hotdog-hotpatch
in /dev/shm/hotdog.log
.
Weitere Informationen finden Sie unter BEITRAGEN.
Dieses Projekt ist unter der Apache-2.0-Lizenz lizenziert.