- หน้าแรก
- การป้องกันฝั่งไคลเอนต์
- Demo
- เฟส 4 — การรื้อถอน
เฟส 4 — การรื้อถอน
เฟส 4 จะลบออบเจกต์ทั้งหมดที่สร้างขึ้นในระหว่างการทดสอบตามลำดับความขึ้นต่อกันแบบย้อนกลับ เฟสนี้ต้องได้รับการยืนยันจากผู้ดูแลระบบก่อนดำเนินการใดๆ ที่เป็นการลบข้อมูล
ลำดับการรื้อถอน
หัวข้อที่มีชื่อว่า “ลำดับการรื้อถอน”ลบออบเจกต์ตามลำดับการสร้างแบบย้อนกลับ — ลบออบเจกต์ที่ขึ้นต่อกับออบเจกต์อื่นก่อน:
- โดเมนที่ถูกบรรเทา (Mitigated Domains) — ลบโดเมนที่ถูกบรรเทาของ CSD ทั้งหมดที่สร้างขึ้นในเฟส 3
- HTTPS Load Balancer (
${F5XC_LB_NAME}-https) — ลดลงเป็น skeleton (เก็บใบรับรอง Let’s Encrypt ไว้); ลบทั้งหมดหากNAMESPACE_CREATED=trueหรือตามคำขอที่ชัดเจน - HTTP Load Balancer (
${F5XC_LB_NAME}-http) — ขึ้นต่อกับ Origin Pool - Origin Pool — ขึ้นต่อกับ Healthcheck (หากสร้างขึ้น)
- การทำความสะอาด DNS zone — HTTPS LB skeleton จะเก็บ A record และ ACME record ที่จัดการไว้ (ซึ่งเป็นสิ่งที่ต้องการ — เพื่อให้ใบรับรองยังคงใช้งานได้) record ที่จัดการของ HTTP LB จะทำความสะอาดอัตโนมัติเมื่อลบ record ที่สร้างด้วยตนเองใน
default_rr_set_groupต้องทำความสะอาดด้วยตนเองผ่านPUT - Healthcheck — เฉพาะในกรณีที่สร้างขึ้นในเฟส 1 ขั้นตอนที่ 1
- Protected Domain — ลบการลงทะเบียนโดเมนที่ได้รับการปกป้องของ CSD
- Namespace — เฉพาะในกรณีที่สร้างขึ้นในระหว่างเฟส 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 Load Balancer
หัวข้อที่มีชื่อว่า “HTTPS Load Balancer”พฤติกรรมการรื้อถอน HTTPS LB ขึ้นอยู่กับว่า namespace ถูกสร้างขึ้นในระหว่างเซสชันสาธิตนี้หรือไม่ (ตัวแปร NAMESPACE_CREATED จากเฟส 1 ขั้นตอนที่ 0):
NAMESPACE_CREATED=false(namespace ที่มีอยู่ก่อน) — ลดลงเป็นสถานะ skeleton โดยเก็บใบรับรอง Let’s Encrypt ไว้เพื่อนำมาใช้ซ้ำNAMESPACE_CREATED=true(namespace ที่สร้างขึ้นระหว่างการสาธิต) — ลบทั้งหมด เนื่องจาก namespace เองจะถูกลบและใบรับรองไม่สามารถเก็บไว้ได้
เส้นทาง A: ลดลงเป็น Skeleton (Namespace ที่มีอยู่ก่อน)
หัวข้อที่มีชื่อว่า “เส้นทาง A: ลดลงเป็น Skeleton (Namespace ที่มีอยู่ก่อน)”เมื่อ namespace มีอยู่ก่อน ให้ลด HTTPS LB ลงเป็นสถานะ skeleton — ลบการอ้างอิง origin pool และการกำหนดค่า CSD ออกในขณะที่เก็บการผูก domain, การตั้งค่า https_auto_cert และใบรับรอง Let’s Encrypt ไว้ วิธีนี้จะหลีกเลี่ยงการทริกเกอร์คำขอใบรับรองใหม่ในการสาธิตครั้งถัดไป (Let’s Encrypt บังคับใช้ขีดจำกัด 5 ใบรับรองที่ซ้ำกันต่อชุดตัวระบุที่แน่นอนต่อ 7 วัน)
ขั้นตอนที่ 1 — GET การกำหนดค่า 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")ขั้นตอนที่ 2 — ลดลงเป็น skeleton ผ่าน 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 ทั้งหมดไว้ (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 แล้ว:
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 เองจะถูกลบในตอนท้ายของการรื้อถอน
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 Load Balancer
หัวข้อที่มีชื่อว่า “ลบ HTTP Load Balancer”ลบ 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 วินาทีและตรวจสอบอีกครั้ง หากยังคงปรากฏอยู่หลังจากการตรวจสอบครั้งที่สอง ให้รายงานผู้ดูแลระบบ — อย่าดำเนินการต่อ
ลบ Origin Pool
หัวข้อที่มีชื่อว่า “ลบ 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"ตรวจสอบ: GET /api/config/namespaces/\{namespace\}/origin_pools ไม่ควรมีชื่อ pool หากออบเจกต์ยังคงปรากฏในรายการหลังจาก DELETE ส่งคืน 200 ให้รอ 30 วินาทีและตรวจสอบอีกครั้ง หากยังคงปรากฏอยู่หลังจากการตรวจสอบครั้งที่สอง ให้รายงานผู้ดูแลระบบ
ลบ Healthcheck
หัวข้อที่มีชื่อว่า “ลบ Healthcheck”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
หัวข้อที่มีชื่อว่า “ลบ Protected Domain”ลบการลงทะเบียน protected domain ของ CSD Protected domain มีขอบเขตระดับ tenant (ไม่ใช่ระดับ namespace) แต่เป็นออบเจกต์การกำหนดค่า CSD ที่เชื่อมโยงกับการปรับใช้งานนี้ — ไม่ใช่โครงสร้างพื้นฐานที่ใช้ร่วมกันอย่าง DNS zone
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 ไม่ได้ลงทะเบียนอีกต่อไป:
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 (แบบมีเงื่อนไข)
หัวข้อที่มีชื่อว่า “ลบ Namespace (แบบมีเงื่อนไข)”ขั้นตอนนี้จะดำเนินการเฉพาะในกรณีที่ namespace ถูกสร้างขึ้นในระหว่างเฟส 1 ขั้นตอนที่ 0 (NAMESPACE_CREATED=true) หาก namespace มีอยู่ก่อน (NAMESPACE_CREATED=false) ให้ข้ามขั้นตอนนี้ทั้งหมด — namespace เป็นโครงสร้างพื้นฐานที่ใช้ร่วมกันและต้องไม่ถูกลบ
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 ไม่มีอยู่อีกต่อไป:
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
สรุปหลักฐานเฟส 4
หัวข้อที่มีชื่อว่า “สรุปหลักฐานเฟส 4”| ออบเจกต์ | สถานะการลบ | สถานะการตรวจสอบ |
|---|---|---|
| โดเมนที่ถูกบรรเทา (6 โดเมน) | ทั้งหมด 200 (ว่างเปล่า \{\}) หรือข้ามหากเฟส 3 ไม่ได้ดำเนินการ | จำนวน 0 (หรือ 1 phantom) — ผ่าน |
HTTPS Load Balancer (-https) | 200 (skeleton PUT) หรือ 200 (ลบทั้งหมดหาก NAMESPACE_CREATED=true) | ตรวจสอบ skeleton หรือไม่อยู่ในรายการ — ผ่าน |
HTTP Load Balancer (-http) | 200 (ว่างเปล่า \{\}) | ไม่อยู่ในรายการ — ผ่าน |
| Origin Pool | 200 (ว่างเปล่า \{\}) | ไม่อยู่ในรายการ — ผ่าน |
| Healthcheck | 200 (ว่างเปล่า \{\}) หรือข้าม | ไม่อยู่ในรายการ — ผ่าน |
| Protected Domain | 200 (ว่างเปล่า \{\}) | ไม่อยู่ในรายการ — ผ่าน |
| DNS zone | ไม่ถูกลบ (โครงสร้างพื้นฐานที่ใช้ร่วมกัน) | Zone ยังคงมีอยู่ — ผ่าน |
| Namespace | 200 (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 ที่ไม่ได้จัดการยังคงสมบูรณ์ในทั้งสองกรณี