DevOps and Infrastructure

إتقان شبكة الخدمات: غوص عميق في Istio للخدمات المصغرة الحديثة

في المشهد المتطور بسرعة للحوسبة الأصلية للسحابة، أصبح إدارة الاتصالات المعقدة بين الخدمات المصغرة أحد أهم التحديات التي تواجه فرق التطوير. مع تزايد تعقيد التطبيقات، تزداد الحاجة إلى إدارة حركة مرور قوية، وأمان، وقابلية للرصد. هنا يأتي دور شبكة الخدمات، وتحديداً Istio، الذي برز كمعيار صناعي لحل هذه المشكلات.

ما هي شبكة الخدمات؟

شبكة الخدمات هي طبقة بنية تحتية مخصصة للتعامل مع الاتصالات بين الخدمات. وظيفتها الأساسية هي تسهيل إنشاء شبكة موزعة حيث تكون اتصالات الخدمات قابلة للتكوين وقابلة للرصد، بشكل مستقل عن المنطق المحدد داخل الخدمات نفسها. من خلال نقل هذه المسؤوليات من كود التطبيق إلى وكيل جانب (sidecar proxy)، يمكن للمطورين التركيز على منطق الأعمال بينما تتولى الشبكة التعامل مع التعقيدات الأساسية.

Istio، الذي تم تطويره في الأصل بواسطة Google ويتم الآن صيانته بواسطة مؤسسة الحوسبة الأصلية للسحابة (CNCF)، هو شبكة خدمات مفتوحة المصدر الأكثر اعتماداً على نطاق واسع. وهي توفر الميزات الرئيسية التالية:

  • إدارة حركة المرور: توجيه متقدم، وتوازن حمل، وإدخال أخطاء.
  • الأمان: تشفير تلقائي لبروتوكول TLS المتبادل (mTLS) وسياسات وصول قائمة على الهوية.
  • القابلية للرصد: قياسات تفصيلية، وتتبع موزع، وجمع مقاييس.

البنية المعمارية الأساسية: مستوى البيانات ومستوى التحكم

لفهم Istio، يجب التمييز بين مكونيه الرئيسيين: مستوى البيانات (Data Plane) ومستوى التحكم (Control Plane).

يتكون مستوى البيانات من مجموعة من الوكلاء الأذكياء (Envoy) يتم نشرها كوكلاء جانبية بجانب خدمات التطبيق. تقوم هذه الوكلاء باعتراض جميع الاتصالات الشبكية بين الخدمات المصغرة وتوجيهها إلى مستوى التحكم. وهي تتعامل مع توجيه حركة المرور، وإعادة المحاولة، وحدود الوقت، وميزات الأمان بشكل شفاف.

مستوى التحكم مسؤول عن تكوين وإدارة الوكلاء. يتضمن مكونات مثل Pilot (إدارة حركة المرور)، وGalley (التحقق من صحة التكوين)، وCitadel (الأمان وإدارة الشهادات). يدفع مستوى التحكم تحديثات التكوين إلى وكلاء مستوى البيانات في الوقت الفعلي، مما يضمن أن سلوك الشبكة يتوافق مع الحالة المرغوبة التي يحددها المسؤول.

البدء: تثبيت Istio على Kubernetes

يعد نشر Istio أمراً بسيطاً على مجموعة عمل Kubernetes. يقوم مشغل Istio أو أدوات سطر الأوامر بتبسيط العملية. فيما يلي مثال عملي لتثبيت Istio باستخدام واجهة سطر الأوامر.

# تحميل أحدث إصدار من Istio
curl -L https://istio.io/downloadIstio | sh -

# الانتقال إلى دليل Istio
cd istio-1.19.1/

# إضافة istioctl إلى مسار النظام
export PATH="$PWD/bin:$PATH"

# تثبيت Istio في ملف "demo" للبدء السريع
istioctl install --set profile=demo -y

بمجرد التثبيت، يمكنك تمكين الحقن التلقائي للوكيل الجانبي (sidecar injection) لاسم نطاق معين. يضمن ذلك أن كل حاوية جديدة يتم نشرها في ذلك النطاق تحصل تلقائياً على وكيل Envoy مُحقن دون تكوين يدوي.

# وضع علامة على اسم النطاق لتمكين الحقن التلقائي
kubectl label namespace default istio-injection=enabled

تنفيذ تحويل حركة المرور

إحدى أقوى ميزات Istio هي قدرتها على إدارة تدفق حركة المرور بدقة. على سبيل المثال، إذا كنت تقوم بإصدار إصدار جديد من تطبيقك (v2) جنباً إلى جنب مع الإصدار المستقر (v1)، يمكنك استخدام VirtualService لتقسيم حركة المرور.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myservice
spec:
  hosts:
  - myservice.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: myservice
        subset: v1
      weight: 90
    - destination:
        host: myservice
        subset: v2
      weight: 10

في هذا التكوين، يتم توجيه 90٪ من حركة المرور إلى الإصدار v1، بينما يتم توجيه 10٪ إلى الإصدار v2. يتيح ذلك نشرات Canary الآمنة واختبارات A/B دون تغييرات في الكود.

الخاتمة

اعتماد شبكة خدمات مثل Istio هو خطوة كبيرة نحو نضج بنية الخدمات المصغرة الخاصة بك. فهي توفر الأدوات اللازمة لإدارة التعقيد، وتعزيز الأمان، واكتساب رؤية عميقة لأداء تطبيقك. بينما هناك منحنى تعلم مرتبط بتكوين مستوى التحكم وفهم الوكلاء الأساسيين، فإن الفوائد طويلة المدى من حيث الموثوقية وإنتاجية المطورين لا يمكن إنكارها. بالنسبة للمؤسسات التي تسعى إلى بناء تطبيقات أصلية للسحابة مرنة وقابلة للتوسع وآمنة، يظل Istio أداة أساسية في مجموعة أدوات DevOps.

Share: