- 홈
- 클라이언트 측 방어
- Demo
- 4단계 — 해제
4단계 — 해제
4단계는 실습 중에 생성된 모든 객체를 역 의존성 순서로 제거합니다. 이 단계에서는 파괴적인 작업을 실행하기 전에 명시적인 사람의 확인이 필요합니다.
해제 순서
섹션 제목: “해제 순서”역 생성 순서로 객체를 제거하십시오 — 다른 객체에 의존하는 객체를 먼저 삭제합니다:
- 완화된 도메인 — 3단계에서 생성된 모든 CSD 완화 도메인 삭제
- HTTPS 부하 분산기 (
${F5XC_LB_NAME}-https) — 스켈레톤 상태로 제거 (Let’s Encrypt 인증서 보존);NAMESPACE_CREATED=true인 경우 또는 명시적 요청이 있는 경우 전체 DELETE - HTTP 부하 분산기 (
${F5XC_LB_NAME}-http) — 오리진 풀에 의존 - 오리진 풀 — 헬스체크에 의존 (생성된 경우)
- DNS 영역 정리 — HTTPS LB 스켈레톤은 관리되는 A 및 ACME 레코드를 유지합니다 (이는 의도된 동작입니다 — 인증서를 유효하게 유지합니다). HTTP LB의 관리되는 레코드는 삭제 시 자동으로 정리됩니다.
default_rr_set_group의 수동 레코드는PUT을 통해 수동으로 정리해야 합니다 - 헬스체크 — 1단계 1번 단계에서 생성된 경우에만
- 보호된 도메인 — CSD 보호 도메인 등록 삭제
- 네임스페이스 — 1단계 0번 단계에서 생성된 경우에만 (
NAMESPACE_CREATED=true)
완화된 도메인 삭제
섹션 제목: “완화된 도메인 삭제”3단계가 실행된 경우, 인프라 객체를 제거하기 전에 모든 완화 도메인을 삭제하십시오. 표준 시뮬레이션은 6개의 완화 도메인을 생성합니다:
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 — 아래 참고 사항 참조):
curl -s \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/mitigated_domains" \ | jq '{count: (.items | length)}'HTTPS 부하 분산기
섹션 제목: “HTTPS 부하 분산기”HTTPS LB 해제 동작은 이 데모 세션 중에 네임스페이스가 생성되었는지 여부에 따라 달라집니다 (1단계 0번 단계의 NAMESPACE_CREATED 변수):
NAMESPACE_CREATED=false(기존 네임스페이스) — 재사용을 위해 Let’s Encrypt 인증서를 보존하며 스켈레톤 상태로 제거NAMESPACE_CREATED=true(데모 중 생성된 네임스페이스) — 네임스페이스 자체가 삭제되고 인증서를 보존할 수 없으므로 전체 DELETE
경로 A: 스켈레톤으로 제거 (기존 네임스페이스)
섹션 제목: “경로 A: 스켈레톤으로 제거 (기존 네임스페이스)”네임스페이스가 기존 것인 경우, HTTPS LB를 스켈레톤 상태로 제거하십시오 — 도메인 바인딩, https_auto_cert 설정, Let’s Encrypt 인증서를 보존하면서 오리진 풀 참조와 CSD 구성을 제거합니다. 이렇게 하면 다음 데모 실행 시 새 인증서 요청이 트리거되는 것을 방지할 수 있습니다 (Let’s Encrypt는 7일당 정확히 동일한 식별자 집합에 대해 중복 인증서를 5개로 제한합니다).
1단계 — 현재 HTTPS LB 구성 GET:
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 반환:
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_cert, advertise_on_public_default_vip, 모든 비활성화된 기능 플래그)을 보존하면서 client_side_defense를 제거하고 (disable_client_side_defense: {}로 대체), default_route_pools를 빈 배열로 초기화합니다. 인증서와 DNS 바인딩은 그대로 유지됩니다.
확인 HTTPS LB가 이제 스켈레톤 상태인지 확인:
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: false, has_csd: false, domains는 여전히 채워져 있음, cert_state는 변경 없음 (예: CertificateValid).
경로 B: 전체 삭제 (데모 중 생성된 네임스페이스)
섹션 제목: “경로 B: 전체 삭제 (데모 중 생성된 네임스페이스)”데모 세션 중에 네임스페이스가 생성된 경우, HTTPS LB를 전체 삭제해야 합니다 — 해제 마지막 단계에서 네임스페이스 자체가 제거될 것이므로 스켈레톤 보존은 불필요합니다.
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 부하 분산기 삭제
섹션 제목: “HTTP 부하 분산기 삭제”기본 HTTP LB를 삭제합니다:
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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하고 진행하지 마십시오.
오리진 풀 삭제
섹션 제목: “오리진 풀 삭제”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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하십시오.
헬스체크 삭제
섹션 제목: “헬스체크 삭제”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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하십시오.
보호된 도메인 삭제
섹션 제목: “보호된 도메인 삭제”CSD 보호 도메인 등록을 삭제합니다. 보호된 도메인은 테넌트 범위(네임스페이스 범위가 아님)이지만, DNS 영역과 같은 공유 인프라가 아닌 이 배포에 연결된 CSD 구성 객체입니다.
curl -s -X DELETE \ -H "Authorization: APIToken xF5XC_API_TOKENx" \ "xF5XC_API_URLx/api/shape/csd/namespaces/xF5XC_NAMESPACEx/protected_domains/xF5XC_ROOT_DOMAINx"확인: 보호된 도메인을 나열하여 도메인이 더 이상 등록되지 않았는지 확인하십시오:
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)'네임스페이스 삭제 (조건부)
섹션 제목: “네임스페이스 삭제 (조건부)”이 단계는 오직 1단계 0번 단계에서 네임스페이스가 생성된 경우에만 실행됩니다 (NAMESPACE_CREATED=true). 네임스페이스가 기존 것인 경우 (NAMESPACE_CREATED=false), 이 단계를 완전히 건너뛰십시오 — 네임스페이스는 삭제해서는 안 되는 공유 인프라입니다.
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확인: 네임스페이스가 더 이상 존재하지 않는지 확인하십시오:
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인 경우 404, NAMESPACE_CREATED=false인 경우 200.
4단계 증거 요약
섹션 제목: “4단계 증거 요약”| 객체 | 삭제 상태 | 확인 상태 |
|---|---|---|
| 완화된 도메인 (6개) | 모두 200 (빈 \{\}) 또는 3단계가 실행되지 않은 경우 건너뜀 | 수 0 (또는 1 가상) — PASS |
HTTPS 부하 분산기 (-https) | 200 (스켈레톤 PUT) 또는 200 (전체 DELETE, NAMESPACE_CREATED=true인 경우) | 스켈레톤 확인 또는 목록에 없음 — PASS |
HTTP 부하 분산기 (-http) | 200 (빈 \{\}) | 목록에 없음 — PASS |
| 오리진 풀 | 200 (빈 \{\}) | 목록에 없음 — PASS |
| 헬스체크 | 200 (빈 \{\}) 또는 건너뜀 | 목록에 없음 — PASS |
| 보호된 도메인 | 200 (빈 \{\}) | 목록에 없음 — PASS |
| DNS 영역 | 삭제하지 않음 (공유 인프라) | 영역 여전히 존재 — PASS |
| 네임스페이스 | NAMESPACE_CREATED=true인 경우 200 (캐스케이드 삭제), 그렇지 않으면 건너뜀 | 삭제된 경우 404, 보존된 경우 200 — PASS |
해제 완료. 네임스페이스가 기존 것인 경우 (NAMESPACE_CREATED=false), HTTPS LB 스켈레톤을 제외한 모든 배포 객체가 제거되었으며, 이 스켈레톤은 다음 데모 실행을 위해 Let’s Encrypt 인증서와 도메인 바인딩을 보존합니다. 데모 중에 네임스페이스가 생성된 경우 (NAMESPACE_CREATED=true), HTTPS LB와 네임스페이스를 포함한 모든 객체가 완전히 삭제되었습니다. DNS 영역과 비관리 레코드는 두 경우 모두 그대로 유지됩니다.