Zum Inhalt springen

Phase 4 — Abbau

Phase 4 entfernt alle während der Übung erstellten Objekte in umgekehrter Abhängigkeitsreihenfolge. Diese Phase erfordert eine ausdrückliche Bestätigung durch den Menschen, bevor destruktive Operationen durchgeführt werden.

Objekte in umgekehrter Erstellungsreihenfolge entfernen — zuerst Objekte löschen, die von anderen Objekten abhängen:

  1. Mitigierte Domains — alle in Phase 3 erstellten CSD-mitigierten Domains löschen
  2. HTTPS Load Balancer (${F5XC_LB_NAME}-https) — auf Skeleton reduzieren (Let’s Encrypt-Zertifikat beibehalten); vollständiges DELETE, wenn NAMESPACE_CREATED=true oder auf ausdrückliche Anfrage
  3. HTTP Load Balancer (${F5XC_LB_NAME}-http) — abhängig vom Origin Pool
  4. Origin Pool — abhängig von Healthcheck (falls erstellt)
  5. DNS-Zonenbereinigung — das HTTPS LB-Skeleton behält seine verwalteten A- und ACME-Einträge (dies ist gewünscht — es hält das Zertifikat gültig). Die verwalteten Einträge des HTTP LB werden beim Löschen automatisch bereinigt. Manuelle Einträge in default_rr_set_group müssen manuell per PUT bereinigt werden
  6. Healthcheck — nur wenn in Phase 1 Schritt 1 erstellt
  7. Protected Domain — die CSD-Protected-Domain-Registrierung löschen
  8. Namespace — nur wenn während Phase 1 Schritt 0 erstellt (NAMESPACE_CREATED=true)

Wenn Phase 3 ausgeführt wurde, löschen Sie alle mitigierten Domains, bevor Sie Infrastrukturobjekte entfernen. Die Standard-Simulation erstellt 6 mitigierte Domains:

Terminal-Fenster
for domain in cdn.jsdelivr.net esm.sh unpkg.com ga.jspm.io httpbin.org jsonplaceholder.typicode.com; do
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains/$domain"
done

Überprüfen: Mitigierte Domains auflisten, um zu bestätigen, dass die Anzahl 0 beträgt (oder 1 — siehe Hinweis unten):

Terminal-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \
| jq '{count: (.items | length)}'

Das Abbauverhalten des HTTPS LB hängt davon ab, ob der Namespace während dieser Demo-Sitzung erstellt wurde (Variable NAMESPACE_CREATED aus Phase 1 Schritt 0):

  • NAMESPACE_CREATED=false (bereits vorhandener Namespace) — auf Skeleton-Zustand reduzieren, dabei das Let’s Encrypt-Zertifikat zur Wiederverwendung beibehalten
  • NAMESPACE_CREATED=true (Namespace während der Demo erstellt) — vollständiges DELETE, da der Namespace selbst gelöscht wird und das Zertifikat nicht beibehalten werden kann

Pfad A: Auf Skeleton reduzieren (bereits vorhandener Namespace)

Abschnitt betitelt „Pfad A: Auf Skeleton reduzieren (bereits vorhandener Namespace)“

Wenn der Namespace bereits vorhanden ist, reduzieren Sie den HTTPS LB auf einen Skeleton-Zustand — entfernen Sie den Origin-Pool-Verweis und die CSD-Konfiguration, während die Domain-Bindung, https_auto_cert-Einstellungen und das Let’s Encrypt-Zertifikat beibehalten werden. Dies vermeidet das Auslösen einer neuen Zertifikatsanfrage beim nächsten Demo-Durchlauf (Let’s Encrypt erzwingt ein Limit von 5 doppelten Zertifikaten pro exakter Kennung pro 7 Tage).

Schritt 1 — Aktuelle HTTPS LB-Konfiguration per GET abrufen:

Terminal-Fenster
HTTPS_LB_JSON=$(curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https")

Schritt 2 — Per jq auf Skeleton reduzieren und per PUT zurückschreiben:

Terminal-Fenster
echo "$HTTPS_LB_JSON" | jq '{
metadata: .metadata,
spec: (.spec | del(.client_side_defense) | .disable_client_side_defense = {} | .default_route_pools = [])
}' | curl -s -X PUT \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d @- \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \
| jq .

Der jq-Filter bewahrt die gesamte Spec (Domains, https_auto_cert, advertise_on_public_default_vip und alle deaktivierten Feature-Flags), während client_side_defense entfernt wird (ersetzt durch disable_client_side_defense: {}) und default_route_pools auf ein leeres Array geleert wird. Das Zertifikat und die DNS-Bindungen bleiben intakt.

Überprüfen, ob der HTTPS LB nun ein Skeleton ist:

Terminal-Fenster
curl -s \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https" \
| jq '{
name: .metadata.name,
domains: .spec.domains,
has_origin_pools: ((.spec.default_route_pools // []) | length > 0),
has_csd: (.spec.client_side_defense != null),
cert_state: .spec.cert_state
}'

Erwartet: has_origin_pools: false, has_csd: false, domains weiterhin befüllt, cert_state unverändert (z. B. CertificateValid).

Pfad B: Vollständiges Löschen (Namespace während Demo erstellt)

Abschnitt betitelt „Pfad B: Vollständiges Löschen (Namespace während Demo erstellt)“

Wenn der Namespace während dieser Demo-Sitzung erstellt wurde, muss der HTTPS LB vollständig gelöscht werden — die Skeleton-Beibehaltung ist unnötig, da der Namespace selbst am Ende des Abbaus entfernt wird.

Terminal-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"

Überprüfen: GET /api/config/namespaces/\{namespace\}/http_loadbalancers sollte ${F5XC_LB_NAME}-https nicht enthalten.

Den primären HTTP LB löschen:

Terminal-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"

Überprüfen: GET /api/config/namespaces/\{namespace\}/http_loadbalancers sollte ${F5XC_LB_NAME}-http nicht enthalten. Wenn das Objekt nach einem DELETE mit Rückgabe 200 noch in der Liste erscheint, 30 Sekunden warten und einmal erneut prüfen. Wenn es nach der zweiten Prüfung noch vorhanden ist, dem Operator melden — nicht fortfahren.

Terminal-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"

Überprüfen: GET /api/config/namespaces/\{namespace\}/origin_pools sollte den Pool-Namen nicht enthalten. Wenn das Objekt nach einem DELETE mit Rückgabe 200 noch in der Liste erscheint, 30 Sekunden warten und einmal erneut prüfen. Wenn es nach der zweiten Prüfung noch vorhanden ist, dem Operator melden.

Terminal-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"

Überprüfen: GET /api/config/namespaces/\{namespace\}/healthchecks sollte den Healthcheck-Namen nicht enthalten. Wenn das Objekt nach einem DELETE mit Rückgabe 200 noch in der Liste erscheint, 30 Sekunden warten und einmal erneut prüfen. Wenn es nach der zweiten Prüfung noch vorhanden ist, dem Operator melden.

Die CSD-Protected-Domain-Registrierung löschen. Die Protected Domain ist tenant-bezogen (nicht namespace-bezogen), aber sie ist ein CSD-Konfigurationsobjekt, das an dieses Deployment gebunden ist — keine gemeinsame Infrastruktur wie die DNS-Zone.

Terminal-Fenster
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"

Überprüfen: Protected Domains auflisten, um zu bestätigen, dass die Domain nicht mehr registriert ist:

Terminal-Fenster
curl -s -X GET \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains" \
| jq '.items // [] | map(.metadata.name)'

Dieser Schritt wird nur ausgeführt, wenn der Namespace während Phase 1 Schritt 0 erstellt wurde (NAMESPACE_CREATED=true). Wenn der Namespace bereits vorhanden war (NAMESPACE_CREATED=false), überspringen Sie diesen Schritt vollständig — der Namespace ist gemeinsame Infrastruktur, die nicht gelöscht werden darf.

Terminal-Fenster
if [ "$NAMESPACE_CREATED" = "true" ]; then
curl -s -X POST \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
-H "Content-Type: application/json" \
-d '{"name": "xF5XC_NAMESPACEx"}' \
"xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx/cascade_delete" | jq .
fi

Überprüfen: Bestätigen, dass der Namespace nicht mehr existiert:

Terminal-Fenster
curl -s -o /dev/null -w '%\{http_code\}' \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"

Erwartet: 404, wenn NAMESPACE_CREATED=true; 200, wenn NAMESPACE_CREATED=false.

ObjektLösch-StatusÜberprüfungs-Status
Mitigierte Domains (6)Alle 200 (leer \{\}) oder übersprungen, wenn Phase 3 nicht ausgeführtAnzahl 0 (oder 1 Phantom) — BESTANDEN
HTTPS Load Balancer (-https)200 (Skeleton-PUT) oder 200 (vollständiges DELETE, wenn NAMESPACE_CREATED=true)Skeleton bestätigt oder nicht in Liste — BESTANDEN
HTTP Load Balancer (-http)200 (leer \{\})Nicht in Liste — BESTANDEN
Origin Pool200 (leer \{\})Nicht in Liste — BESTANDEN
Healthcheck200 (leer \{\}) oder übersprungenNicht in Liste — BESTANDEN
Protected Domain200 (leer \{\})Nicht in Liste — BESTANDEN
DNS-ZoneNICHT gelöscht (gemeinsame Infra)Zone noch vorhanden — BESTANDEN
Namespace200 (Cascade-Delete), wenn NAMESPACE_CREATED=true, sonst übersprungen404 wenn gelöscht, 200 wenn beibehalten — BESTANDEN

Abbau abgeschlossen. Wenn der Namespace bereits vorhanden war (NAMESPACE_CREATED=false), wurden alle Deployment-Objekte bis auf das HTTPS LB-Skeleton entfernt, das das Let’s Encrypt-Zertifikat und die Domain-Bindung für den nächsten Demo-Durchlauf bewahrt. Wenn der Namespace während der Demo erstellt wurde (NAMESPACE_CREATED=true), wurden alle Objekte einschließlich HTTPS LB und Namespace vollständig gelöscht. Die DNS-Zone und ihre nicht verwalteten Einträge bleiben in beiden Fällen intakt.