ما الجديد في ADC 0.8 و 0.9 و 0.10؟
May 31, 2024
مقدمة
ADC (APISIX Declarative CLI) هي أداة تكوين تصريحية تم تقديمها بواسطة API7.ai، حيث توفر مجموعة أدوات مريحة للمستخدمين لتنفيذ GitOps. يمكن للمستخدمين بسهولة دمجها في خطوط أنابيب CI/CD الخاصة بهم لإدارة دورة حياة API بالكامل، وإكمال ترقيات وإصدارات API. بعد إصدار الإصدار 0.7، أصدرت ADC ثلاثة إصدارات جديدة: 0.8 و0.9 و0.10، مع تحسينات وتحديثات من حيث الوظائف والأداء وتجربة المستخدم.
الميزات الجديدة في ADC
تحسينات على كاشف تغييرات الموارد: Differ
تم تقديم هذه التعديلات في الإصدارين 0.8 و0.9.
لقد قدمنا إصدارًا جديدًا من كاشف تغييرات الموارد Differ، v3، والذي يحتوي على تحسينات كبيرة في الوظائف وجودة الكود.
-
يقدم Differ الجديد آلية دمج القيم الافتراضية للموارد المحلية، مما يضمن أن القيم الافتراضية من جانب الخادم لا تتداخل مع فحوصات تغييرات الموارد في ADC.
عندما يرسل العميل طلبًا لإنشاء مورد على API7 أو APISIX Admin API، يقوم الخادم بإجراء تحقق من Schema على الطلب المقدم. خلال هذه العملية، يتم إضافة بعض الحقول التي تحتوي على قيم افتراضية محددة في Schema ولكن لم يتم إرسالها من قبل العميل تلقائيًا إلى المورد المقدم. نتيجة لذلك، عندما نقرأ المورد من API مرة أخرى، سيكون مختلفًا عن التقديم الأولي.
كانت الإصدارات السابقة من ADC تعرض هذه الموارد على أنها "معدلة" وترسل طلبات API للتحديث إلى Admin API. أدى هذا السلوك إلى إدخال بعض عدم اليقين لـ ADC، وقد تم حل هذه المشكلة من خلال Differ.
-
تم تنفيذ آلية دمج القيم الافتراضية في خلفية API7، مما يضمن أن اختلافات الموارد تعتبر تعديلات فقط عندما يقوم المستخدم بتغيير تكوين YAML المحلي.
-
تحسين دقة كشف Differ: يقوم ADC حاليًا بإجراء فحوصات تغييرات الموارد بشكل منفصل على مستوى جسم المورد والإضافات، مما يساعد على تقليل الشذوذ في الفحص.
-
تحسين جودة الكود، وتبسيط الكود الزائد لتحسين قابلية القراءة، وإصلاح بعض الأخطاء.
مرشحات الموارد
لقد أضفنا آليتين لتصفية الموارد بناءً على تسميات الموارد وأنواع الموارد. يمكن استخدامها لاستبعاد الموارد غير الضرورية أثناء عمليات الجلب والفحص والتحقق من الاختلافات والمزامنة.
مرشح تسميات الموارد
تم تقديم هذه الميزة في الإصدار 0.8.
يقوم هذا المرشح بالتصفية بناءً على حقل التسميات في الموارد. يمكن للمستخدمين تمكين المرشح باستخدام المعلمة --label-selector key=value
في سطر الأوامر. يدعم تكوين شروط تصفية متعددة، وسيتم اعتبار الموارد البعيدة التي تفي بهذه القواعد في نفس الوقت على أنها موجودة، بينما سيتم إضافة هذه التسميات تلقائيًا إلى الموارد المحلية.
هذا يضمن أننا نقوم بفحص ومزامنة الموارد في نطاق صغير، مما يساعد على تقسيم المهام المنفذة في خط أنابيب CI/CD ومنع المزامنة العرضية من إتلاف الموارد التي لا تحتاج إلى تعديل.
مرشح أنواع الموارد
تم تقديم هذه الميزة في الإصدار 0.9.
لقد أضفنا معلمتين جديدتين لسطر الأوامر: --include-resource-type <type>
و --exclude-resource-type <type>
، والتي يمكن تكوينها عدة مرات، ولكن المعلمتين include و exclude متعارضتان.
باستخدام هاتين المعلمتين، يمكننا تصفية أنواع معينة من الموارد من العملية الحالية. على سبيل المثال، يمكن استخدام include-resource-type
لتعيين قائمة بيضاء واختيار أنواع الموارد التي سيتم تضمينها في العملية؛ بينما سيحدد exclude-resource-type
أنواع الموارد التي سيتم استبعادها من العملية.
هذا يساعدنا على التعامل بشكل أفضل مع الموارد التي لا تحتاج إلى تغيير متكرر، مثل بيانات تعريف الإضافات والقواعد العامة للإضافات.
تحسينات سطر الأوامر
تم تقديم هذه التحسينات في الإصدار 0.9.
تكوين شهادة TLS
لقد أضفنا سلسلة من المعلمات المتعلقة بـ TLS إلى سطر الأوامر، مثل:
--ca-cert-file
لتحديد ملف شهادة CA للخادم--tls-skip-verify
لتعطيل التحقق من شهادة خادم TLS--tls-client-cert-file
و--tls-client-key-file
لتحديد ملفات شهادة mTLS للعميل
هذه المعلمات تساعد ADC على إنشاء اتصال آمن مشفر ومنع هجمات الرجل في المنتصف.
التحكم في المهلة
لقد أضفنا المعلمة --timeout <duration>
للتحكم في مدة المهلة لاستدعاءات API، حيث تدعم بناء الجملة مثل 1m30s
. عندما تستغرق استدعاءات Admin API وقتًا طويلاً أو تتعطل، ستفعل آلية المهلة لمنع الانتظار إلى ما لا نهاية.
وضع التصحيح
تم تقديم هذه الميزة في الإصدار 0.9.
عندما يقوم ADC بإجراء عمليات الموارد داخليًا، يحتاج إلى استدعاء عدد كبير من APIs. في بعض الأحيان قد نحتاج إلى التحقق من هذه الاستدعاءات لتحليل ما إذا كانت تُرسل بشكل صحيح أو للتحقق من أن استجابات الخادم تفي بالتوقعات. بينما يمكن استخدام التقاط الحزم لتحقيق ذلك، إلا أن العملية ليست مريحة، وهناك صعوبات كبيرة عند تمكين TLS.
لذلك، أضفنا وضع تصحيح مدمج إلى ADC، والذي يمكن تمكينه باستخدام المعلمة --verbose <integer>
. عند تعيين هذه المعلمة إلى 2، سيقوم ADC بطباعة أجزاء الطلب والاستجابة لكل استدعاء API داخلي للمساعدة في التصحيح.
يمكن أيضًا استخدام هذه المعلمة لإخفاء السجلات. عند تعيين هذه المعلمة إلى 0، سيخفي ADC جميع السجلات العامة باستثناء الأخطاء.
تعزيز معالجة الموارد البعيدة
تم تقديم هذه الميزة في الإصدار 0.9.
نظرًا لأن ADC ليست الطريقة الوحيدة لتكوين الخدمات والطرق وما إلى ذلك، يمكن للمستخدمين أيضًا استخدام لوحة تحكم API7 Enterprise لتحقيق ذلك من خلال عمليات بسيطة. أدى ذلك إلى مشكلة: العمليات على لوحة التحكم ستستخدم معرفات موارد تم إنشاؤها عشوائيًا، بينما يستخدم ADC اسم المورد في تكوين YAML لإنشاء معرف مورد ثابت لتحديد الموارد بدقة.
هذا يعني أنه إذا قام المستخدم بإنشاء مورد على لوحة التحكم، فلن يتمكن ADC من تحديد موقعه بواسطة معرف المورد. لا يمكن لـ ADC تعديل أو حذف الموارد التي تم إنشاؤها على لوحة التحكم، ولكن هذه الموارد ستظهر في كشف التغييرات، ولكن لا يمكن التعامل معها بشكل صحيح.
لذلك، قمنا بتحسين المنطق ذي الصلة في خلفية API7 ADC. إذا كانت الموارد البعيدة والمحلية تحتوي على موارد بنفس الاسم، ولكن لا يمكن مطابقة المعرفات، يمكن لـ ADC حذف المورد البعيد بشكل صحيح وإنشاء مورد جديد بناءً على التكوين المحلي، وفي هذه الحالة سيتم إنشاء المعرف بواسطة ADC بناءً على اسم المورد ويمكن استخدامه للبحث عن الموارد لاحقًا. لن يتأثر مستخدمو لوحة تحكم API7، وستظل الموارد التي تم إنشاؤها بواسطة ADC مرئية على لوحة التحكم.
دعم حقول توسيع ADC في محول OpenAPI
تم تقديم هذه الميزة في الإصدار 0.10.
لبناء خط أنابيب متماسك من OpenAPI إلى ADC إلى API7، يحتاج محول OpenAPI إلى حقن الحقول المطلوبة في ملف تكوين ADC YAML بناءً على احتياجاتنا.
على سبيل المثال، لتعديل حقل pass_host
في upstream الخدمة، سابقًا كان علينا فقط استخدام المحول يدويًا لتحويل OpenAPI إلى ملف تكوين ADC، وتعديل حقل pass_host
يدويًا، ثم تقديم الملف المعدل إلى مستودع Git لتنفيذ مزامنة ADC بواسطة خط أنابيب CI/CD. هذه العملية ليست متماسكة وتتطلب الكثير من التدخل اليدوي.
الآن، من خلال حقول التوسيع x-adc
التي تم تقديمها، يحتاج المستخدمون فقط إلى كتابة حقول التوسيع في مواقع محددة في وثيقة OpenAPI، وسيقوم ADC بكتابة هذه الحقول بشكل صحيح في ملف التكوين الذي تم إنشاؤه. باستخدام هذه التوسيعات، يمكن للمستخدمين تعديل أي محتوى في تكوين ADC مباشرة على OpenAPI، مثل إضافة تسميات، وإضافة إضافات، وتجاوز التكوين الافتراضي للخدمات/upstreams/الطرق.
نتيجة لذلك، من خلال الحفاظ على ملف OpenAPI واحد فقط، يمكن تنفيذ خط أنابيب OpenAPI-ADC-API7 بشكل شامل، مما يبسط بشكل كبير سير عمل GitOps لتكوين بوابة API.
الخلاصة
أداة التكوين التصريحية ADC التي أطلقتها API7.ai يمكن أن تساعد الشركات في تحقيق إدارة GitOps لبوابات API. في الإصدارات الجديدة 0.8 و0.9 و0.10، تم تحسين الأداة وترقيتها من حيث الوظائف، مع إضافة ميزات مثل مراقبة تغييرات الموارد والتصفية. هذه الميزات الجديدة تعطي زخمًا جديدًا لإدارة دورة حياة API بالكامل.
هذه القدرات الجديدة تسمح لـ ADC بتلبية احتياجات الشركات لإدارة GitOps لبوابات API بشكل أفضل، مما يحسن كفاءة ومرونة إدارة API.