اكتشف سحر بنية شبكة الخدمات وشاهد كيف تعزز أنظمتك الموزعة.
اغمر في Istio، نجم شبكة الخدمات، وتعرف على كيفية تنسيق مجموعة Kubernetes الخاصة بك بشكل مثالي.
تطورت التطبيقات الأحادية إلى خدمات أصغر ومستقلة. اكتسب هذا التحول شعبية كبيرة مع الحوسبة السحابية المعتمدة على الخدمات المصغرة. ساهمت أدوات مثل Docker وKubernetes في تسريع هذا الاتجاه.
تقدم الخدمات المصغرة على منصات مثل Kubernetes العديد من الفوائد، لكنها أيضًا تقدم تعقيدات. يتطلب إدارة التواصل بين هذه الخدمات الموزعة اعتبارًا دقيقًا للاكتشاف والتوجيه وإعادة المحاولة والفشل.
تشمل التحديات الإضافية الأمان والقدرة على المراقبة.
بناء قدرات التواصل في كل خدمة يستغرق وقتًا طويلاً، خاصة مع توسع مشهد الخدمات. هنا تتألق شبكة الخدمات. إنها تتعامل مع كل التواصل بين الخدمات داخل نظام موزع.
تتحقق شبكة الخدمات من ذلك باستخدام بروكسيات الشبكة. يتم توجيه الطلبات بين الخدمات عبر هذه البروكسيات، التي تقع خارج الخدمات في طبقة البنية التحتية:
تشكل هذه البروكسيات شبكة مصفوفة للخدمات، ومن هنا جاء الاسم. تتحكم شبكة الخدمات في كل جانب من جوانب التواصل بين الخدمات، مما يمكنها من معالجة ثمانية خرافات حول الحوسبة الموزعة.
أطلق العنان للإمكانات الكاملة لخدماتك مع شبكة الخدمات! اكتشف كيف يمكن لهذه الأداة السحرية أن تحول مشهد تطبيقاتك.
دعونا نقسم السحر إلى ثلاث قدرات أساسية: سحر الحركة، الأمان الحديدي، والرؤية الواضحة.
شبكة الخدمات هي شرطي حركة المرور المثالي، توجه تفاعلات الخدمة بدقة. استمتع بالتوجيه الديناميكي، الاكتشاف الذكي، وميزات مذهلة مثل الظلال والتقسيم لحملات اختبار A/B بسلاسة.
قل وداعًا للاتصالات غير الموثوقة! تغلف شبكة الخدمات خدماتك ببطانية دافئة من الموثوقية، حيث تقدم إعادة المحاولات، ومهلات، وتحديد المعدلات، وقواطع الدائرة لحماية تطبيقاتك من الفوضى.
احمِ خدماتك بقلعة منيعة! تقوم شبكة الخدمات بتشفير جميع الاتصالات مع MTLS القوي، وتتحقق من الهويات من خلال المصادقة الصارمة، وتفرض قواعد الوصول من أجل حماية قصوى.
اكتشف القوى الأمنية الخفية! عزل الخدمات، وتتبع كل حركة من أجل التدقيق، وخلق محيط آمن حول تطبيقك باستخدام شبكة الخدمات.
تنقل عبر تعقيدات نظامك الموزع بسهولة! توفر شبكة الخدمات رؤية لا مثيل لها في الأعمال الداخلية لتطبيقك من خلال التتبع الموزع.
اكتشف رؤى قيمة مع مجموعة غنية من القياسات، والسجلات، وبيانات الأداء. حسن خدماتك وحل المشكلات كالمحترفين باستخدام شبكة الخدمات.
Istio، شبكة خدمات مفتوحة المصدر، ثمرة جهود IBM وGoogle وLyft، تعزز التطبيقات الموزعة بشكل غير مرئي مع إدارة الحركة، والأمان، ورؤى الأداء.
يمكن نشر Istio بمرونة على الأنظمة المحلية، أو في السحابة، أو داخل Kubernetes، أو على الآلات الافتراضية، وتتفوق مع الخدمات المصغرة على Kubernetes. على الرغم من أنها مستقلة عن المنصة، إلا أنها تتناسب بشكل طبيعي مع البيئات المعتمدة على الحاويات.
في جوهرها، تنشر Istio بروكسيات Envoy كـ sidecars بجانب كل خدمة مصغرة:
تشكل هذه الشبكة من البروكسيات خطة بيانات Istio، التي تنسقها خطة التحكم:
تمنح خطة التحكم، عقل Istio المدبر، بروكسيات Envoy القوة من خلال الاكتشاف، والتكوين، وإدارة الشهادات.
أطلق العنان لإمكانات Istio مع عدد هائل من الخدمات المصغرة المتصلة، حيث تنسج بروكسيات sidecar بنية تحتية قوية لشبكة الخدمات:
تتألق قابلية تكيف Istio من خلال التكامل السلس مع أنظمة التسجيل، والقياس، والسياسات الخارجية.
تعد بنية Istio ثنائي ديناميكي: خطة البيانات وخطة التحكم. معًا، ينظمون السحر وراء قدرات Istio. دعونا نتعمق في المكونات الأساسية التي تدعم هذه المنصة الاستثنائية.
استعد لاستكشاف التفاصيل المعقدة لمكونات Istio الأساسية.
تعتبر خطة البيانات في Istio إصدارًا معززًا من بروكسي Envoy. هذا المعجزة المفتوحة المصدر تتعامل مع تعقيدات الشبكة، مما يحرر التطبيقات للتركيز على أعمالها الأساسية. تتفاعل التطبيقات بسلاسة، غير مدركة للبنية التحتية المعقدة للشبكة.
في جوهرها، يعمل Envoy كحارس شبكة على الطبقات 3 و4 من نموذج OSI. يدير الاتصالات ببراعة باستخدام سلسلة من الفلاتر الشبكية القابلة للتكيف. بالإضافة إلى ذلك، يمكّن فلتر الطبقة L7 الخاص بـ Envoy من التعامل مع حركة HTTP بمهارة. وليس هذا كل شيء - إنه يتناسب بشكل طبيعي مع بروتوكولات HTTP/2 وgRPC.
العديد من ميزات Istio البارزة هي في الواقع قوى خارقة ورثت من القدرات المدمجة لـ Envoy:
تتألق إمكانات Envoy الحقيقية عند اقترانها بـ Istio. قدرتها على التوسيع، المدعومة بواسطة WebAssembly، هي تغيير لقواعد اللعبة للتطبيقات المخصصة، والسياسات، والقياس. بالإضافة إلى ذلك، يفتح واجهة برمجة تطبيقات Proxy-Wasm الخاصة بـ Istio الأبواب لمزيد من التخصيصات لـ Envoy.
تعرف على istiod، قائد أوركسترا خطة التحكم في Istio. يقوم هذا القائد بتحويل القواعد المعقدة لإدارة الحركة والتوجيه إلى تكوينات صديقة لـ Envoy، وينشرها بسلاسة إلى بروكسيات sidecars.
تذكر بنية Istio السابقة مع مكوناتها الفردية؟ حسنًا، لتبسيط الأمور، تم دمج هذه المكونات في istiod الموحد. لكن لا تخف، تظل الوظائف الأساسية سليمة.
في جوهره، يستخدم istiod نفس الشيفرة وواجهات برمجة التطبيقات مثل أسلافه. لا يزال Pilot، على سبيل المثال، قائد اكتشاف الخدمات، يحول التفاصيل الخاصة بالمنصة إلى لغة عالمية تفهمها بروكسيات sidecars. تتيح هذه المرونة لـ Istio التناغم مع بيئات متنوعة مثل Kubernetes والآلات الافتراضية.
يتولى istiod أيضًا مسؤولية الأمان، ويقيم مصادقة قوية بين الخدمات ومستخدمي النهاية مع نظام إدارة الهوية والشهادات المدمج. قم بفرض سياسات الأمان الدقيقة بناءً على هوية الخدمة بسهولة. علاوة على ذلك، يعمل istiod كسلطة شهادة موثوقة (CA)، ويصدر الشهادات لتأمين الاتصال بين الخدمات باستخدام MTLS.
لقد استكشفنا الميزات النموذجية لشبكة الخدمات وفككنا بنية Istio ومكوناته الأساسية. الآن، دعونا نكشف كيف يوفر Istio هذه الميزات باستخدام مكوناته الأساسية.
سنعيد زيارة نفس فئات الميزات التي استكشفناها سابقًا.
تقدم واجهة برمجة تطبيقات إدارة الحركة في Istio تحكمًا دقيقًا في حركة شبكة الخدمات. خصص تكوينات الحركة باستخدام هذه واجهات برمجة التطبيقات وحدد موارد واجهة برمجة التطبيقات باستخدام تعريفات موارد Kubernetes المخصصة (CRDs). الموارد الرئيسية لواجهة برمجة التطبيقات لتوجيه الحركة هي الخدمات الافتراضية وقواعد الوجهة:
تحدد الخدمة الافتراضية كيفية توجيه الطلبات إلى خدمة ضمن شبكة Istio. تتكون من قاعدة أو أكثر من قواعد التوجيه التي يتم تقييمها بالتتابع. بعد توجيه الخدمة الافتراضية، تُطبق قواعد الوجهة للتحكم في حركة المرور إلى وجهة، مثل تجميع مثيلات الخدمة حسب الإصدار.
تأسست أساسيات أمان Istio على هويات قوية لكل خدمة. تتعاون عملاء Istio بجانب كل بروكسي Envoy مع istiod لأتمتة تدوير المفاتيح والشهادات:
يدعم Istio نوعين من المصادقة: مصادقة الأقران ومصادقة الطلب. تحمي مصادقة الأقران الاتصال بين الخدمات من خلال حل MTLS الخاص بـ Istio. تتعامل مصادقة الطلب مع مصادقة المستخدم النهائي من خلال التحقق من JSON Web Token (JWT) باستخدام مزود مصادقة مخصص أو مزود OpenID Connect (OIDC).
يفرض Istio التحكم في وصول الخدمة من خلال تطبيق سياسات التفويض. تنظم هذه السياسات الحركة الواردة في بروكسي Envoy، مما يسمح بالتحكم في الوصول على مستوى الشبكة، والنطاق، والخدمة.
ينشئ Istio بيانات قياسية شاملة، بما في ذلك القياسات، والتتبع الموزع، وسجلات الوصول، لجميع الاتصالات بين الخدمات داخل الشبكة. تشمل هذه البيانات القياسية قياسات على مستوى البروكسي، والخدمات، وخطة التحكم.
في السابق، كانت Mixer هي المكون المركزي في بنية المراقبة الخاصة بـ Istio. ومع ذلك، يستبدل Telemetry v2 ميزات Mixer مع ملحقات بروكسي Envoy:
ينشئ Istio تتبعات موزعة من خلال بروكسيات Envoy ويدعم العديد من أنظمة التتبع مثل Zipkin وJaeger وLightstep وDatadog. يمكن ضبط معدل توليد التتبع. بالإضافة إلى ذلك، ينشئ Istio سجلات الوصول لحركة خدمة في تنسيقات قابلة للتخصيص.
لقد حصلنا على ما يكفي من الخلفية، دعونا نرى Istio في العمل! سنقوم بتثبيت Istio على مجموعة Kubernetes وسنستخدم تطبيق خدمات مصغرة بسيط لعرض قوته.
يتم تثبيت Istio بطرق مختلفة، لكن تحميل واستخراج الإصدار الأخير لنظام التشغيل الخاص بك (مثل Windows) هو الأسهل. يتضمن الحزمة المستخرجة عميل istioctl في مجلد bin. استخدم istioctl لتثبيت Istio على مجموعة Kubernetes الخاصة بك:
istioctl install --set profile=demo -y
يتم تثبيت مكونات Istio على مجموعة Kubernetes الافتراضية باستخدام ملف التعريف التجريبي. استبدل 'التجريبي' بملف تعريف آخر خاص بالموفر إذا لزم الأمر.
بعد ذلك، أخبر Istio بإدخال بروكسيات Envoy الجانبية تلقائيًا عند نشر التطبيقات على هذه مجموعة Kubernetes:
kubectl label namespace default istio-injection=enabled
نستخدم هنا kubectl، على افتراض أن لديك مجموعة Kubernetes (مثل Minikube) وأداة سطر أوامر Kubernetes kubectl تم إعدادها.
تخيل تطبيق طلبات عبر الإنترنت بسيط لهذه التجربة. يتكون من ثلاثة خدمات مصغرة تعمل معًا لتلبية الطلبات:
لن نتعمق في تفاصيل الخدمات المصغرة، ولكن من السهل إنشاؤها باستخدام Spring Boot وREST APIs. من الضروري، إنشاء صور Docker لهذه الخدمات المصغرة لنشرها على Kubernetes.
نشر أحمال الحاويات على مجموعات Kubernetes مثل Minikube بسيط. استخدم موارد النشر والخدمة للإعلان عن الوصول إلى الحمل. عادةً ما تحددها في ملف YAML:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: order-service
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: order-service
version: v1
spec:
containers:
- name: order-service
image: kchandrakant/order-service:v1
resources:
requests:
cpu: 0.1
memory: 200
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: order-service
هذا هو تعريف أساسي للنشر والخدمة لـ order-service. أنشئ ملفات YAML مماثلة لـ inventory-service وshipping-service.
يمكن نشر هذه الموارد بسهولة باستخدام kubectl:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
نظرًا لأننا مكننا الإدخال التلقائي لبروكسيات Envoy الجانبية للاسم الافتراضي، فإن كل شيء يتم التعامل معه. أو، يمكنك حقن بروكسيات Envoy الجانبية يدويًا باستخدام الأمر kube-inject من istioctl.
يتعامل Istio في المقام الأول مع حركة المرور الشبكية. بشكل افتراضي، يتم حظر الحركة من أو إلى خارج الشبكة. يستخدم Istio بوابات لإدارة حركة المرور الشبكية الواردة والصادرة، مما يمنحك تحكمًا دقيقًا فيما يدخل أو يخرج. يقدم Istio نشرات بوابة البروكسي المسبقة التكوين: istio-ingressgateway وistio-egressgateway.
أنشئ بوابة وخدمة افتراضية لتطبيقك:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: booking-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: booking
spec:
hosts:
- "*"
gateways:
- booking-gateway
http:
- match:
- uri:
prefix: /api/v1/booking
route:
- destination:
host: booking-service
port:
number: 8080
نستخدم هنا وحدة التحكم الافتراضية الخاصة بـ Istio. بالإضافة إلى ذلك، قمنا بتعريف خدمة افتراضية لتوجيه الطلبات إلى خدمة الحجز.
يمكنك أيضًا تعريف بوابة مخرجة لحركة المرور الشبكية الصادرة.
لقد نشرنا تطبيقًا بسيطًا على Kubernetes مع Istio. دعونا نستكشف ميزات Istio القوية ونرى كيف يمكنها تحسين تطبيقنا.
تخيل نشر إصدارات متعددة من خدمة مصغرة مثل خدمة الشحن. تريد إدخال ميزات جديدة تدريجيًا دون التأثير على جميع المستخدمين. يتيح لك توجيه الطلبات القيام بذلك من خلال توجيه جزء من الحركة إلى الإصدار الأخير.
استخدم قواعد توجيه الخدمة الافتراضية لتحقيق ذلك.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shipping-service
spec:
hosts:
- shipping-service
http:
- route:
- destination:
host: shipping-service
subset: v1
weight: 90
- destination:
host: shipping-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: shipping-service
spec:
host: shipping-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
يمكن أيضًا لقواعد التوجيه تصفية الحركة بناءً على رؤوس أو سمات أخرى. يحدد حقل الوجهة الخدمة المستهدفة للطلبات المطابقة.
منع الفشل المتسلسل مع كسر الدائرة. يكتشف هذا النمط الأخطاء ويتوقف مؤقتًا عن الحركة إلى الخدمات المتعطلة، مما يحمي صحة تطبيقك بشكل عام.
تتيح لك قاعدة الوجهة الخاصة بـ Istio تكوين سلوك كسر الدائرة لخدمات مثل خدمة المخزون.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: inventory-service
spec:
host: inventory-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutive5xxErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
من خلال تحديد الحد الأقصى لعدد الاتصالات، والطلبات المعلقة، والطلبات لكل اتصال، يمكنك إدارة الحركة بشكل فعال ومنع التحميل الزائد.
يضمن TLS المتبادل اتصالاً آمنًا بين الخدمات من خلال مطالبة الطرفين بالمصادقة. يقوم Istio بتمكين TLS المتبادل تلقائيًا للخدمات باستخدام بروكسياته.
بينما يفرض Istio TLS المتبادل بين الخدمات الموصولة عبر البروكسي، يمكن أن تصل حركة المرور النصية العادية إلى الخدمات دون البروكسيات. استخدم سياسات PeerAuthentication لفرض TLS المتبادل في شبكة الخدمات بالكامل.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
يمكنك تطبيق TLS المتبادل على مستوى الشبكة، أو النطاق، أو الخدمة. تتجاوز السياسات الخاصة بالخدمة الإعدادات على مستوى النطاق.
JSON Web Tokens (JWT) هي معيار لنقل معلومات المستخدم بشكل آمن. تُستخدم على نطاق واسع للمصادقة والتفويض.
تتيح لك سياسة التفويض الخاصة بـ Istio التحكم في الوصول إلى خدمات مثل خدمة الحجز بناءً على مطالب JWT.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: booking-service
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["[email protected]/[email protected]"]
يتطلب الحصول على JWTs صالحة مع مطالب محددة للوصول المصرح به. تنشئ Istio خاصية requestPrincipal من مطالب المُصدر والموضوع لـ JWT.
يبسط Istio إدارة التحديات الشائعة في بنى الخدمات المصغرة الموزعة. ومع ذلك، يمكن أن تضيف تعقيداته عبئًا على النشر. مثل أي أداة، ليست Istio حلاً سحريًا وتتطلب اعتبارات دقيقة.
بينما تقدم الشبكات الخدماتية مزايا، ضع في اعتبارك هذه العيوب:
تقدم الشبكات الخدماتية فوائد، لكن من الضروري تقييم تعقيد تطبيقك بدقة. قم بوزن المزايا مقابل التعقيد الإضافي.
Istio هو شبكة خدمات شائعة تدعمها قادة الصناعة، لكنها ليست الخيار الوحيد. إليك نظرة سريعة على Linkerd وConsul.
Linkerd هي شبكة خدمات مفتوحة المصدر مخصصة لـ Kubernetes تكتسب شعبية. إنها مشروع حاضن CNCF وتعمل بطريقة مشابهة لـ Istio، باستخدام بروكسيات TCP. يُطلق على بروكسي Linkerd المعتمد على Rust اسم Linkerd-proxy.
عادةً ما تكون Linkerd أبسط من Istio بسبب تركيزها على Kubernetes. ومع ذلك، تشبه مجموعة ميزاتها عن كثب ميزات Istio، وهيكلها الأساسي مشابه. تتكون Linkerd من واجهة مستخدم، وخطة بيانات، وخطة تحكم.
Consul هي شبكة خدمات مفتوحة المصدر من HashiCorp تتكامل مع أدوات البنية التحتية الأخرى من HashiCorp. تدعم خطة بيانات Consul كلاً من نماذج الدمج الخاصة بالبروكسي والنماذج الأصلية. تقدم بروكسيًا مدمجًا ولكن يمكن أن تعمل أيضًا مع Envoy.
يعمل Consul خارج Kubernetes، ويدعم منصات مثل Nomad. يستخدم عملاء على كل عقدة لإجراء فحوصات الصحة ويتواصل مع خوادم Consul لتخزين البيانات وتكرارها. على الرغم من تقديم ميزات شبكة خدمات قياسية، إلا أن Consul أكثر تعقيدًا في النشر والإدارة.
لقد استكشف هذا الدليل أساسيات بنية شبكة الخدمات وقدرات Istio القوية. لقد غصنا في هيكل Istio الأساسي، ومكوناته، وتطبيقاته العملية. بحلول النهاية، يجب أن تكون لديك فكرة قوية عن كيفية تثبيت واستخدام Istio في سيناريوهات شائعة.
آراء العملاء
تم جمع المراجعات التالية على موقعنا.
لديك أسئلة؟ ابحث عن الإجابات أدناه!
أكثر الأسئلة الشائعة لدينا