التوجيه: كيف تصل حركة مرور المطوّر إلى نسخه

يشغّل نزال موجّهًا واحدًا لكل أساس (Baseline) بجوار خدمات التطبيق. ويشير كل اسم Service داخل الكلستر (ledger أو payments-api) إلى الموجّه. أما الـ Pods الحقيقية فتعمل خلف <name>-baseline. وتوجد نسخ البيئة في مساحة الأسماء الخاصة بها ولا يُوصَل إليها إلا عبر الموجّه.

مفتاح التوجيه

تحمل الطلبات اسم البيئة في X-Nezal-Env: <environment>. ويقبل الموجّه أيضًا عنصر baggage وفق معيار W3C بالصيغة nezal-env=<environment> ويضبطه كذلك. وبهذا لا تحتاج الخدمات التي تمرّر baggage الخاص بـ OpenTelemetry أصلًا إلى أي تغيير.

يجب أن تمرّر خدماتك X-Nezal-Env (أو baggage) في كل استدعاء صادر بالطريقة نفسها التي تمرّر بها سياق التتبع. ومن دونه يصل الاستدعاء الصادر من خدمة في الأساس إلى نسخة الأساس من الخدمة حتى لو كانت البيئة تستبدل تلك الخدمة بنسختها.

ما يفعله الموجّه بالطلب

يصل عبر تُؤخذ البيئة من ترويسات التوجيه القادمة من العميل يذهب إلى
منفذ الـ Service (داخل الكلستر) X-Nezal-Env وإلا فمن baggage موثوقة النسخة إذا كانت البيئة تستبدل الخدمة وإلا فإلى <name>-baseline
منفذ الحافة (من الـ Ingress) ترويسة Host فقط تُحذف خدمة entrypoint في الأساس مع اختيار النسخة أو الأساس كما سبق

أسماء البيئات غير المعروفة تُوجَّه إلى الأساس ولا تُرفض. وتُحصى كل حالة في nezal_router_unknown_env_total وتُسجَّل حدثًا (Event) من نوع UnknownEnvironment على الأساس. وبهذا يظهر المطوّر الذي حُذفت بيئته في منتصف جلسته.

المنافذ المعلنة بـ protocol: tcp والخدمات الموسومة بـ shared: true لا تمر عبر الموجّه أبدًا. فهي تصل دائمًا إلى Pods الأساس مباشرة.

روابط المعاينة وTLS

مع --ingress-domain=<domain> ينشر المشغّل:

وكلاهما كائن Ingress بمضيف محدد تمامًا في مساحة أسماء التطبيق ويخدمهما Service الحافة التابع للموجّه. اضبط --ingress-class إذا كان في الكلستر أكثر من متحكم ingress واحد.

لـ TLS شكلان ولا يُصدر نزال شهادة في أي منهما. لا يتصل المنتج أبدًا بأي جهة إصدار شهادات. لذلك فالشهادات مسؤوليتك سواء كنت تملكها أو تشغّل أداة تحصل عليها.

تُقدَّم روابط المعاينة عبر HTTP غير مشفر إلى أن يُطبَّق أحد هذين الشكلين. ويعرض كل أساس حينها الشرط IngressTLS=False بالسبب NoTLSSecret. ومع الإصدار لكل مضيف يكون السبب CertificatePending إلى أن يوجد Secret مضيف الأساس.

روابط المعاينة تتطلب تسجيل الدخول افتراضيًا (previewAuth.enabled في المخطط). ويتحقق الموجّه من ملف تعريف ارتباط (cookie) موقّع تصدره واجهة API بعد التحقق المعتاد من الجلسة. والزائر الذي لا يملكه يُحوَّل إلى صفحة تسجيل الدخول. وهذا يغطي الوضع المشترك. أما بيئة الوضع الكامل فليس لها موجّه ورابط معاينتها لا يتطلب تسجيل الدخول بعد.

التشخيص