- الرئيسية
- الدفاع من جهة العميل
- Demo
- المرحلة 4 — إزالة التهيئة
المرحلة 4 — إزالة التهيئة
تقوم المرحلة 4 بإزالة جميع الكائنات التي تم إنشاؤها خلال التمرين بترتيب عكسي لتبعياتها. تتطلب هذه المرحلة تأكيداً صريحاً من الإنسان قبل تنفيذ أي عمليات تدميرية.
ترتيب إزالة التهيئة
Section titled “ترتيب إزالة التهيئة”احذف الكائنات بـ ترتيب إنشاء عكسي — احذف الكائنات التي تعتمد على كائنات أخرى أولاً:
- النطاقات المُخففة — احذف جميع النطاقات المُخففة لـ CSD التي تم إنشاؤها في المرحلة 3
- موازن تحميل HTTPS (
${F5XC_LB_NAME}-https) — تجريده إلى هيكل عظمي (الحفاظ على شهادة Let’s Encrypt)؛ حذف كامل إذا كانتNAMESPACE_CREATED=trueأو عند طلب صريح - موازن تحميل 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)
حذف النطاقات المُخففة
Section titled “حذف النطاقات المُخففة”إذا تم تنفيذ المرحلة 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
Section titled “موازن تحميل HTTPS”يعتمد سلوك إزالة تهيئة موازن تحميل HTTPS على ما إذا كانت مساحة الأسماء قد تم إنشاؤها خلال جلسة العرض التوضيحي هذه (متغير NAMESPACE_CREATED من المرحلة 1 الخطوة 0):
NAMESPACE_CREATED=false(مساحة أسماء موجودة مسبقاً) — تجريده إلى حالة هيكل عظمي، مع الحفاظ على شهادة Let’s Encrypt لإعادة الاستخدامNAMESPACE_CREATED=true(مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي) — حذف كامل، نظراً لأن مساحة الأسماء نفسها ستُحذف ولا يمكن الحفاظ على الشهادة
المسار أ: التجريد إلى هيكل عظمي (مساحة الأسماء الموجودة مسبقاً)
Section titled “المسار أ: التجريد إلى هيكل عظمي (مساحة الأسماء الموجودة مسبقاً)”عندما تكون مساحة الأسماء موجودة مسبقاً، جرّد موازن تحميل HTTPS إلى حالة هيكل عظمي — أزل مرجع مجموعة المصدر وتهيئة CSD مع الحفاظ على ربط النطاق وإعدادات https_auto_cert وشهادة Let’s Encrypt. يتجنب هذا تشغيل طلب شهادة جديد في تشغيل العرض التوضيحي التالي (تفرض Let’s Encrypt حداً يبلغ 5 شهادات مكررة لكل مجموعة معرّفات مطابقة تماماً كل 7 أيام).
الخطوة 1 — احصل على تهيئة موازن تحميل HTTPS الحالية:
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 بالمواصفة بأكملها (النطاقات، وhttps_auto_cert، وadvertise_on_public_default_vip، وجميع علامات الميزات المعطلة) مع إزالة client_side_defense (يُستبدل بـ disable_client_side_defense: {}) وتفريغ default_route_pools إلى مصفوفة فارغة. تبقى الشهادة وربط DNS سليمَين.
التحقق من أن موازن تحميل HTTPS أصبح هيكلاً عظمياً الآن:
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).
المسار ب: الحذف الكامل (مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي)
Section titled “المسار ب: الحذف الكامل (مساحة الأسماء تم إنشاؤها أثناء العرض التوضيحي)”عندما تم إنشاء مساحة الأسماء خلال جلسة العرض التوضيحي هذه، يجب حذف موازن تحميل HTTPS بالكامل — الحفاظ على الهيكل العظمي غير ضروري لأن مساحة الأسماء نفسها ستُزال في نهاية إزالة التهيئة.
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
Section titled “حذف موازن تحميل HTTP”احذف موازن تحميل HTTP الأساسي:
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 ثانية وتحقق مرة أخرى. إذا كان لا يزال موجوداً بعد الفحص الثاني، أبلغ المشغّل — لا تتابع.
حذف مجموعة المصدر
Section titled “حذف مجموعة المصدر”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 ثانية وتحقق مرة أخرى. إذا كان لا يزال موجوداً بعد الفحص الثاني، أبلغ المشغّل.
حذف الفحص الصحي
Section titled “حذف الفحص الصحي”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 ثانية وتحقق مرة أخرى. إذا كان لا يزال موجوداً بعد الفحص الثاني، أبلغ المشغّل.
حذف النطاق المحمي
Section titled “حذف النطاق المحمي”احذف تسجيل النطاق المحمي لـ CSD. النطاق المحمي محدود بنطاق المستأجر (وليس بنطاق مساحة الأسماء)، لكنه كائن تهيئة CSD مرتبط بهذا النشر — وليس بنية تحتية مشتركة مثل منطقة DNS.
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)'حذف مساحة الأسماء (مشروط)
Section titled “حذف مساحة الأسماء (مشروط)”تعمل هذه الخطوة فقط إذا تم إنشاء مساحة الأسماء خلال المرحلة 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"المتوقع: 404 إذا كانت NAMESPACE_CREATED=true، و200 إذا كانت NAMESPACE_CREATED=false.
ملخص أدلة المرحلة 4
Section titled “ملخص أدلة المرحلة 4”| الكائن | حالة الحذف | حالة التحقق |
|---|---|---|
| النطاقات المُخففة (6) | جميعها 200 (فارغة \{\}) أو تم تخطيها إذا لم تُنفَّذ المرحلة 3 | العدد 0 (أو 1 وهمي) — ناجح |
موازن تحميل HTTPS (-https) | 200 (PUT هيكل عظمي) أو 200 (حذف كامل إذا NAMESPACE_CREATED=true) | تم التحقق من الهيكل العظمي أو غير موجود في القائمة — ناجح |
موازن تحميل HTTP (-http) | 200 (فارغ \{\}) | غير موجود في القائمة — ناجح |
| مجموعة المصدر | 200 (فارغة \{\}) | غير موجودة في القائمة — ناجح |
| الفحص الصحي | 200 (فارغ \{\}) أو تم تخطيه | غير موجود في القائمة — ناجح |
| النطاق المحمي | 200 (فارغ \{\}) | غير موجود في القائمة — ناجح |
| منطقة DNS | لم تُحذف (بنية تحتية مشتركة) | المنطقة لا تزال موجودة — ناجح |
| مساحة الأسماء | 200 (حذف متتالي) إذا NAMESPACE_CREATED=true، تم تخطيها في الحالات الأخرى | 404 إذا حُذفت، 200 إذا تم الحفاظ عليها — ناجح |
اكتملت إزالة التهيئة. عندما كانت مساحة الأسماء موجودة مسبقاً (NAMESPACE_CREATED=false)، تمت إزالة جميع كائنات النشر باستثناء هيكل موازن تحميل HTTPS العظمي، الذي يحافظ على شهادة Let’s Encrypt وربط النطاق لتشغيل العرض التوضيحي التالي. عندما تم إنشاء مساحة الأسماء خلال العرض التوضيحي (NAMESPACE_CREATED=true)، تم حذف جميع الكائنات بما فيها موازن تحميل HTTPS ومساحة الأسماء بالكامل. تبقى منطقة DNS وسجلاتها غير المُدارة سليمة في كلتا الحالتين.