Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
kube-monkey — تطبيق لأداة Chaos Monkey من Netflix لمجموعات Kubernetes | Kitploit
أدوات/GitHubGitHub/asobti/kube-monkey
هندسة الفوضى
GitHubasobti/kube-monkey

kube-monkey

تطبيق لأداة Chaos Monkey من Netflix لمجموعات Kubernetes

عرض المستودع
3.1k254منذ 11 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Build Go Report Card License Docker Pulls Artifact Hub

kube-monkey هو تطبيق لـ Netflix's Chaos Monkey لمجموعات Kubernetes. يقوم بحذف Pods الخاصة بـ Kubernetes (k8s) بشكل عشوائي في المجموعة، مما يشجع ويختبر تطوير خدمات مقاومة للفشل.

انضم إلينا على #kube-monkey في Kubernetes Slack.


يعمل kube-monkey في ساعة محددة مسبقًا (run_hour، الافتراضي هو 8 صباحًا) في أيام الأسبوع، ويبني جدولًا لعمليات النشر التي ستواجه موت Pod عشوائي في وقت ما خلال نفس اليوم. النطاق الزمني خلال اليوم الذي قد يحدث فيه موت Pod العشوائي قابل للتهيئة والافتراضي هو من 10 صباحًا إلى 4 مساءً.

يمكن ضبط kube-monkey مع قائمة من مساحات الأسماء

  • للحظر (أي عمليات نشر داخل مساحة اسم محظورة لن يتم المساس بها)

لتعطيل القائمة السوداء، قم بتوفير [""] في config.param blacklisted_namespaces.

الاشتراك الاختياري في الفوضى

يعمل kube-monkey بنموذج اشتراك اختياري (opt-in) ولن يقوم بجدولة عمليات إنهاء إلا لتطبيقات Kubernetes (k8s) التي وافقت صراحةً على إنهاء Pods الخاصة بها بواسطة kube-monkey.

يتم الاشتراك الاختياري عن طريق تعيين التسميات التالية على تطبيق k8s:

kube-monkey/enabled: اضبطه على "enabled" للاشتراك الاختياري في kube-monkey
kube-monkey/mtbf: متوسط الوقت بين الأعطال، كرقم صحيح ووحدة: d للأيام، h للساعات أو m للدقائق. على سبيل المثال، إذا تم ضبطه على "3d"، يمكن لتطبيق k8s أن يتوقع قتل Pod كل ثالث يوم عمل تقريبًا، وإذا تم ضبطه على "2h"، فيمكنه توقع خسارة Pod كل ساعتين. القيمة بدون وحدة تُقرأ كأيام، لذا "3" و**"3d"** تعنيان الشيء نفسه. أقصر متوسط وقت بين الأعطال هو دقيقة واحدة. لاحظ أن جميع عمليات الإنهاء تحدث داخل نافذة التشغيل اليومية (انظر start_hour و end_hour)، لذا فإن mtbf أقصر من يوم يضع عمليات إنهاء ذلك اليوم في تلك النافذة.
kube-monkey/identifier: معرّف فريد لتطبيقات k8s. يُستخدم لتحديد الـ Pods التي تنتمي إلى تطبيق k8s لأن الـ Pods ترث التسميات من تطبيق k8s الخاص بها. لذلك، إذا اكتشف kube-monkey أن التطبيق قد سجّل ليكون ضحية، فسيبحث kube-monkey عن جميع الـ Pods التي تحمل التسمية لتحديد أي الـ Pods مرشحة للقتل. التوصية هي ضبط هذه القيمة لتكون نفس اسم التطبيق. : السلوك الافتراضي هو أن يقتل kube-monkey Pod واحدًا فقط من تطبيقك. يمكنك تجاوز هذا السلوك بتعيين القيمة إلى:

  • kill-all إذا كنت تريد أن يقتل kube-monkey جميع الـ Pods الخاصة بك بغض النظر عن حالتها (بما في ذلك الـ Pods غير الجاهزة وغير العاملة). لا يتطلب kill-value. استخدم هذه التسمية بحذر.
  • fixed إذا كنت تريد قتل عدد محدد من الـ Pods العاملة باستخدام kill-value. إذا حددت رقمًا أكبر من الموجود، فسيقتل جميع الـ Pods العاملة ويصدر تحذيرًا.
  • random-max-percent لتحديد أقصى % باستخدام kill-value يمكن قتلها. في الوقت المجدول، سيتم إنهاء % عشوائية محددة بشكل موحد من الـ Pods العاملة.
  • fixed-percent لتحديد نسبة % ثابتة باستخدام kill-value يمكن قتلها. في الوقت المجدول، سيتم إنهاء % ثابتة محددة من الـ Pods العاملة.

kube-monkey/kill-value: حدد قيمة لـ kill-mode

  • إذا كان fixed، قم بتوفير عدد صحيح للـ Pods التي سيتم قتلها
  • إذا كان random-max-percent، قم بتوفير رقم من 0 إلى 100 لتحديد الحد الأقصى % من الـ Pods التي يمكن لـ kube-monkey قتلها
  • إذا كان fixed-percent، قم بتوفير رقم من 0 إلى 100 لتحديد % الـ Pods المطلوب قتلها

مثال على Deployment مشترك اختياريًا يقتل Pod واحدًا في كل عملية تطهير

root@kitploit:~
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: monkey-victim
  namespace: app-namespace
spec:
  template:
    metadata:
      labels:
        kube-monkey/enabled: enabled
        kube-monkey/identifier: monkey-victim
        kube-monkey/mtbf: '2'
        kube-monkey/kill-mode: "fixed"
        kube-monkey/kill-value: '1'
[... omitted ...]

بالنسبة للإصدارات الأحدث من Kubernetes، قد تحتاج إلى إضافة التسميات إلى بيانات تعريف تطبيق k8s أيضًا.

root@kitploit:~
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: monkey-victim
  namespace: app-namespace
  labels:
    kube-monkey/enabled: enabled
    kube-monkey/identifier: monkey-victim
    kube-monkey/mtbf: '2'
    kube-monkey/kill-mode: "fixed"
    kube-monkey/kill-value: '1'
spec:
  template:
    metadata:
      labels:
        kube-monkey/enabled: enabled
        kube-monkey/identifier: monkey-victim
[... omitted ...]

تجاوز apiserver

حالات الاستخدام:

  • نظرًا لأن client-go لا يدعم cluster dns بشكل صريح مع ملاحظة // TODO: switch to using cluster DNS. في الكود، قد تحتاج إلى تجاوز apiserver.
  • إذا كنت تشغل نظامًا غير مصادق عليه، فقد تحتاج إلى فرض نقطة نهاية apiserver عبر http.

لتجاوز apiserver حدد ذلك في ملف config.toml

root@kitploit:~
[kubernetes]
host="https://your-apiserver-url.com:apiport"

كيف يعمل kube-monkey

وقت الجدولة

تتم الجدولة مرة واحدة يوميًا في أيام الأسبوع - وهذا هو الوقت الذي يتم فيه إنشاء جدول عمليات الإنهاء لليوم الحالي. أثناء الجدولة، سيقوم kube-monkey بـ:

  1. إنشاء قائمة بتطبيقات k8s المؤهلة (تطبيقات k8s التي اشتركت اختياريًا وغير مدرجة في القائمة السوداء، إذا تم تحديدها، ومدرجة في القائمة البيضاء، إذا تم تحديدها)
  2. لكل تطبيق k8s مؤهل، حساب عدد الـ Pods المطلوب قتلها اليوم من kube-monkey/mtbf. يتم قتل التطبيق 24h/mtbf مرة في اليوم، لذا فإن mtbf ليوم أو أكثر يمنح إنهاءً واحدًا على الأكثر، وmtbf أقصر يمنح عدة إنهاءات
  3. لكل عملية إنهاء، حساب وقت عشوائي سيتم فيه قتل Pod

وقت الإنهاء

هذا هو الوقت العشوائي المولّد خلال اليوم الذي سيكون لتطبيق k8s ضحية فيه Pod مقتول. في وقت الإنهاء، سيقوم kube-monkey بـ:

  1. التحقق من أن تطبيق k8s لا يزال مؤهلاً (لم ينسحب اختياريًا أو أُدرج في القائمة السوداء أو أُزيل من القائمة البيضاء منذ الجدولة)
  2. التحقق من أن تطبيق k8s حدّث kill-mode و kill-value
  3. اعتمادًا على kill-mode و kill-value، تنفيذ عمليات الإنهاء على الـ Pods

صور Docker

يمكن العثور على صور Docker الخاصة بـ kube-monkey على DockerHub

البناء

استنسخ المستودع وقم ببناء الحاوية.

root@kitploit:~
go get github.com/asobti/kube-monkey
cd $GOPATH/src/github.com/asobti/kube-monkey
make build
make container

الإعداد

يتم إعداد kube-monkey عبر متغيرات البيئة أو ملف toml موضوع في /etc/kube-monkey/config.toml، ويتوقع أن يكون configmap موجودًا قبل نشر kube-monkey.

يمكن العثور على مفاتيح الإعداد وأوصافها في config/param/param.go

مثال على ملف config.toml

root@kitploit:~
[kubemonkey]
dry_run = true                           # Terminations are only logged
run_hour = 8                             # Run scheduling at 8am on weekdays
start_hour = 10                          # Don't schedule any pod deaths before 10am
end_hour = 16                            # Don't schedule any pod deaths after 4pm
blacklisted_namespaces = ["kube-system"] # Critical apps live here
time_zone = "America/New_York"           # Set tzdata timezone example. Note the field is time_zone not timezone

مثال على متغيرات البيئة

root@kitploit:~
KUBEMONKEY_DRY_RUN=true
KUBEMONKEY_RUN_HOUR=8
KUBEMONKEY_START_HOUR=10
KUBEMONKEY_END_HOUR=16
KUBEMONKEY_BLACKLISTED_NAMESPACES=kube-system
KUBEMONKEY_TIME_ZONE=America/New_York

مثال على إعداد لاختبار عمل kube-monkey عن طريق تفعيل وضع التصحيح

ملاحظة: سيستمر هذا في مهاجمة الـ Pods كل 60 ثانية بغض النظر عن ما قمت بإعداده لـ startHour و endHour.

root@kitploit:~
[debug]
enabled= true
schedule_immediate_kill= true

الإشعارات

يدعم Kube-monkey الإشعارات ويمكنه إخطار نقطة نهاية من اختيارك بعد وقوع هجوم. يمكن أن تكون خطاف ويب Slack أو API مخصصًا.

مثال على إعداد لإرسال إشعارات الهجوم إلى نقطة نهاية HTTP

root@kitploit:~
[notifications]
  enabled = true
  reportSchedule = true
  [notifications.attacks]
    endpoint = "http://url1"
    message = "message1"
    headers = ["header1Key:header1Value","header2Key:header2/Value"]

العناصر النائبة

تدعم الرسالة العناصر النائبة التالية:

  • {$name}: اسم الضحية
  • {$kind}: نوع الضحية
  • {$namespace}: مساحة اسم الضحية
  • {$timestamp}: وقت الهجوم منذ عصر Unix بالمللي ثانية
  • {$time}: وقت الهجوم
  • {$date}: تاريخ الهجوم
  • {$error}: خطأ النتيجة، إن وجد
  • {$kubemonkeyid}: معرّف kube-monkey (يُعيّن باستخدام متغير البيئة KUBE_MONKEY_ID وإلا يكون فارغًا)
root@kitploit:~
  message: '{
            "what": "Kube-monkey(${kubemonkeyid}) attack of {$name} in {$namespace}",
            "who": "{$name}",
            "when": {$timestamp}
           }'

يدعم الترويسة عنصرًا نائبًا خاصًا لاسترداد قيمة متغير بيئة. وهذا مفيد عند استدعاء API له نقطة نهاية محمية. السيناريو النموذجي هو تمرير رمز API إلى حاوية Kube-monkey، حيث يتم تخزين هذا الرمز في Kubernetes Secret وتريد تمريره عبر متغير بيئة.

root@kitploit:~
headers = ["api-key:{$env:API_TOKEN}", "Content-Type:application/json"]

سيتم استبدال {$env:API_TOKEN} بقيمة متغير البيئة API_TOKEN.

لاحظ أنه إذا لم يكن متغير البيئة موجودًا، فلن يتم إلغاء استدعاء الإشعار. ستُحل القيمة إلى سلسلة فارغة، وسيظهر تحذير في السجلات.

النشر

يدويًا

  1. أولاً، انشر configmap المتوقع kube-monkey-config-map في مساحة الاسم التي تنوي تشغيل kube-monkey فيها (على سبيل المثال، مساحة الاسم kube-system). تأكد من تعريف اسم المفتاح كـ config.toml

على سبيل المثال kubectl create configmap km-config --from-file=config.toml=km-config.toml أو kubectl apply -f km-config.yaml

  1. قم بتشغيل kube-monkey كتطبيق k8s داخل مجموعة Kubernetes، في مساحة اسم لديها صلاحيات لقتل الـ Pods في مساحات الأسماء الأخرى (مثل kube-system).

انظر إلى دليل examples/ للحصول على أمثلة على ملفات Kubernetes yaml.

  1. يجب أن تكون قادرًا على رؤية سجلات التصحيح عبر kubectl logs -f deployment.apps/kube-monkey --namespace=kube-system. هنا deployment.apps/kube-monkey هو نشر k8s الخاص بـ kube-monkey.

Helm Chart

انظر كيفية تثبيت kube-monkey مع Helm.

التسجيل

يستخدم kube-monkey glog ويدعم جميع ميزات سطر الأوامر الخاصة بـ glog. لتحديد مستوى v مخصص أو دليل سجلات مخصص على الـ Pod، راجع args: ["-v=5", "-log_dir=/path/to/custom/log"] في ملف النشر المثال

مستويات glog المعيارية grep -r V\([0-9]\) *

L0: لا شيء

L1: أعلى مستوى لمعلومات الحالة الحالية والأخطاء المتعلقة بعمليات الإنهاء

L2: عمليات الإنهاء الناجحة

L3: معلومات حالة الجدولة الأكثر تفصيلاً

L4: تصحيح معلومات الجدولة والإعداد المفصّلة

L5: المشكلات غير المهمة التي تم حلها تلقائيًا

مزيد من الموارد: راجع صفحة تسجيل k8s التي تقترح أعراف المجتمع لشدة التسجيل

تعليمات حول كيفية تشغيل هذا على OpenShift 3.x

root@kitploit:~
git clone https://github.com/asobti/kube-monkey.git
cd examples
oc login http://someserver/ -u system:admin
oc project kube-system
oc create -f configmap.yaml
oc -n kube-system adm policy add-role-to-user -z deployer system:deployer
oc -n kube-system adm policy add-role-to-user -z builder system:image-builder
oc -n kube-system adm policy add-role-to-group system:image-puller system:serviceaccounts:kube-system
oc run kube-monkey --image=docker.io/ayushsobti/kube-monkey:v0.4.0 --command -- /kube-monkey -v=5 -log_dir=/var/log/kube-monkey
oc volume dc/kube-monkey --add --name=kubeconfigmap -m /etc/kube-monkey -t configmap --configmap-name=kube-monkey-config-map

OpenShift 4.x

root@kitploit:~
git clone https://github.com/asobti/kube-monkey.git
cd examples
oc login http://someserver/ -u system:admin
oc project kube-system
oc create -f configmap.yaml
oc -n kube-system adm policy add-cluster-role-to-user edit -z default --rolebinding-name kube-monkey-edit
oc run kube-monkey --image=docker.io/ayushsobti/kube-monkey:v0.3.0 --command -- /kube-monkey -v=5 -log_dir=/var/log/kube-monkey
oc set volume dc/kube-monkey --add --name=kubeconfigmap -m /etc/kube-monkey -t configmap --configmap-name=kube-monkey-config-map

طرق المساهمة

انظر كيفية المساهمة

الترخيص

هذا المشروع مرخص بموجب Apache License v2.0 - راجع ملف LICENSE للحصول على التفاصيل.

تنزيل الأداة
foo
kube-monkey/identifier: foo

kube-monkey/kill-mode