コンテンツにスキップ

フェーズ 4 — ティアダウン

フェーズ 4 では、演習中に作成されたすべてのオブジェクトを依存関係の逆順で削除します。このフェーズでは、破壊的な操作を行う前に人間による明示的な確認が必要です。

オブジェクトを作成の逆順で削除します — 他のオブジェクトに依存するオブジェクトを先に削除します:

  1. 緩和済みドメイン — フェーズ 3 で作成したすべての CSD 緩和済みドメインを削除する
  2. HTTPS ロードバランサー (${F5XC_LB_NAME}-https) — スケルトン状態に縮小する(Let’s Encrypt 証明書を保持)。NAMESPACE_CREATED=true の場合または明示的なリクエストがある場合は完全 DELETE
  3. HTTP ロードバランサー (${F5XC_LB_NAME}-http) — オリジンプールに依存
  4. オリジンプール — ヘルスチェックに依存(作成された場合)
  5. DNS ゾーンのクリーンアップ — HTTPS LB スケルトンはその管理対象 A レコードと ACME レコードを保持します(これは意図された動作であり、証明書の有効性を維持します)。HTTP LB の管理対象レコードは削除時に自動クリーンアップされます。default_rr_set_group 内の手動レコードは PUT による手動クリーンアップが必要です
  6. ヘルスチェック — フェーズ 1 ステップ 1 で作成された場合のみ
  7. 保護済みドメイン — CSD 保護済みドメイン登録を削除する
  8. ネームスペース — フェーズ 1 ステップ 0 で作成された場合のみ (NAMESPACE_CREATED=true)

フェーズ 3 が実行された場合は、インフラストラクチャオブジェクトを削除する前にすべての緩和済みドメインを削除します。標準シミュレーションでは 6 つの緩和済みドメインが作成されます:

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

確認: 緩和済みドメインを一覧表示して、件数が 0(または 1 — 以下の注記を参照)であることを確認します:

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)}'

HTTPS LB のティアダウン動作は、このデモセッション中にネームスペースが作成されたかどうか(フェーズ 1 ステップ 0 の NAMESPACE_CREATED 変数)によって異なります:

  • NAMESPACE_CREATED=false(既存のネームスペース)— スケルトン状態に縮小し、Let’s Encrypt 証明書を再利用のために保持する
  • NAMESPACE_CREATED=true(デモ中に作成されたネームスペース)— 完全 DELETE。ネームスペース自体が削除されるため、証明書を保持できないため

パス A: スケルトンへの縮小(既存のネームスペース)

Section titled “パス A: スケルトンへの縮小(既存のネームスペース)”

ネームスペースが既存の場合、HTTPS LB をスケルトン状態に縮小します — ドメインバインディング、https_auto_cert 設定、および Let’s Encrypt 証明書を保持しながら、オリジンプールの参照と CSD 設定を削除します。これにより、次回のデモ実行時に新しい証明書リクエストのトリガーを回避できます(Let’s Encrypt は 7 日間あたり同一識別子セットにつき 5 つの重複証明書という制限を設けています)。

ステップ 1 — 現在の HTTPS LB 設定を GET する:

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

ステップ 2 — jq でスケルトンに縮小して 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 .

jq フィルターは spec 全体(ドメイン、https_auto_certadvertise_on_public_default_vip、およびすべての無効化された機能フラグ)を保持しながら、client_side_defense を削除(disable_client_side_defense: {} に置き換え)し、default_route_pools を空の配列にクリアします。証明書と DNS バインディングはそのまま維持されます。

確認 — HTTPS LB がスケルトン状態であることを確認します:

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

期待される結果: has_origin_pools: falsehas_csd: falsedomains は引き続き設定済み、cert_state は変更なし(例: CertificateValid)。

パス B: 完全削除(デモ中に作成されたネームスペース)

Section titled “パス B: 完全削除(デモ中に作成されたネームスペース)”

このデモセッション中にネームスペースが作成された場合、HTTPS LB は完全に削除する必要があります — ティアダウンの最後にネームスペース自体が削除されるため、スケルトンの保持は不要です。

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"

確認: GET /api/config/namespaces/\{namespace\}/http_loadbalancers${F5XC_LB_NAME}-https が含まれていないことを確認します。

プライマリ HTTP LB を削除します:

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"

確認: GET /api/config/namespaces/\{namespace\}/http_loadbalancers${F5XC_LB_NAME}-http が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください — 続行しないでください。

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"

確認: GET /api/config/namespaces/\{namespace\}/origin_pools にプール名が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください。

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

確認: GET /api/config/namespaces/\{namespace\}/healthchecks にヘルスチェック名が含まれていないことを確認します。DELETE が 200 を返した後もオブジェクトがリストに表示される場合は、30 秒待ってから再確認してください。2 回目の確認後も表示される場合は、オペレーターに報告してください。

CSD 保護済みドメイン登録を削除します。保護済みドメインはテナントスコープ(ネームスペーススコープではない)ですが、このデプロイに紐づく CSD 設定オブジェクトであり、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"

確認: 保護済みドメインを一覧表示して、ドメインが登録されていないことを確認します:

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

ネームスペースの削除(条件付き)

Section titled “ネームスペースの削除(条件付き)”

このステップは、フェーズ 1 ステップ 0 でネームスペースが作成された場合(NAMESPACE_CREATED=true)にのみ実行されます。ネームスペースが既存のものである場合(NAMESPACE_CREATED=false)、このステップを完全にスキップしてください — ネームスペースは共有インフラストラクチャであり、削除してはなりません。

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

確認: ネームスペースが存在しないことを確認します:

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

期待される結果: NAMESPACE_CREATED=true の場合は 404NAMESPACE_CREATED=false の場合は 200

フェーズ 4 エビデンスサマリー

Section titled “フェーズ 4 エビデンスサマリー”
オブジェクト削除ステータス確認ステータス
緩和済みドメイン (6)すべて 200(空の \{\})、またはフェーズ 3 が実行されていない場合はスキップ件数 0(または 1 のファントム)— PASS
HTTPS ロードバランサー (-https)200(スケルトン PUT)、または 200NAMESPACE_CREATED=true の場合は完全 DELETE)スケルトン確認済み、またはリストに存在しない — PASS
HTTP ロードバランサー (-http)200(空の \{\}リストに存在しない — PASS
オリジンプール200(空の \{\}リストに存在しない — PASS
ヘルスチェック200(空の \{\})、またはスキップリストに存在しない — PASS
保護済みドメイン200(空の \{\}リストに存在しない — PASS
DNS ゾーン削除しない(共有インフラ)ゾーンが引き続き存在する — PASS
ネームスペースNAMESPACE_CREATED=true の場合は 200(カスケード削除)、それ以外はスキップ削除済みの場合は 404、保持の場合は 200 — PASS

ティアダウン完了。 ネームスペースが既存のものであった場合(NAMESPACE_CREATED=false)、次回のデモ実行に向けて Let’s Encrypt 証明書とドメインバインディングを保持する HTTPS LB スケルトンを除き、すべてのデプロイオブジェクトが削除されています。デモ中にネームスペースが作成された場合(NAMESPACE_CREATED=true)、HTTPS LB とネームスペースを含むすべてのオブジェクトが完全に削除されています。いずれの場合も、DNS ゾーンとその非管理対象レコードはそのまま維持されます。