Salta ai contenuti

Fase 4 — Smantellamento

La Fase 4 rimuove tutti gli oggetti creati durante l’esercizio in ordine inverso rispetto alle dipendenze. Questa fase richiede una conferma esplicita da parte dell’operatore umano prima di qualsiasi operazione distruttiva.

Rimuovere gli oggetti in ordine inverso rispetto alla creazione — eliminare prima gli oggetti che dipendono da altri oggetti:

  1. Domini mitigati — eliminare tutti i domini mitigati CSD creati nella Fase 3
  2. HTTPS Load Balancer (${F5XC_LB_NAME}-https) — ridurre allo scheletro (preservare il certificato Let’s Encrypt); DELETE completo se NAMESPACE_CREATED=true o su richiesta esplicita
  3. HTTP Load Balancer (${F5XC_LB_NAME}-http) — dipende dall’Origin Pool
  4. Origin Pool — dipende dall’Healthcheck (se creato)
  5. Pulizia della zona DNS — lo scheletro dell’HTTPS LB mantiene i propri record A gestiti e i record ACME (comportamento desiderato — mantiene valido il certificato). I record gestiti dell’HTTP LB vengono eliminati automaticamente alla cancellazione. I record manuali in default_rr_set_group richiedono una pulizia manuale tramite PUT
  6. Healthcheck — solo se creato nella Fase 1 Passo 1
  7. Dominio protetto — eliminare la registrazione del dominio protetto CSD
  8. Namespace — solo se creato durante la Fase 1 Passo 0 (NAMESPACE_CREATED=true)

Se la Fase 3 è stata eseguita, eliminare tutti i domini mitigati prima di rimuovere gli oggetti di infrastruttura. La simulazione standard crea 6 domini mitigati:

Terminal window
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

Verificare: Elencare i domini mitigati per confermare che il conteggio sia 0 (o 1 — vedere la nota di seguito):

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

Il comportamento dello smantellamento dell’HTTPS LB dipende dall’eventuale creazione del namespace durante questa sessione demo (variabile NAMESPACE_CREATED dalla Fase 1 Passo 0):

  • NAMESPACE_CREATED=false (namespace preesistente) — ridurre allo stato di scheletro, preservando il certificato Let’s Encrypt per il riutilizzo
  • NAMESPACE_CREATED=true (namespace creato durante la demo) — DELETE completo, poiché il namespace stesso verrà eliminato e il certificato non potrà essere preservato

Percorso A: Riduzione allo Scheletro (Namespace Preesistente)

Sezione intitolata “Percorso A: Riduzione allo Scheletro (Namespace Preesistente)”

Quando il namespace è preesistente, ridurre l’HTTPS LB allo stato di scheletro — rimuovere il riferimento all’origin pool e la configurazione CSD preservando il binding del dominio, le impostazioni https_auto_cert e il certificato Let’s Encrypt. Ciò evita di avviare una nuova richiesta di certificato alla successiva esecuzione della demo (Let’s Encrypt impone un limite di 5 certificati duplicati per set di identificatori esatto ogni 7 giorni).

Passo 1 — GET della configurazione corrente dell’HTTPS LB:

Terminal window
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")

Passo 2 — Riduzione allo scheletro tramite jq e PUT:

Terminal window
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 .

Il filtro jq preserva l’intera spec (domini, https_auto_cert, advertise_on_public_default_vip e tutti i flag di funzionalità disabilitati) rimuovendo client_side_defense (sostituito con disable_client_side_defense: {}) e svuotando default_route_pools in un array vuoto. Il certificato e i binding DNS rimangono intatti.

Verificare che l’HTTPS LB sia ora uno scheletro:

Terminal window
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
}'

Risultato atteso: has_origin_pools: false, has_csd: false, domains ancora popolato, cert_state invariato (es. CertificateValid).

Percorso B: DELETE Completo (Namespace Creato Durante la Demo)

Sezione intitolata “Percorso B: DELETE Completo (Namespace Creato Durante la Demo)”

Quando il namespace è stato creato durante questa sessione demo, l’HTTPS LB deve essere eliminato completamente — la preservazione dello scheletro non è necessaria poiché il namespace stesso verrà rimosso alla fine dello smantellamento.

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

Verificare: GET /api/config/namespaces/\{namespace\}/http_loadbalancers non deve contenere ${F5XC_LB_NAME}-https.

Eliminare l’HTTP LB primario:

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

Verificare: GET /api/config/namespaces/\{namespace\}/http_loadbalancers non deve contenere ${F5XC_LB_NAME}-http. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore — non procedere.

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

Verificare: GET /api/config/namespaces/\{namespace\}/origin_pools non deve contenere il nome del pool. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore.

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

Verificare: GET /api/config/namespaces/\{namespace\}/healthchecks non deve contenere il nome dell’healthcheck. Se l’oggetto compare ancora nell’elenco dopo che DELETE ha restituito 200, attendere 30 secondi e ricontrollare una volta. Se ancora presente dopo il secondo controllo, segnalare all’operatore.

Eliminare la registrazione del dominio protetto CSD. Il dominio protetto è con scope di tenant (non di namespace), ma è un oggetto di configurazione CSD legato a questo deployment — non un’infrastruttura condivisa come la zona DNS.

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

Verificare: Elencare i domini protetti per confermare che il dominio non sia più registrato:

Terminal window
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)'

Questo passo viene eseguito solo se il namespace è stato creato durante la Fase 1 Passo 0 (NAMESPACE_CREATED=true). Se il namespace era preesistente (NAMESPACE_CREATED=false), saltare completamente questo passo — il namespace è un’infrastruttura condivisa che non deve essere eliminata.

Terminal window
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

Verificare: Confermare che il namespace non esista più:

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

Risultato atteso: 404 se NAMESPACE_CREATED=true, 200 se NAMESPACE_CREATED=false.

OggettoStato EliminazioneStato Verifica
Domini Mitigati (6)Tutti 200 (vuoto \{\}) o saltati se la Fase 3 non è stata eseguitaConteggio 0 (o 1 fantasma) — PASS
HTTPS Load Balancer (-https)200 (PUT scheletro) o 200 (DELETE completo se NAMESPACE_CREATED=true)Scheletro verificato o non nell’elenco — PASS
HTTP Load Balancer (-http)200 (vuoto \{\})Non nell’elenco — PASS
Origin Pool200 (vuoto \{\})Non nell’elenco — PASS
Healthcheck200 (vuoto \{\}) o saltatoNon nell’elenco — PASS
Dominio Protetto200 (vuoto \{\})Non nell’elenco — PASS
Zona DNSNON eliminata (infrastruttura condivisa)Zona ancora esistente — PASS
Namespace200 (eliminazione a cascata) se NAMESPACE_CREATED=true, altrimenti saltato404 se eliminato, 200 se preservato — PASS

Smantellamento completato. Quando il namespace era preesistente (NAMESPACE_CREATED=false), tutti gli oggetti di deployment sono stati rimossi ad eccezione dello scheletro dell’HTTPS LB, che preserva il certificato Let’s Encrypt e il binding del dominio per la successiva esecuzione della demo. Quando il namespace è stato creato durante la demo (NAMESPACE_CREATED=true), tutti gli oggetti inclusi l’HTTPS LB e il namespace sono stati eliminati completamente. La zona DNS e i suoi record non gestiti rimangono intatti in entrambi i casi.