مفتاح إيقاف للحاوية المرافقة لـ VPN: احجب حركة المرور عند خروجها
مشاركة فضاء الأسماء في حاوية VPN لا توقف التطبيق عندما يموت النفق. أضف سياسة خروج صريحة واختبر إعادة التشغيل، لا الانقطاعات فقط.
لا تملك حاوية التطبيق التي تشارك فضاء أسماء الشبكة في حاوية VPN واجهة خاصة بها، لذا يسهل الافتراض بأنها لا تستطيع إرسال أي شيء عندما يفشل النفق. هذا الافتراض خاطئ في نمط الفشل المهم. إذا ماتت عملية VPN وبقي فضاء الأسماء، يحتفظ التطبيق بمقابسه ويحتفظ فضاء الأسماء بمساره، وتستمر حركة المرور على المسار الذي لا يزال مثبتًا. مفتاح الإيقاف الحقيقي هو سياسة تصفية صريحة إضافة إلى اختبارات دورة حياة بيئة التشغيل، وليس اعتمادًا عند بدء التشغيل.
لماذا لا تشكل مشاركة فضاء الأسماء مفتاح إيقاف
تعني مشاركة فضاء الأسماء أن التطبيق يستخدم واجهات حاوية VPN وعناوينها وجدول مساراتها. وهي تزيل المسار المستقل للتطبيق إلى الشبكة ما دام فضاء الأسماء المشترك سليمًا، ولا تقول شيئًا عما سيفعله ذلك الفضاء عندما يختفي النفق.
يمكن لشروط الاعتماد في Compose أن تؤخر بدء التطبيق حتى تصبح التبعية سليمة. وهذا يغطي لحظة واحدة في الزمن ولا يغطي أي فشل لاحق، لذا فهو أداة لترتيب بدء التشغيل وليس جدار حماية صادرًا مستمرًا.
ما يحدث في الواقع عندما تخرج الحاوية
ميّز ثلاثة أحداث. قد تموت عملية VPN داخل الحاوية بينما تستمر الحاوية في العمل. وقد تتوقف الحاوية أو تُحذف، وهذا يدمر فضاء الأسماء. وقد تُعاد الحاوية إنشاء، وهذا يبني فضاء أسماء جديدًا وقواعد جديدة.
في الحالة الأولى يبقى فضاء الأسماء، وقد يظل المسار الافتراضي يشير إلى الواجهة الفيزيائية، ويستمر التطبيق في الإرسال مباشرة. في الحالة الثانية يفقد التطبيق التابع الاتصال كليًا عادةً، لأن فضاء أسمائه اختفى. في الحالة الثالثة قد يعيد التطبيق الاتصال بفضاء أسماء جديد قبل أن يكون النفق جاهزًا. تحتاج كل حالة إلى اختبار مختلف، والتصميم الذي يغطي الانقطاع المنظم فقط يغطي الحالة الأقل إثارة للاهتمام.
ابنِ سياسة خروج صريحة
اكتب السياسة داخل فضاء الأسماء المشترك لتسري على حزم التطبيق. الشكل هو إسقاط افتراضي مع استثناءات ضيقة: loopback، وواجهة النفق، وعنوان نقطة النهاية والمنفذ المحددين اللذين يحتاجهما نقل النفق.
يجب أن يكون استثناء نقطة النهاية قائمًا قبل أن يرتفع النفق، وإلا لا يستطيع عميل VPN الوصول إلى خادمه. لهذا تسمح مجموعة القواعد بالنقل الخارجي صراحةً بدلًا من السماح بالواجهة الفيزيائية عمومًا. أضف قواعد IPv6 أيضًا إذا كان فضاء الأسماء يملك اتصال IPv6، لأن سياسة IPv4 فقط تترك العائلة الأخرى مفتوحة.
DNS ينتمي إلى السياسة أيضًا. إذا كان التطبيق يحل الأسماء عبر محلل لا يمكن الوصول إليه إلا داخل النفق، فستكسر قاعدة الإسقاط الحل عندما يكون النفق منخفضًا، وهذا هو السلوك الصحيح لمفتاح الإيقاف. قرر بوعي إن كان هذا ما تريده.
اختبر دورة الحياة، لا الانقطاع فقط
أرسل طلبًا جديدًا غير ضار بينما النفق سليم، ثم اقتل عملية VPN وأرسل طلبًا آخر. كرر ذلك بعد إيقاف الحاوية، وبعد إعادة التشغيل، وبعد إعادة الإنشاء. الطلب الجديد مهم لأن الاتصال القائم قد ينجو من تغيير قواعد يحجب الاتصالات الجديدة.
لا تعتمد على فحص الصحة أو البحث عن عنوان IP الخارجي كآلية الحجب. الفحص يراقب الحالة ويبلغ عنها؛ والسياسة تتحكم في حركة المرور. كلاهما ينتمي إلى النشر نفسه، وهما ليسا بديلين.
سجّل القواعد حتى ينجو الاختبار من التحديث
اكتب النتيجة المتوقعة لكل حالة فشل في وثائق النشر، إلى جانب القواعد التي تنفذها. يتيح ذلك السجل تشغيل الاختبار نفسه بعد تحديث الصورة أو ترقية بيئة التشغيل، حين يتغير سلوك فضاء الأسماء أو المسارات الافتراضية دون أن يحرر أحد ملف compose.
أبقِ المسار الخارجي المطلوب لنقطة نهاية VPN منفصلًا عن خروج التطبيق غير المقيد، وأبقِ DNS وIPv6 داخل التغطية المقصودة. إذا سمحت السياسة بالواجهة الفيزيائية بأكملها للراحة، فقد اختفى مفتاح الإيقاف. تصف وثائق شبكات Docker ترتيب فضاء الأسماء المشترك الذي تُبنى عليه السياسة، وهي المرجع الذي يجب فحصه عندما يكون سلوك بيئة التشغيل محل شك.