Logo GH

شبكة الخدمة وسياسة المرور

1) لماذا شبكة الخدمة

Service Mesh هي طبقة بنية تحتية لحركة المرور بين الشرق والغرب (الاتصالات بين الخدمات)، والتي توفر قدرات موحدة دون إعادة كتابة الرمز:
  • الأمان الافتراضي: mTLS، الإصدار/التناوب التلقائي للشهادات، هويات الخدمة.
  • سياسة المرور: توجيه L7، اختبارات الكناري/AV، التدهور والاستقرار.
  • إمكانية الملاحظة: المقاييس والسجلات والآثار والإشارات الذهبية في كل مكالمة.
  • العمليات: سياسات موحدة لجميع اللغات/الأطر.

الفرق عن بوابة واجهة برمجة التطبيقات: البوابة - المحيط بين الشمال والجنوب ؛ بين الشرق والغرب داخل المجموعة/المنظمة. غالبًا ما نعمل معًا.

2) الهندسة المعمارية: الطائرات والأنماط

Data Plane: sidecar proxy (Envoy/Linkerd-proxy/haproxy)، الذي يعترض حركة مرور الكبسولات/VM.
مستوى التحكم: يوزع التكوينات (المسارات، السياسات، الشهادات)، حالة المخازن، ينشر محركات الخدمات.
الهوية: عادة معرف SPIFFE وشهادات X.509 التلقائية (SPIRE/CA المدمجة).
نقاط الدخول/الخروج: الدخول/بوابة الخروج لمراقبة تدفقات الحدود.
أنماط التنفيذ: سيارات جانبية لكل منها ؛ لكل عقدة/أوضاع محيطة في عمليات التنفيذ الجديدة.

3) السياسة الأمنية وعدم الثقة

1. mTLS افتراضيًا - التشفير servis↔servis والمصادقة المتبادلة.

2. AuthN/AuthZ:
  • AuthN: ثق فقط بالهويات الصادرة عن CA mesh 'a (SPIFFE).
  • AuthZ: declarative «who can to who and how» rules (RBAC/ABAC).
  • 3. السيطرة على العزل والخروج:

  • النطاقات/الشبكات الفرعية المسموح بها ؛ الخروج القسري عبر بوابة الخروج.
  • منع النتائج المباشرة من الموقد.
  • 4. التناوب السري: شهادات قصيرة الأجل، إعادة تشكيل بالوكالة التلقائية.

Istio (مثال: صارم mTLS العالمي):
yaml apiVersion: security. istio. io/v1beta1 kind: PeerAuthentication metadata: { name: default, namespace: istio-system }
spec:
mtls: { mode: STRICT }
Istio (مثال: يسمح فقط inventory→billing gRPC):
yaml apiVersion: security. istio. io/v1beta1 kind: AuthorizationPolicy metadata: { name: billing-allow, namespace: prod }
spec:
selector: { matchLabels: { app: billing } }
rules:
- from:
- source: { principals: ["spiffe://corp. local/ns/prod/sa/inventory"] }
to:
- operation: { ports: ["8080"], methods: ["POST"], paths: ["/proto. Billing/"] }

4) سياسة المرور: الثبات والتوجيه

4. 1 المهلات والخلوات

المهلة: يجب تحديدها عند المكالمة (اتصل/اقرأ/بشكل عام).
Referies: for idemputent operations only; backoff + jitter; حدود المهلة لكل تجربة.

Istio (VirtualService):
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: orders }
spec:
hosts: ["orders"]
http:
- route:
- destination: { host: orders, subset: v1, port: { number: 8080 } }
timeout: 5s retries:
attempts: 2 perTryTimeout: 2s retryOn: "5xx,connect-failure,reset"

4. 2 كاسر الدائرة и الكشف الخارجي

CB: يقيد الطلبات/الاتصالات المتزامنة، ويحمي المنبع.
Outlier: يلقي حالات «سيئة» عن طريق الخطأ/الكمون.

Istio (DestinationRule):
yaml apiVersion: networking. istio. io/v1beta1 kind: DestinationRule metadata: { name: orders }
spec:
host: orders trafficPolicy:
connectionPool:
http: { http1MaxPendingRequests: 1024, maxRequestsPerConnection: 100 }
outlierDetection:
consecutive5xxErrors: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50

4. 3 كناري وبحسب الشروط

المرجح - يتم تقسيم حركة المرور على الأوزان v1/v2.
→ نقل الأعلام/ملفات تعريف الارتباط/المستأجر إلى الإصدار الجديد.
تقارب الجلسة: التجزئة حسب المفتاح (مقياس بدقة).

yaml http:
- match: [{ headers: { "x-experiment": { exact: "new" } } }]
route: [{ destination: { host: orders, subset: v2 } }]
- route:
- destination: { host: orders, subset: v1, weight: 90 }
- destination: { host: orders, subset: v2, weight: 10 }

4. 4 حقن الخطأ وتدهوره

حقن التأخير/الخطأ لاختبار المتانة و SLO.

yaml fault:
delay: { fixedDelay: 300ms, percentage: { value: 10 } }
abort: { httpStatus: 503, percentage: { value: 1 } }

5) حدود الشبكة: الدخول/الخروج والخدمات الخارجية

بوابة الدخول: نقطة الدخول الوحيدة للعملاء الخارجيين في الشبكة ؛ التكامل مع WAF/OIDC/ratelimits.
بوابة الخروج: مخرج مركزي مع قائمة بالمضيفين المسموح بهم، فحص TLS، سجل القياس عن بعد.
ServiceEntry: تعلن SNI/المضيف الخارجي كجزء من الشبكة (تطبق السياسات و mTLS-origination).

yaml apiVersion: networking. istio. io/v1beta1 kind: ServiceEntry metadata: { name: payments-external }
spec:
hosts: ["api. payments. com"]
ports: [{ number: 443, name: https, protocol: TLS }]
resolution: DNS location: MESH_EXTERNAL

6) متعدد المجموعات والشبكات والهجين

المجال المشترك لمرافق المفاتيح العمومية/الثقة: هويات SPIFFE واحدة بين المجموعات.
اكتشاف نقطة النهاية: كرات الخدمة بين المناطق ؛ الأولوية المحلية والفشل.
العزلة في المناطق: السياسات والحدود والأولويات لكل إقليم.
VM في الشبكة: ربط الأنظمة القديمة/الحكومية بالوكلاء ونفس السياسات.

7) قابلية الرصد، SLO والتشغيل

Метрики: «الطلبات _ المجموع»، «الطلب _ المدة _ الآيات {p50، p95، p99}»، «5xx _ معدل»، «إعادة المحاولات»، «cb _ state»، «mTLS _ authz _ رفض».
سجلات الوصول: هيكلية، مع «traceparent»، «المستخدم/المستأجر»، «الاستجابة _ الأعلام».
التتبع: الحقن التلقائي للرؤوس (سياق تتبع W3C)، وأخذ العينات، يمتد على مستوى القفزة.
SLO: الأهداف بواسطة p99/الأخطاء على الطريق (service→service).
التنبيهات: ارتفاع "5xx"، "إعادة ضبط" الارتفاع، "outlier _ ejections'، تدهور mTLS (فشل المصافحة).

8) الأداء والتكلفة

تضيف Sidecar فواتير (CPU/RAM/latency). تحسين:
  • المحبة: تشمل السياسة عند الحاجة ؛ لا تشغل المرشحات الثقيلة في كل مكان.
  • البرك: تقسيم المسارات (الحرجة/الخلفية) إلى طرق وحدود مختلفة.
  • التنميط: p99 على الطرق «الباردة»، حجم القياس عن بعد (سجلات/مسارات حد المعدل).
  • النظر في الطرائق المحيطة/غير الجانبية إذا كانت مدعومة ومناسبة.

9) السلامة والامتثال

الحد الأدنى من الوصول المطلوب: السماح صراحة بالتوجيهات والطرق.
السياسات المتعلقة بالمساحات/المستأجرين: حدود الشبكة/الترخيص.
التناوب الرئيسي/التكيف: المخطط والطوارئ ؛ شهادات TTL قصيرة.
PII/الأسرار: الإخفاء في السجلات/المسارات ؛ التشفير على السلك/عند الراحة.
مراجعة الحسابات: من، ومتى، وما هي السياسات التي تغيرت ؛ ضجة على مرحلتين.

10) التكامل مع الطبقة K8s

تكمل سياسات الشبكة، لا تحل محل NetworkPolicy.
في بوابة الدخول/الخروج، يمكنك تعليق PodSecurity/PSA بمستوى أقل.
NRA/autoscaling: ضع في اعتبارك إعادة/CBs - فهي تغير الحمل.
خطط الإصدار: أوزان الكناري عبر VirtualService + الترويج التلقائي SLO.

11) قائمة التنفيذ المرجعية

  • تحديد حدود الثقة وتمكين STRICT mTLS.
  • مكنت سياسات AuthZ: لمن، أي الموانئ/الأساليب.
  • يتم تكوين المهلات/الإعادات والكشف الخارجي، ويتم تحديد المسارات الخفية.
  • تم تسجيل طرق الكناري وخطة التراجع ؛ حقن الخطأ - فقط في غير حث.
  • يتم اشتقاق التبعيات الخارجية من خلال بوابة الخروج و ServiceEntry.
  • تم تكوين المقاييس والسجلات والآثار ؛ لوحات القيادة والتنبيهات على p99/5xx/CB.
  • الحصص/الحدود لكل مستأجر/مساحة الاسم متاحة.
  • دفاتر التشغيل المعدة: تسرب الشهادة، فشل CA، تحلل المنبع، 503/RESET الكتلة.
  • خطة متعددة المجموعات (مرفق المفاتيح العمومية المشترك، الأولويات المحلية، سيناريوهات DR).
  • أيام الاختبار (أيام اللعبة): إسقاط طائرة التحكم، توقف السيارة الجانبية، كسر الشبكة، سام في اتجاه المنبع.

12) الأنماط المضادة

الشبكة «في كل مكان وفي وقت واحد» بدون مخزون المسار و SLO → تعقيد مكلف.
إعادة تشغيل افتراضية لجميع الطرق → تؤثر على التكرارات والانهيارات الجليدية المرورية.
لا يزال → mTLS المعاق «مؤقتًا» بشكل دائم.
الخروج بدون بوابة → تسرب البيانات/التبعيات غير المحسوبة.
سياسة عالمية واحدة لجميع الخدمات → الأمن الكاذب والإيجابيات الكاذبة.
عدم إمكانية الملاحظة: الشبكة المضمنة، ولكن لا تجمع المقاييس/المسارات - تفقد المعنى.

13) وصفات سريعة

Linkerd: تمكين mTLS والسياسة بواسطة الخادم

yaml apiVersion: policy. linkerd. io/v1beta1 kind: Server metadata: { name: billing, namespace: prod }
spec:
podSelector: { matchLabels: { app: billing } }
port: 8080 apiVersion: policy. linkerd. io/v1beta1 kind: ServerAuthorization metadata: { name: billing-allow-inventory, namespace: prod }
spec:
server: { name: billing }
client:
meshTLS:
identities: ["inventory. prod. serviceaccount. identity. linkerd. cluster. local"]

قنصل (نية L7 + مقسم)

hcl
Kind = "service-router"
Name = "orders"
Routes = [{
Match { HTTP { PathPrefix = "/v1" } }
Destination { Service = "orders" }
}]
Kind = "service-splitter"
Name = "orders"
Splits = [
{ Weight = 90, ServiceSubset = "v1" },
{ Weight = 10, ServiceSubset = "v2" }
]

14) الأسئلة الشائعة

هل تحتاج الشبكة إلى فريق صغير ؟

إذا كانت 3-5 خدمات - في كثير من الأحيان لا. ابدأ بمكتبات دخول ومرونة جيدة. قم بتوصيل الشبكة عندما تكون هناك حاجة إلى mTLS الافتراضي والسياسات الموحدة والتعقب دون تغييرات في الرمز.

كيف تتحكم في التكلفة ؟

قياس النفقات العلوية (CPU/RAM/latency) على المسارات الحرجة، وإيقاف تشغيل المرشحات غير الضرورية، وتقليل حجم السجلات/المسارات، واستخدام الأوضاع بدون سيارة جانبية حيث تكون آمنة.

هل من الممكن التداخل مع الوكلاء الشبكيين والمكونين يدويًا ؟

نعم، ولكن تجنب التوجيه المزدوج/إعادة الطباعة المكررة. مكان واحد صحيح - طائرة التحكم.

ما هو الأهم: الأمن أم الأداء ؟

الافتراضي هو الأمان (mTLS، AuthZ). يتم تحقيق الأداء من خلال ضبط مجمعات الاتصال، والكشف الخارجي، والطرق المستهدفة.

15) المجاميع

يحول Service Mesh الشبكة بين الخدمات إلى طبقة قابلة للبرمجة بسياسات موحدة: التشفير والهويات، والتوجيه الدقيق والمرونة، والقياس عن بعد والحصص. ابدأ بالمسارات الحرجة، وقم بتشغيل STRICT mTLS و AuthZ الصريح، واضبط المهلات/إعادة التصوير/CB، والتحكم في الخروج، وقياس p99 و 5xx، وقضاء أيام اللعبة. ثم ستصبح الشبكة مكبرة للموثوقية وسرعة الإصدارات، وليست مصدرًا للمفاجآت.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.