ข้ามไปยังเนื้อหา

เฟส 4 — การรื้อถอน

เฟส 4 จะลบออบเจกต์ทั้งหมดที่สร้างขึ้นในระหว่างการทดสอบตามลำดับความขึ้นต่อกันแบบย้อนกลับ เฟสนี้ต้องได้รับการยืนยันจากผู้ดูแลระบบก่อนดำเนินการใดๆ ที่เป็นการลบข้อมูล

ลบออบเจกต์ตามลำดับการสร้างแบบย้อนกลับ — ลบออบเจกต์ที่ขึ้นต่อกับออบเจกต์อื่นก่อน:

  1. โดเมนที่ถูกบรรเทา (Mitigated Domains) — ลบโดเมนที่ถูกบรรเทาของ CSD ทั้งหมดที่สร้างขึ้นในเฟส 3
  2. HTTPS Load Balancer (${F5XC_LB_NAME}-https) — ลดลงเป็น skeleton (เก็บใบรับรอง Let’s Encrypt ไว้); ลบทั้งหมดหาก NAMESPACE_CREATED=true หรือตามคำขอที่ชัดเจน
  3. HTTP Load Balancer (${F5XC_LB_NAME}-http) — ขึ้นต่อกับ Origin Pool
  4. Origin Pool — ขึ้นต่อกับ Healthcheck (หากสร้างขึ้น)
  5. การทำความสะอาด DNS zone — HTTPS LB skeleton จะเก็บ A record และ ACME record ที่จัดการไว้ (ซึ่งเป็นสิ่งที่ต้องการ — เพื่อให้ใบรับรองยังคงใช้งานได้) record ที่จัดการของ HTTP LB จะทำความสะอาดอัตโนมัติเมื่อลบ record ที่สร้างด้วยตนเองใน default_rr_set_group ต้องทำความสะอาดด้วยตนเองผ่าน PUT
  6. Healthcheck — เฉพาะในกรณีที่สร้างขึ้นในเฟส 1 ขั้นตอนที่ 1
  7. Protected Domain — ลบการลงทะเบียนโดเมนที่ได้รับการปกป้องของ CSD
  8. Namespace — เฉพาะในกรณีที่สร้างขึ้นในระหว่างเฟส 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 ขึ้นอยู่กับว่า namespace ถูกสร้างขึ้นในระหว่างเซสชันสาธิตนี้หรือไม่ (ตัวแปร NAMESPACE_CREATED จากเฟส 1 ขั้นตอนที่ 0):

  • NAMESPACE_CREATED=false (namespace ที่มีอยู่ก่อน) — ลดลงเป็นสถานะ skeleton โดยเก็บใบรับรอง Let’s Encrypt ไว้เพื่อนำมาใช้ซ้ำ
  • NAMESPACE_CREATED=true (namespace ที่สร้างขึ้นระหว่างการสาธิต) — ลบทั้งหมด เนื่องจาก namespace เองจะถูกลบและใบรับรองไม่สามารถเก็บไว้ได้

เมื่อ namespace มีอยู่ก่อน ให้ลด HTTPS LB ลงเป็นสถานะ skeleton — ลบการอ้างอิง origin pool และการกำหนดค่า CSD ออกในขณะที่เก็บการผูก domain, การตั้งค่า https_auto_cert และใบรับรอง Let’s Encrypt ไว้ วิธีนี้จะหลีกเลี่ยงการทริกเกอร์คำขอใบรับรองใหม่ในการสาธิตครั้งถัดไป (Let’s Encrypt บังคับใช้ขีดจำกัด 5 ใบรับรองที่ซ้ำกันต่อชุดตัวระบุที่แน่นอนต่อ 7 วัน)

ขั้นตอนที่ 1 — GET การกำหนดค่า 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")

ขั้นตอนที่ 2 — ลดลงเป็น skeleton ผ่าน 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 ทั้งหมดไว้ (domains, https_auto_cert, advertise_on_public_default_vip และ flag คุณสมบัติที่ปิดใช้งานทั้งหมด) ในขณะที่ลบ client_side_defense (แทนที่ด้วย disable_client_side_defense: {}) และล้าง default_route_pools เป็น array ว่าง ใบรับรองและการผูก DNS ยังคงสมบูรณ์

ตรวจสอบว่า HTTPS LB เป็น skeleton แล้ว:

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: ลบทั้งหมด (Namespace ที่สร้างขึ้นระหว่างการสาธิต)

หัวข้อที่มีชื่อว่า “เส้นทาง B: ลบทั้งหมด (Namespace ที่สร้างขึ้นระหว่างการสาธิต)”

เมื่อ namespace ถูกสร้างขึ้นในระหว่างเซสชันสาธิตนี้ HTTPS LB ต้องถูกลบทั้งหมด — การเก็บ skeleton ไว้ไม่จำเป็น เนื่องจาก namespace เองจะถูกลบในตอนท้ายของการรื้อถอน

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 ไม่ควรมีชื่อ pool หากออบเจกต์ยังคงปรากฏในรายการหลังจาก 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 ไม่ควรมีชื่อ healthcheck หากออบเจกต์ยังคงปรากฏในรายการหลังจาก DELETE ส่งคืน 200 ให้รอ 30 วินาทีและตรวจสอบอีกครั้ง หากยังคงปรากฏอยู่หลังจากการตรวจสอบครั้งที่สอง ให้รายงานผู้ดูแลระบบ

ลบการลงทะเบียน protected domain ของ CSD Protected domain มีขอบเขตระดับ tenant (ไม่ใช่ระดับ namespace) แต่เป็นออบเจกต์การกำหนดค่า CSD ที่เชื่อมโยงกับการปรับใช้งานนี้ — ไม่ใช่โครงสร้างพื้นฐานที่ใช้ร่วมกันอย่าง DNS zone

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"

ตรวจสอบ: แสดงรายการ protected domain เพื่อยืนยันว่า domain ไม่ได้ลงทะเบียนอีกต่อไป:

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

ขั้นตอนนี้จะดำเนินการเฉพาะในกรณีที่ namespace ถูกสร้างขึ้นในระหว่างเฟส 1 ขั้นตอนที่ 0 (NAMESPACE_CREATED=true) หาก namespace มีอยู่ก่อน (NAMESPACE_CREATED=false) ให้ข้ามขั้นตอนนี้ทั้งหมด — namespace เป็นโครงสร้างพื้นฐานที่ใช้ร่วมกันและต้องไม่ถูกลบ

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

ตรวจสอบ: ยืนยันว่า namespace ไม่มีอยู่อีกต่อไป:

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

ที่คาดหวัง: 404 หาก NAMESPACE_CREATED=true, 200 หาก NAMESPACE_CREATED=false

ออบเจกต์สถานะการลบสถานะการตรวจสอบ
โดเมนที่ถูกบรรเทา (6 โดเมน)ทั้งหมด 200 (ว่างเปล่า \{\}) หรือข้ามหากเฟส 3 ไม่ได้ดำเนินการจำนวน 0 (หรือ 1 phantom) — ผ่าน
HTTPS Load Balancer (-https)200 (skeleton PUT) หรือ 200 (ลบทั้งหมดหาก NAMESPACE_CREATED=true)ตรวจสอบ skeleton หรือไม่อยู่ในรายการ — ผ่าน
HTTP Load Balancer (-http)200 (ว่างเปล่า \{\})ไม่อยู่ในรายการ — ผ่าน
Origin Pool200 (ว่างเปล่า \{\})ไม่อยู่ในรายการ — ผ่าน
Healthcheck200 (ว่างเปล่า \{\}) หรือข้ามไม่อยู่ในรายการ — ผ่าน
Protected Domain200 (ว่างเปล่า \{\})ไม่อยู่ในรายการ — ผ่าน
DNS zoneไม่ถูกลบ (โครงสร้างพื้นฐานที่ใช้ร่วมกัน)Zone ยังคงมีอยู่ — ผ่าน
Namespace200 (cascade delete) หาก NAMESPACE_CREATED=true หรือข้ามในกรณีอื่น404 หากถูกลบ, 200 หากเก็บไว้ — ผ่าน

การรื้อถอนเสร็จสมบูรณ์ เมื่อ namespace มีอยู่ก่อน (NAMESPACE_CREATED=false) ออบเจกต์การปรับใช้งานทั้งหมดถูกลบออกแล้ว ยกเว้น HTTPS LB skeleton ซึ่งเก็บใบรับรอง Let’s Encrypt และการผูก domain ไว้สำหรับการสาธิตครั้งถัดไป เมื่อ namespace ถูกสร้างขึ้นระหว่างการสาธิต (NAMESPACE_CREATED=true) ออบเจกต์ทั้งหมดรวมถึง HTTPS LB และ namespace ถูกลบทั้งหมดแล้ว DNS zone และ record ที่ไม่ได้จัดการยังคงสมบูรณ์ในทั้งสองกรณี