- Início
- Defesa do lado do cliente
- Demo
- Fase 4 — Desmontagem
Fase 4 — Desmontagem
A Fase 4 remove todos os objetos criados durante o exercício na ordem inversa de dependência. Esta fase requer confirmação humana explícita antes de qualquer operação destrutiva.
Ordem de Desmontagem
Seção intitulada “Ordem de Desmontagem”Remova os objetos na ordem inversa de criação — exclua primeiro os objetos que dependem de outros objetos:
- Domínios Mitigados — excluir todos os domínios mitigados CSD criados na Fase 3
- HTTPS Load Balancer (
${F5XC_LB_NAME}-https) — reduzir ao esqueleto (preservar certificado Let’s Encrypt); DELETE completo seNAMESPACE_CREATED=trueou mediante solicitação explícita - HTTP Load Balancer (
${F5XC_LB_NAME}-http) — depende do Origin Pool - Origin Pool — depende do Healthcheck (se criado)
- Limpeza de zona DNS — o esqueleto do HTTPS LB retém seus registros A gerenciados e registros ACME (isso é desejado — mantém o certificado válido). Os registros gerenciados do HTTP LB são limpos automaticamente na exclusão. Os registros manuais em
default_rr_set_groupprecisam de limpeza manual viaPUT - Healthcheck — somente se criado na Fase 1 Etapa 1
- Domínio Protegido — excluir o registro de domínio protegido CSD
- Namespace — somente se criado durante a Fase 1 Etapa 0 (
NAMESPACE_CREATED=true)
Excluir Domínios Mitigados
Seção intitulada “Excluir Domínios Mitigados”Se a Fase 3 foi executada, exclua todos os domínios mitigados antes de remover os objetos de infraestrutura. A simulação padrão cria 6 domínios mitigados:
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"doneVerificação: Liste os domínios mitigados para confirmar que a contagem é 0 (ou 1 — veja a nota abaixo):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'HTTPS Load Balancer
Seção intitulada “HTTPS Load Balancer”O comportamento de desmontagem do HTTPS LB depende de se o namespace foi criado durante esta sessão de demonstração (variável NAMESPACE_CREATED da Fase 1 Etapa 0):
NAMESPACE_CREATED=false(namespace pré-existente) — reduzir ao estado de esqueleto, preservando o certificado Let’s Encrypt para reutilizaçãoNAMESPACE_CREATED=true(namespace criado durante a demonstração) — DELETE completo, pois o próprio namespace será excluído e o certificado não pode ser preservado
Caminho A: Reduzir ao Esqueleto (Namespace Pré-existente)
Seção intitulada “Caminho A: Reduzir ao Esqueleto (Namespace Pré-existente)”Quando o namespace é pré-existente, reduza o HTTPS LB ao estado de esqueleto — remova a referência ao origin pool e a configuração CSD, preservando o vínculo de domínio, as configurações https_auto_cert e o certificado Let’s Encrypt. Isso evita acionar uma nova solicitação de certificado na próxima execução da demonstração (o Let’s Encrypt impõe um limite de 5 certificados duplicados por conjunto exato de identificadores a cada 7 dias).
Etapa 1 — GET da configuração atual do HTTPS LB:
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")Etapa 2 — Reduzir ao esqueleto via jq e aplicar PUT:
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 .O filtro jq preserva toda a spec (domínios, https_auto_cert, advertise_on_public_default_vip e todos os sinalizadores de funcionalidades desativados) enquanto remove client_side_defense (substituído por disable_client_side_defense: {}) e limpa default_route_pools para um array vazio. O certificado e os vínculos DNS permanecem intactos.
Verificação de que o HTTPS LB está agora como esqueleto:
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 }'Esperado: has_origin_pools: false, has_csd: false, domains ainda preenchido, cert_state inalterado (ex.: CertificateValid).
Caminho B: DELETE Completo (Namespace Criado Durante a Demonstração)
Seção intitulada “Caminho B: DELETE Completo (Namespace Criado Durante a Demonstração)”Quando o namespace foi criado durante esta sessão de demonstração, o HTTPS LB deve ser completamente excluído — a preservação do esqueleto é desnecessária porque o próprio namespace será removido no final da desmontagem.
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-https"Verificação: GET /api/config/namespaces/\{namespace\}/http_loadbalancers não deve conter ${F5XC_LB_NAME}-https.
Excluir HTTP Load Balancer
Seção intitulada “Excluir HTTP Load Balancer”Exclua o HTTP LB principal:
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/http_loadbalancers/xF5XC_LB_NAMEx-http"Verificação: GET /api/config/namespaces/\{namespace\}/http_loadbalancers não deve conter ${F5XC_LB_NAME}-http. Se o objeto ainda aparecer na lista após o DELETE retornar 200, aguarde 30 segundos e verifique novamente. Se ainda estiver presente após a segunda verificação, informe ao operador — não prossiga.
Excluir Origin Pool
Seção intitulada “Excluir Origin Pool”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/origin_pools/xF5XC_ORIGIN_POOLx"Verificação: GET /api/config/namespaces/\{namespace\}/origin_pools não deve conter o nome do pool. Se o objeto ainda aparecer na lista após o DELETE retornar 200, aguarde 30 segundos e verifique novamente. Se ainda estiver presente após a segunda verificação, informe ao operador.
Excluir Healthcheck
Seção intitulada “Excluir Healthcheck”curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/config/namespaces/xF5XC_NAMESPACEx/healthchecks/xF5XC_HC_NAMEx"Verificação: GET /api/config/namespaces/\{namespace\}/healthchecks não deve conter o nome do healthcheck. Se o objeto ainda aparecer na lista após o DELETE retornar 200, aguarde 30 segundos e verifique novamente. Se ainda estiver presente após a segunda verificação, informe ao operador.
Excluir Domínio Protegido
Seção intitulada “Excluir Domínio Protegido”Exclua o registro de domínio protegido CSD. O domínio protegido tem escopo de tenant (não de namespace), mas é um objeto de configuração CSD vinculado a esta implantação — não é uma infraestrutura compartilhada como a zona DNS.
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"Verificação: Liste os domínios protegidos para confirmar que o domínio não está mais registrado:
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)'Excluir Namespace (Condicional)
Seção intitulada “Excluir Namespace (Condicional)”Esta etapa é executada somente se o namespace foi criado durante a Fase 1 Etapa 0 (NAMESPACE_CREATED=true). Se o namespace era pré-existente (NAMESPACE_CREATED=false), ignore esta etapa completamente — o namespace é uma infraestrutura compartilhada que não deve ser excluída.
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 .fiVerificação: Confirme que o namespace não existe mais:
curl -s -o /dev/null -w '%\{http_code\}' \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/web/namespaces/xF5XC_NAMESPACEx"Esperado: 404 se NAMESPACE_CREATED=true, 200 se NAMESPACE_CREATED=false.
Resumo de Evidências da Fase 4
Seção intitulada “Resumo de Evidências da Fase 4”| Objeto | Status de Exclusão | Status de Verificação |
|---|---|---|
| Domínios Mitigados (6) | Todos 200 (vazio \{\}) ou ignorado se a Fase 3 não foi executada | Contagem 0 (ou 1 fantasma) — APROVADO |
HTTPS Load Balancer (-https) | 200 (PUT esqueleto) ou 200 (DELETE completo se NAMESPACE_CREATED=true) | Esqueleto verificado ou não na lista — APROVADO |
HTTP Load Balancer (-http) | 200 (vazio \{\}) | Não na lista — APROVADO |
| Origin Pool | 200 (vazio \{\}) | Não na lista — APROVADO |
| Healthcheck | 200 (vazio \{\}) ou ignorado | Não na lista — APROVADO |
| Domínio Protegido | 200 (vazio \{\}) | Não na lista — APROVADO |
| Zona DNS | NÃO excluída (infraestrutura compartilhada) | Zona ainda existe — APROVADO |
| Namespace | 200 (exclusão em cascata) se NAMESPACE_CREATED=true, ignorado caso contrário | 404 se excluído, 200 se preservado — APROVADO |
Desmontagem concluída. Quando o namespace era pré-existente (NAMESPACE_CREATED=false), todos os objetos de implantação foram removidos, exceto o esqueleto do HTTPS LB, que preserva o certificado Let’s Encrypt e o vínculo de domínio para a próxima execução da demonstração. Quando o namespace foi criado durante a demonstração (NAMESPACE_CREATED=true), todos os objetos, incluindo o HTTPS LB e o namespace, foram completamente excluídos. A zona DNS e seus registros não gerenciados permanecem intactos em ambos os casos.