شبكة الخدمة: Istio، Linkerd
شبكة الخدمة: Istio، Linkerd
1) ما هي شبكة الخدمة ومتى تكون هناك حاجة إليها
Service Mesh هي طبقة طائرة تحكم/بيانات الشبكة توفر mTLS من طرف إلى طرف، والتوجيه، وتحمل الأخطاء، وإمكانية الملاحظة بين الخدمات دون إعادة كتابة الرمز.
الأهداف:- الأمن الافتراضي (الثقة الصفرية، وهويات الخدمة، وسياسة الوصول).
- إدارة حركة المرور (Canary/Blue-Green، A/B، shadwing).
- الموثوقية (retras، timeouts، circuit breaking).
- إمكانية الرصد (مقاييس، سجلات، مسارات).
- التوحيد التشغيلي (السياسات كرمز، GitOps).
- العديد من الخدمات الصغيرة مع متطلبات تعدد اللغات و mTLS.
- يحتاج إلى سيناريوهات متقدمة للتوجيه/التجريب دون تغيير التطبيق.
- وهناك متطلبات لمراجعة الحسابات/السياسة العامة على مستوى الشبكة.
2) إستيو ضد لينكرد - مقارنة موجزة
3) نماذج البنية والنشر
3. 1 شبكة Sidecar (كلاسيكي)
يتلقى كل جراب سيارة جانبية بالوكالة.
الإيجابيات: النضج، التحكم الكامل في L7.
السلبيات: وحدة المعالجة المركزية/ذاكرة الوصول العشوائي، وتعقيد الاستنفاد/التصحيح.
3. 2 Istio Ambient Mesh
ztunnel (L4) on node + waipoint proxies (L7) حسب الاقتضاء.
الإيجابيات: تكلفة وتعقيد أقل، إدراج تدريجي لـ L7.
السلبيات: أحدث، ليست جميع حالات L7 متوفرة بدون نقطة طريق.
4) الهوية و mTLS (صفر ثقة)
4. 1 SPIFFE/SPIRE والشهادات
يتم تعيين معرف SPIFFE لكل تمرين: "spiffe ://cluster. المحلية/ns/NS/sa/SA '.
المصادقة: TLS المتبادلة بين الخدمات.
دوران المفتاح - تلقائيًا (TTL قصير).
4. 2 Istio (PeerAuthentication + DestinationRule)
yaml apiVersion: security. istio. io/v1 kind: PeerAuthentication metadata: { name: default, namespace: payments }
spec:
mtls: { mode: STRICT }
apiVersion: networking. istio. io/v1 kind: DestinationRule metadata: { name: payments-dr, namespace: payments }
spec:
host: payments. svc. cluster. local trafficPolicy:
tls: { mode: ISTIO_MUTUAL }
4. 3 Linkerd - mTLS الافتراضي
تم تمكينه بعد «تثبيت linkerd» + «حقن linkerd».
المجموعات - مرساة الثقة الخاصة، التناوب التلقائي.
5) إدارة حركة المرور
5. 1 Istio: VirtualService (الطرق، جزر الكناري)
yaml apiVersion: networking. istio. io/v1 kind: VirtualService metadata: { name: payments }
spec:
hosts: ["payments"]
http:
- route:
- destination: { host: payments, subset: v1 } # stable weight: 90
- destination: { host: payments, subset: v2 } # canary weight: 10 retries: { attempts: 2, perTryTimeout: 300ms }
timeout: 2s
قاعدة الوجهة (LB/CB):
yaml apiVersion: networking. istio. io/v1 kind: DestinationRule metadata: { name: payments }
spec:
host: payments subsets:
- name: v1 labels: { version: v1 }
- name: v2 labels: { version: v2 }
trafficPolicy:
loadBalancer: { simple: LEAST_CONN }
outlierDetection:
consecutive5xx: 5 interval: 5s baseEjectionTime: 30s maxEjectionPercent: 50
5. 2 Linkerd: ServiceProfile + TrafficSplit
yaml apiVersion: linkerd. io/v1alpha2 kind: ServiceProfile metadata:
name: payments. default. svc. cluster. local spec:
routes:
- name: POST /withdraw condition:
method: POST pathRegex: "/withdraw"
isRetryable: true timeout: 2s apiVersion: split. smi-spec. io/v1alpha2 kind: TrafficSplit metadata: { name: payments }
spec:
service: payments backends:
- service: payments-v1 weight: 90
- service: payments-v2 weight: 10
6) بوابات الدخول/الخروج وواجهة برمجة التطبيقات
بوابة Istio (الدخول/الخروج) - تتحكم في حركة المرور القادمة/الصادرة، وإنهاء TLS، ومرور mTLS.
تعمل Linkerd مع وحدات التحكم الحالية (NGINX/Contour/Traefik) ؛ الخروج - عبر أنماط NetworkPolicy/ext-gateway.
سياسات الخروج: القوائم البيضاء للمجال، سياسة SNI، حظر الإنترنت المباشر.
7) الإذن والسياسة
7. 1 سياسة الإذن بالاستقصاء (RBAC/ABAC)
yaml apiVersion: security. istio. io/v1 kind: AuthorizationPolicy metadata: { name: allow-withdraw, namespace: payments }
spec:
selector: { matchLabels: { app: payments } }
action: ALLOW rules:
- from:
- source:
principals: ["spiffe://cluster. local/ns/api/sa/gateway"]
to:
- operation:
methods: ["POST"]
paths: ["/withdraw"]
when:
- key: request. auth. claims[role]
values: ["cashout"]
7. 2 سياسة Linkerd (خادم + تفويض خادم)
yaml apiVersion: policy. linkerd. io/v1beta3 kind: Server metadata: { name: payments-server, namespace: payments }
spec:
podSelector: { matchLabels: { app: payments } }
port: 8080 apiVersion: policy. linkerd. io/v1beta3 kind: ServerAuthorization metadata: { name: allow-gateway, namespace: payments }
spec:
server: { name: payments-server }
client:
meshTLS:
identities: [".ns. api. serviceaccount. identity. linkerd. cluster. local"]
8) إمكانية الرصد والقياس عن بُعد
8. 1 مقاييس
Istio Telemetry API → Prometheus: 'istio _ requests _ total', 'istio _ request _ tration _ milliseconds _ bucket',' istio _ tcp _ received _ bytes _ total '.
Linkerd viz: 'request _ total', latency p50/p95/p99, 'success _ rate'.
8. 2 مسارات وجذوع الأشجار
ادفع سياق تتبع W3C.
Istio/Investoy → OTLP в OpenTelemetry Collector ؛ Linkerd - عبر قاطعي الأشجار الجانبية/تطبيق SDK.
8. 3 حالات
أضف trace _ id إلى مدة histograms للقفز إلى التتبع.
9) حدود المعدل، WAF، مرشحات مخصصة
Istio: EnvoyFilter/WASM لحدود الأسعار المحلية، وخدمة الحد الأقصى للأسعار (Redis)، بالإضافة إلى منطق WAF (Lua/WASM).
لينكرد: دعم محدود من السكان الأصليين ؛ حد السعر - عند مستوى الدخول/البوابة.
10) مجموعات متعددة
Istio: بوابة الشرق والغرب، PKI أو حزمة الثقة المشتركة، اكتشاف الخدمة عبر ServiceEntry، الاتحاد.
Linkerd: «linkerd multicluster link»، البوابة لكل مجموعة، контроллер مرآة الخدمة.
حالات الاستخدام: مناطق الأصول، توطين حركة المرور، الثقة الصفرية الاتحادية.
11) الأداء والتكلفة
شبكة Sidecar: وحدة المعالجة المركزية/ذاكرة الوصول العشوائي لكل جراب، زيادة زمن الوصول (عادة + 1-3 مللي ثانية لكل قفزة في حالة ثابتة).
المحيط (Istio): استهلاك أقل لـ L4، L7 يتم تشغيله.
Linkerd: يعتبر الوكيل خفيف الوزن بشكل عام أقل تكلفة، ولكنه أقل تطرفًا في قدرات L7.
الممارسة: قياس p95/CPU قبل/بعد، إبقاء بوابات SLO للتدهور.
12) السلامة
mTLS في كل مكان، TTL قصير، الدوران التلقائي.
Policy as Code (OPA/Gatekeeper، Kyverno) for 'afforthizationPolicy: ENGLISH all' reforms.
الأسرار - من خلال CSI/Vault، وليس في البيانات.
التحكم في الخروج: الرفض الافتراضي، قوائم السماح الصريحة.
مجالات ثقة منفصلة للبيئات (prod/stage).
13) التكامل مع الإطلاقات وبوابة SLO
يتم تنفيذ الكناري/الأزرق الأخضر عن طريق الطرق الشبكية (انظر الأمثلة).
تحليل المقاييس (Prometheus/SpanMetrics) في Argo Rollouts AnalysisTemplate - Hitchhiking/Rollback at burn-rate/p95/5xx.
شروح الإصدارات في Grafana: مقارنة 'النسخة =' الكناري 'المستقر.
14) الأنماط المضادة
ضع شبكة «في كل مكان وفي وقت واحد» → صدمة البنية التحتية.
تجاهل كردينية المقاييس/السجلات من الوكيل → تحميل تخزين TSDB/log.
اترك mTLS في وضع PERMISSIVE/غير الشفاف إلى الأبد.
حاول جعل منطق WAF/business معقدًا داخل EnvoyFilter بدلاً من البوابة/التطبيق.
لا توجد سياسة للخروج - تسريبات الإنترنت/تجاوز الامتثال.
وكلاء مع «: 15000» تصحيح مفتوح للخارج.
15) قائمة التنفيذ المرجعية (0-60 يوما)
0-15 أيام
اختيار النموذج: Sidecar vs Ambient (Istio )/Linkerd حسب ملف تعريف التحميل.
تمكين mTLS STRICT، سياسات الترخيص الأساسية لخدمات 1-2 الحيوية.
الطرق الأساسية (المهلة/الإعادات)، لوحات القيادة RED/SLO.
16-30 يومًا
كناري/TrafficSplit، كشف خارجي/كسر الدائرة على المسارات الساخنة.
تكامل OTEL: مسارات + نماذج ؛ معدل حرق التنبيه.
بوابات الخروج والقوائم البيضاء للنطاقات ؛ الإنكار الافتراضي.
31-60 يومًا
رابط متعدد المجموعات (إذا لزم الأمر)، ثقة الاتحاد.
السياسة كمدونة на الترخيص السياسة/ترخيص الخادم.
يوم اللعبة: محاكاة الحادث والطريق/التراجع عن السياسة.
16) مقاييس النضج
≥ تغطية mTLS (STRICT/auto-rotate) 95٪ من الخدمات.
حصة حركة المرور من خلال إصدارات الكناري/التدريجية ≥ 80٪.
متوسط النفقات العامة p95 <+ 5٪ من خط الأساس (بعد التحسين).
0 فتح الخروج دون إذن، 100٪ خدمات مع AuthZ الأساسي.
RCA «من الجدول الزمني إلى المسار» ≤ 2 دقيقة (p50).
17) أمثلة على «السياسة كمدونة»
حارس البوابة (حظر PERMISSIVE in prod)
yaml apiVersion: constraints. gatekeeper. sh/v1beta1 kind: K8sIstiomTLSStrict metadata: { name: deny-permissive-prod }
spec:
match:
kinds: [{ apiGroups: ["security. istio. io"], kinds: ["PeerAuthentication"] }]
namespaces: ["prod-"]
parameters:
allowedModes: ["STRICT"]
Kyverno (الملصقات المطلوبة لـ VS/DR)
yaml apiVersion: kyverno. io/v1 kind: ClusterPolicy metadata: { name: require-mesh-labels }
spec:
rules:
- name: vs-dr-labels match:
any:
- resources:
kinds: ["VirtualService","DestinationRule"]
validate:
message: "owner and service labels required"
pattern:
metadata:
labels:
owner: "?"
service: "?"
18) نصائح تشغيلية
إصدار السياسات والطرق (semver)، والترويج من خلال GitOps.
إمكانية الرصد بالوكالة: لوحات القيادة الفردية «التشبع بالوكالة» (وحدة المعالجة المركزية/كومة، retries، 429/503).
ميزانية الكاردينالية: تسميات «المسار» و «الكود» و «الوجهة» - قالب فقط.
حدود الشبكة/حصص مساحة الاسم (NetworkPolicy/LimitedRange).
وثائق القيادة: كتاب تشغيل «كيفية التراجع عن طرق/سياسة/مفاتيح mTLS».
19)
يفعل Istio و Linkerd الشيء نفسه - توحيد سلامة وموثوقية ورؤية الاتصالات عبر الخدمات - لكنهما يفعلان ذلك بأعماق وتكلفة مختلفة للملكية.
أنت بحاجة إلى قدرات L7 غنية وسياسات مرنة - خذ Istio (ضع في اعتبارك Ambient لتقليل النفقات العامة).
تحتاج إلى البساطة والنفقات العلوية الصغيرة - خذ Linkerd.
أيًا كانت الشبكة التي تختارها: قم بتمكين mTLS افتراضيًا، وإدارة التوجيه كرمز، وربط المقاييس بالمسارات، وإغلاق الخروج، وإضافة بوابة SLO إلى الإصدارات. ثم ستتوقف طبقة الشبكة عن أن تكون «صندوقًا أسود» وستصبح أداة يمكن التنبؤ بها لاستقرار وسرعة التغيير.