콘텐츠로 이동

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: 스켈레톤으로 제거 (기존 네임스페이스)

섹션 제목: “경로 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_cert, advertise_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: false, has_csd: false, domains는 여전히 채워져 있음, cert_state는 변경 없음 (예: CertificateValid).

경로 B: 전체 삭제 (데모 중 생성된 네임스페이스)

섹션 제목: “경로 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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하고 진행하지 마십시오.

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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하십시오.

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초 후 다시 확인하십시오. 두 번째 확인 후에도 여전히 존재한다면 운영자에게 보고하십시오.

CSD 보호 도메인 등록을 삭제합니다. 보호된 도메인은 테넌트 범위(네임스페이스 범위가 아님)이지만, DNS 영역과 같은 공유 인프라가 아닌 이 배포에 연결된 CSD 구성 객체입니다.

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

이 단계는 오직 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인 경우 404, NAMESPACE_CREATED=false인 경우 200.

객체삭제 상태확인 상태
완화된 도메인 (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 영역과 비관리 레코드는 두 경우 모두 그대로 유지됩니다.