Beschreibt das Upgrade eines bestehenden DefectDojo Pro Release auf eine
neuere Chart-Version. Der empfohlene Weg besteht darin, den Chart direkt aus
der DefectDojo OCI-Registry abzurufen — eine Zip-Extraktion ist nicht
erforderlich. Der bei der Installation verwendete Workflow mit dem gepackten
Zip funktioniert auch für Upgrades und wird weiter unten beschrieben.
Ein DefectDojo Pro Release besteht aus einer Chart-Version, einer Reihe von
Container-Image-Versionen und den Pro-Settings-Dateien. Diese werden
gemeinsam gebaut und getestet und müssen auch gemeinsam aktualisiert werden.
Das isolierte Aktualisieren der Image-Tags wird nicht unterstützt und
beschädigt das Deployment.
Das Gleiche gilt für die Einstellungen. Mit nahezu jedem Release wird eine
neue pro_settings.py ausgeliefert. Übernehmen Sie niemals eine Kopie über
ein Upgrade hinweg, und patchen Sie eine ältere Version niemals manuell: Die
Anwendung muss die pro_settings.py ausführen, die zu ihrer Version passt.
Ihre eigenen Anpassungen gehören in local_settings.py, die bei Upgrades
erhalten bleibt und von den beiden Dateien die einzige ist, die Sie
bearbeiten sollten.
Die Verwendung des Charts übernimmt dies für Sie. Er liefert die passende
pro_settings.py aus und mountet sie zusammen mit Ihrer local_settings.py,
sodass nichts manuell kopiert oder migriert werden muss.
Jedes Upgrade sollte auf die gleiche Weise beginnen. Das Überspringen dieser
Schritte ist die häufigste Ursache für fehlgeschlagene Upgrades.
Lesen Sie die Release Notes für jede Version zwischen Ihrem aktuellen
Release und dem Zielrelease. Breaking Changes, neue Pflichtfelder und
Migrationsvoraussetzungen werden dort aufgeführt. Die GitHub-Release-Seite
jedes Tags verlinkt auf das Change Log.
Prüfen Sie Ihre aktuelle Chart-Version. Sie bildet die Ausgangsbasis
für das Upgrade:
helm list -n $NAMESPACEhelm get metadata dojopro -n $NAMESPACE
Sichern Sie Ihre Datenbank. Chart-Upgrades können Django-Migrationen
enthalten, die das Schema ändern. Erstellen Sie vor dem Fortfahren einen
logischen Dump (oder einen Snapshot auf Storage-Ebene) der
PostgreSQL-Instanz.
Halten Sie Ihre Values-Dateien bereit. Der Upgrade-Befehl muss
dasselbe Plattform-Preset, Profil-Preset und dieselbe Kunden-Values-Datei
übergeben, die bei der Installation verwendet wurden. Fehlende oder
abweichende Values-Dateien führen zu überraschenden Diffs.
Bestätigen Sie, dass Secret-Referenzen weiterhin existieren. Wenn Sie
mit --set dojo.existingSecret=... oder --set license.existingSecret=...
installiert haben, überprüfen Sie, dass diese Kubernetes-Secrets im
Namespace weiterhin vorhanden sind.
Rendern Sie das Upgrade zunächst lokal, um fehlende Felder, ungültige
Werte oder Template-Fehler zu erkennen, bevor Sie den Cluster anfassen:
$CHART_REF ist die OCI-Referenz (siehe unten) oder der Pfad zum
extrahierten Chart.
Legen Sie NAMESPACE einmal fest — jeder Befehl in diesem Leitfaden
verwendet $NAMESPACE:
NAMESPACE="dojopro"
Standardverhalten der Netzwerkrichtlinie geändert. NetworkPolicies
werden jetzt durch networkPolicy.profile gesteuert, das standardmäßig
auf standard gesetzt ist: Der gesamte Egress sowie Ingress zwischen den
eigenen Pods dieses Releases ist erlaubt (externer Ingress bleibt weiterhin
auf den Ingress-Pfad beschränkt). Dies ist permissiver als die bisherige,
stets granulare Egress-Allowlist. Um das abgeriegelte Verhalten
beizubehalten, setzen Sie networkPolicy.profile: aggressive und prüfen
Sie die Ausnahmen (nodeLocalDns, dnsSelectors, externalAPIs) — siehe
Netzwerkrichtlinien.
Anforderung an die Orchestrator-Datenbank. Der Orchestrator (ddorch)
verwendet eine zweite Datenbank namens <main-db-name>-ddorch und legt sie
beim Start an, falls sie nicht existiert. Wenn Ihrer Anwendungsrolle
CREATEDB fehlt, legen Sie sie vorab an
(CREATE DATABASE "defectdojo-ddorch" OWNER defectdojo;), bevor Sie auf
eine Chart-Version upgraden, die ddorch aktiviert — andernfalls schlägt der
ddorch-Pod mit permission denied to create database (SQLSTATE 42501)
fehl. Siehe
Pre-flight: Orchestrator-Datenbank (ddorch).
Standardverhalten für Organization/Asset-Umbenennung.dojo.V3EnableOrganizationAssetRelabel ist jetzt standardmäßig null
(automatisch): Bei Neuinstallationen ist es aktiviert und bei Upgrades
deaktiviert, sodass sich die UI-Umbenennung (Organization/Asset ersetzt
ProductType/Product) bei einem bestehenden Release nie unerwartet
einschaltet. Um sie für ein aktualisiertes Release zu aktivieren, setzen
Sie explizit dojo.V3EnableOrganizationAssetRelabel: true; ein explizites
true/false hat immer Vorrang vor dem automatischen Standardwert.
Jedes Release wird mit der Chart-Version getaggt (zum Beispiel 2.57.2).
Die Chart-Version stimmt mit der App-Version in Chart.yaml überein, sodass
der Tag, den Sie an helm upgrade --version übergeben, dieselbe
Versionsnummer ist, die auf der GitHub-Release-Seite angezeigt wird.
Verfügbare Chart-Versionen auflisten:
helm show chart \
oci://us-south1-docker.pkg.dev/defectdojo-container-registry/dojo-pro-helm-v2/dojopro \
--version <chart-version>
Warum OCI für Upgrades? Die Presets (presets/platforms/*.yaml,
presets/profiles/*.yaml) sind im Chart verpackt. Wenn Sie den Chart über
seine OCI-URL referenzieren, werden automatisch die passenden
Preset-Versionen für den Ziel-Chart abgerufen — kein erneuter
Extraktionsschritt, keine veralteten Presets.
Die Registry ist privat. Helm muss angemeldet sein, bevor der Chart
abgerufen werden kann. Verwenden Sie einen von DefectDojo Support
bereitgestellten GCP-Service-Account-Schlüssel oder ein kurzlebiges Access
Token.
Access Tokens von gcloud auth print-access-token laufen nach einer Stunde
ab. Führen Sie helm registry login erneut aus, wenn während des Upgrades
ein 401 Unauthorized angezeigt wird.
Air-Gapped- / Firewall-geschützte Umgebungen: Wenn Ihre Cluster-Nodes
us-south1-docker.pkg.dev erreichen können, Ihre Workstation aber nicht,
verwenden Sie den unten beschriebenen Workflow mit dem extrahierten Zip.
Der OCI-Workflow funktioniert nur, wenn der Host, auf dem helm upgrade
läuft, die Registry erreichen kann.
Richten Sie helm upgrade direkt auf die OCI-URL und fixieren Sie die
Chart-Version mit --version. Alle Values-Dateien, --set-Flags und
--set-file-Flags sind dieselben wie bei der ursprünglichen Installation.
Die oben genannten Pfade für Plattform- und Profil-Presets lauten
presets/platforms/... (ohne $CHART/-Präfix). Wenn Helm einen Chart von
OCI abruft, befinden sich die Presets im abgerufenen Chart, aber -f
verweist hier auf lokale Kopien dieser Dateien. Wenn Sie keine lokalen
Kopien der Presets vorhalten, extrahieren Sie den Chart zunächst mit
helm pull oci://... --version $VERSION --untar und referenzieren Sie sie
aus dem extrahierten Verzeichnis — oder verwenden Sie den Workflow mit dem
extrahierten Zip.
Fixieren Sie immer --version. Ohne diese Angabe wird der Tag abgerufen,
den die Registry im Moment des Befehls auflöst — nicht wiederholbar,
nicht auditierbar. Fixieren Sie die Version, damit erneute Ausführungen,
Rollbacks und Incident Response immer auf dasselbe Artefakt verweisen.
Für Workstations, die die OCI-Registry nicht erreichen können, oder für
Kunden, die den Chart lieber als lokale Datei bereitstellen möchten,
funktioniert das gepackte Zip aus dem GitHub-Release beim Upgrade genauso
wie bei der Installation. Der einzige Unterschied zur Installation ist das
Befehlsverb (helm upgrade statt helm install).
Laden Sie dojo-pro-helm-bundled-<version>.zip (und die separate
Signatur .asc) aus dem GitHub-Release herunter.
Verifizieren Sie die Signatur mit dem öffentlichen Schlüssel
(dojo-pro-release-signing.asc) wie im Installationsleitfaden
beschrieben.
Extrahieren Sie den Chart in einen versionierten Pfad, damit Presets
nicht mit älteren Extraktionen kollidieren:
unzip dojo-pro-helm-bundled-<version>.zip -d /tmp/dojopro-<version>
cd /tmp/dojopro-<version>
mkdir -p dojopro-<version>
tar -xzf dojopro-<version>.tgz -C dojopro-<version>/
CHART="/tmp/dojopro-<version>/dojopro-<version>/dojopro"
Führen Sie das Upgrade mit dem Pfad des extrahierten Charts aus —
dieselben Values-Dateien und Flags wie bei Ihrer ursprünglichen
Installation:
Bei jedem Upgrade neu extrahieren. Preset-Dateien entwickeln sich
zwischen Chart-Versionen weiter. Die Wiederverwendung einer alten
Extraktion fixiert Ihr Upgrade stillschweigend auf die alten
Preset-Standardwerte.
Wenn DefectDojo Pro von ArgoCD verwaltet wird, ist das Upgrade eine einzige
Änderung an targetRevision in der Application-Spezifikation. Die
Plattform- und Profil-Presets sind im Chart versioniert und werden daher im
Gleichschritt aktualisiert.
Synchronisieren Sie die Application, nachdem Sie targetRevision
bearbeitet haben. ArgoCD ruft den neuen Chart aus der OCI-Registry ab und
gleicht ihn ab.
ArgoCD benötigt eigene Zugangsdaten für die OCI-Registry. Konfigurieren
Sie das Repo-Secret mit type: helm und enableOCI: "true". Die genaue
Struktur des Secrets finden Sie in der ArgoCD-Dokumentation
Helm OCI-Unterstützung.
Nachdem helm upgrade zurückgekehrt ist (oder ArgoCD Synced / Healthy
meldet), bestätigen Sie, dass die neue Revision aktiv ist:
# Chart revision bumped and status is deployedhelm list -n $NAMESPACE# All pods Running and Ready — expect django, celery worker/beat,# connectors, ddorch, ddorch-workers, and (if enabled) mcp-serverkubectl get pods -n $NAMESPACE# Migrations succeeded — the initializer job should show Completedkubectl get jobs -n $NAMESPACE# App version matches the targetkubectl get deployment -n $NAMESPACE\
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.template.spec.containers[*].image}{"\n"}{end}'
Rufen Sie die Login-Seite auf, um zu bestätigen, dass die UI erscheint und
sich der Admin-Benutzer anmelden kann. Für automatisierte Prüfungen liefert
der Endpunkt /login/ den Status 200, wenn die Anwendung fehlerfrei läuft.
Helm führt die Release-Historie nach Revision. Wenn das Upgrade zu einer
Verschlechterung des Verhaltens führt, führen Sie ein Rollback zur
vorherigen Revision durch:
# Inspect historyhelm history dojopro -n $NAMESPACE# Roll back to the previous revisionhelm rollback dojopro <previous-revision> -n $NAMESPACE --wait --timeout 15m
Datenbankmigrationen werden nicht zurückgerollt. Ein Helm-Rollback
stellt den Manifest-Zustand (Images, Konfigurationen, Secrets) wieder her,
führt aber kein migrate --revert aus. Wenn das Upgrade eine
Schemamigration angewendet hat, die Sie rückgängig machen müssen, stellen
Sie das in Vor dem Upgrade erstellte Backup wieder
her oder stimmen Sie eine manuelle Migrationsrücknahme mit dem DefectDojo
Support ab, bevor Sie das Helm-Release zurückrollen.
ArgoCD-Nutzer können ein Rollback durchführen, indem sie die Änderung an
targetRevision in Git rückgängig machen (oder über argocd app rollback)
und anschließend synchronisieren.
401 Unauthorized beim Abrufen des Charts.
Das Access Token ist abgelaufen. Führen Sie helm registry login mit einem
neuen gcloud auth print-access-token erneut aus.
Error: UPGRADE FAILED: cannot patch ... field is immutable.
Ein Selector oder ein anderes unveränderliches Feld ist abgewichen. Der
Chart fixiert stabile Selector-Labels, daher bedeutet dies meist eine
vorherige direkte Bearbeitung eines Deployments. Erfassen Sie den Diff,
löschen Sie die betroffene Ressource und führen Sie das Upgrade erneut aus,
damit Helm sie neu erstellt.
Error: UPGRADE FAILED: conflict occurred while applying object ... conflict with "kubectl-edit" ... .spec.replicas.
Helm 4 verwendet Server-Side Apply, das die Feldeigentümerschaft
nachverfolgt. Dieser Fehler bedeutet, dass ein anderer Manager —
kubectl edit, kubectl scale oder der HPA-Controller
(kube-controller-manager) — ein von Helm gerendertes Feld geändert hat, am
häufigsten .spec.replicas. Übernehmen Sie die Eigentümerschaft einmalig
zurück:
helm upgrade ... --force-conflicts
Chart-Versionen mit diesem Fix lassen replicas bei Deployments weg,
deren HPA aktiviert ist, sodass die HPA-Skalierung nicht mehr mit Upgrades
kollidiert. Wenn Sie ein Deployment manuell mit kubectl skaliert haben,
passen Sie stattdessen bevorzugt den entsprechenden Wert
replicas/horizontalpodautoscaler an, damit der Chart der Eigentümer
bleibt.
Error: UPGRADE FAILED: timed out waiting for the condition.
Pods haben innerhalb des --timeout-Fensters nicht den Status Ready
erreicht. Untersuchen Sie die verzögerte Workload:
Häufige Ursachen: fehlgeschlagene Image-Pulls (Registry-Authentifizierung),
noch laufende Schemamigration (erhöhen Sie --timeout) oder fehlschlagende
Readiness-Probes aufgrund eines falsch konfigurierten FQDN.
Das Preset hat sich zwischen den Versionen geändert und meine
Values-Datei steht jetzt im Konflikt.
Rendern Sie mit helm template erneut (siehe
Vor dem Upgrade) und gleichen Sie Ihre Overrides mit
den neuen Preset-Standardwerten ab, bevor Sie helm upgrade ausführen.
values don't meet the specifications of the schema ... got string, want boolean.
Ein An/Aus-Wert in Ihrem Override ist in Anführungszeichen gesetzt. Helm
behandelt "false" als nicht leeren String, und ein nicht leerer String ist
truthy, sodass die Funktion eingeschaltet wurde, obwohl Sie sie
ausschalten wollten. Das Schema lehnt die in Anführungszeichen gesetzte Form
jetzt ab, anstatt sie durchzulassen. Entfernen Sie die Anführungszeichen:
networkPolicy:enabled:"false"# wrong: turns network policies ONenabled:false# right
Die Fehlermeldung nennt den betroffenen Pfad. Ohne Anführungszeichen werden
false, no und off alle als echter Boolean interpretiert und
akzeptiert.