Aller au contenu

Phase 4 — Démontage

La Phase 4 supprime tous les objets créés lors de l’exercice dans l’ordre inverse des dépendances. Cette phase nécessite une confirmation explicite de l’opérateur humain avant toute opération destructive.

Supprimez les objets dans l’ordre inverse de création — supprimez d’abord les objets qui dépendent d’autres objets :

  1. Domaines atténués — supprimer tous les domaines atténués CSD créés en Phase 3
  2. Équilibreur de charge HTTPS (${F5XC_LB_NAME}-https) — réduire à l’état squelette (conserver le certificat Let’s Encrypt) ; suppression complète (DELETE) si NAMESPACE_CREATED=true ou sur demande explicite
  3. Équilibreur de charge HTTP (${F5XC_LB_NAME}-http) — dépend du pool d’origine
  4. Pool d’origine — dépend du contrôle de santé (si créé)
  5. Nettoyage de la zone DNS — le squelette de l’équilibreur de charge HTTPS conserve ses enregistrements A gérés et ACME (c’est intentionnel — cela maintient le certificat valide). Les enregistrements gérés de l’équilibreur de charge HTTP sont automatiquement supprimés lors de la suppression. Les enregistrements manuels dans default_rr_set_group nécessitent un nettoyage manuel via PUT
  6. Contrôle de santé — uniquement s’il a été créé à la Phase 1 Étape 1
  7. Domaine protégé — supprimer l’enregistrement du domaine protégé CSD
  8. Espace de noms — uniquement s’il a été créé lors de la Phase 1 Étape 0 (NAMESPACE_CREATED=true)

Si la Phase 3 a été exécutée, supprimez tous les domaines atténués avant de supprimer les objets d’infrastructure. La simulation standard crée 6 domaines atténués :

Fenêtre de terminal
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

Vérification : Listez les domaines atténués pour confirmer que le nombre est 0 (ou 1 — voir la note ci-dessous) :

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

Le comportement du démontage de l’équilibreur de charge HTTPS dépend de si l’espace de noms a été créé lors de cette session de démo (variable NAMESPACE_CREATED de la Phase 1 Étape 0) :

  • NAMESPACE_CREATED=false (espace de noms préexistant) — réduire à l’état squelette, en préservant le certificat Let’s Encrypt pour réutilisation
  • NAMESPACE_CREATED=true (espace de noms créé pendant la démo) — suppression complète (DELETE), car l’espace de noms lui-même sera supprimé et le certificat ne peut pas être conservé

Chemin A : Réduction à l’état squelette (espace de noms préexistant)

Section intitulée « Chemin A : Réduction à l’état squelette (espace de noms préexistant) »

Lorsque l’espace de noms est préexistant, réduisez l’équilibreur de charge HTTPS à un état squelette — supprimez la référence au pool d’origine et la configuration CSD tout en préservant la liaison de domaine, les paramètres https_auto_cert et le certificat Let’s Encrypt. Cela évite de déclencher une nouvelle demande de certificat lors de la prochaine exécution de la démo (Let’s Encrypt applique une limite de 5 certificats en double par ensemble d’identifiants exact sur 7 jours).

Étape 1 — Récupérer la configuration actuelle de l’équilibreur de charge HTTPS :

Fenêtre de terminal
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")

Étape 2 — Réduire à l’état squelette via jq et remettre en place via PUT :

Fenêtre de terminal
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 .

Le filtre jq préserve l’intégralité du spec (domaines, https_auto_cert, advertise_on_public_default_vip et tous les indicateurs de fonctionnalités désactivés) tout en supprimant client_side_defense (remplacé par disable_client_side_defense: {}) et en vidant default_route_pools dans un tableau vide. Le certificat et les liaisons DNS restent intacts.

Vérifiez que l’équilibreur de charge HTTPS est maintenant à l’état squelette :

Fenêtre de terminal
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
}'

Résultat attendu : has_origin_pools: false, has_csd: false, domains toujours renseigné, cert_state inchangé (par ex. CertificateValid).

Chemin B : Suppression complète (espace de noms créé pendant la démo)

Section intitulée « Chemin B : Suppression complète (espace de noms créé pendant la démo) »

Lorsque l’espace de noms a été créé lors de cette session de démo, l’équilibreur de charge HTTPS doit être entièrement supprimé — la préservation du squelette est inutile car l’espace de noms lui-même sera supprimé à la fin du démontage.

Fenêtre de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"

Vérification : GET /api/config/namespaces/\{namespace\}/http_loadbalancers ne doit pas contenir ${F5XC_LB_NAME}-https.

Supprimez l’équilibreur de charge HTTP principal :

Fenêtre de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"

Vérification : GET /api/config/namespaces/\{namespace\}/http_loadbalancers ne doit pas contenir ${F5XC_LB_NAME}-http. Si l’objet apparaît toujours dans la liste après que le DELETE a renvoyé 200, attendez 30 secondes et vérifiez à nouveau. S’il est toujours présent après la deuxième vérification, signalez-le à l’opérateur — ne continuez pas.

Fenêtre de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"

Vérification : GET /api/config/namespaces/\{namespace\}/origin_pools ne doit pas contenir le nom du pool. Si l’objet apparaît toujours dans la liste après que le DELETE a renvoyé 200, attendez 30 secondes et vérifiez à nouveau. S’il est toujours présent après la deuxième vérification, signalez-le à l’opérateur.

Fenêtre de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"

Vérification : GET /api/config/namespaces/\{namespace\}/healthchecks ne doit pas contenir le nom du contrôle de santé. Si l’objet apparaît toujours dans la liste après que le DELETE a renvoyé 200, attendez 30 secondes et vérifiez à nouveau. S’il est toujours présent après la deuxième vérification, signalez-le à l’opérateur.

Supprimez l’enregistrement du domaine protégé CSD. Le domaine protégé est limité au tenant (non limité à l’espace de noms), mais c’est un objet de configuration CSD lié à ce déploiement — il ne s’agit pas d’une infrastructure partagée comme la zone DNS.

Fenêtre de terminal
curl -s -X DELETE \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"

Vérification : Listez les domaines protégés pour confirmer que le domaine n’est plus enregistré :

Fenêtre de terminal
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)'

Cette étape s’exécute uniquement si l’espace de noms a été créé lors de la Phase 1 Étape 0 (NAMESPACE_CREATED=true). Si l’espace de noms était préexistant (NAMESPACE_CREATED=false), ignorez entièrement cette étape — l’espace de noms est une infrastructure partagée qui ne doit pas être supprimée.

Fenêtre de terminal
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

Vérification : Confirmez que l’espace de noms n’existe plus :

Fenêtre de terminal
curl -s -o /dev/null -w '%\{http_code\}' \
-H "Authorization: APIToken xF5XC_API_TOKENx" \
"xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"

Résultat attendu : 404 si NAMESPACE_CREATED=true, 200 si NAMESPACE_CREATED=false.

ObjetStatut de suppressionStatut de vérification
Domaines atténués (6)Tous 200 (vide \{\}) ou ignorés si la Phase 3 n’a pas été exécutéeNombre 0 (ou 1 fantôme) — RÉUSSI
Équilibreur de charge HTTPS (-https)200 (PUT squelette) ou 200 (suppression complète si NAMESPACE_CREATED=true)Squelette vérifié ou absent de la liste — RÉUSSI
Équilibreur de charge HTTP (-http)200 (vide \{\})Absent de la liste — RÉUSSI
Pool d’origine200 (vide \{\})Absent de la liste — RÉUSSI
Contrôle de santé200 (vide \{\}) ou ignoréAbsent de la liste — RÉUSSI
Domaine protégé200 (vide \{\})Absent de la liste — RÉUSSI
Zone DNSNON supprimée (infrastructure partagée)Zone toujours existante — RÉUSSI
Espace de noms200 (suppression en cascade) si NAMESPACE_CREATED=true, ignoré sinon404 si supprimé, 200 si conservé — RÉUSSI

Démontage terminé. Lorsque l’espace de noms était préexistant (NAMESPACE_CREATED=false), tous les objets de déploiement ont été supprimés à l’exception du squelette de l’équilibreur de charge HTTPS, qui préserve le certificat Let’s Encrypt et la liaison de domaine pour la prochaine exécution de la démo. Lorsque l’espace de noms a été créé pendant la démo (NAMESPACE_CREATED=true), tous les objets, y compris l’équilibreur de charge HTTPS et l’espace de noms, ont été entièrement supprimés. La zone DNS et ses enregistrements non gérés restent intacts dans les deux cas.