Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/asobti/kube-monkey
कैओस इंजीनियरिंग
GitHubasobti/kube-monkey

kube-monkey

Kubernetes क्लस्टर्स के लिए Netflix के Chaos Monkey का एक कार्यान्वयन

रिपॉजिटरी देखें
3.1k25411 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Build Go Report Card License Docker Pulls Artifact Hub

kube-monkey, Kubernetes क्लस्टरों के लिए Netflix's Chaos Monkey का एक कार्यान्वयन है। यह क्लस्टर में Kubernetes (k8s) पॉड्स को बेतरतीब ढंग से हटाता है, जिससे विफलता-सहिष्णु सेवाओं के विकास को प्रोत्साहन और मान्यता मिलती है।

हमसे Kubernetes Slack पर #kube-monkey से जुड़ें।


kube-monkey कार्यदिवसों पर एक पूर्व-कॉन्फ़िगर घंटे (run_hour, डिफ़ॉल्ट सुबह 8 बजे) पर चलता है, और उन डिप्लॉयमेंट्स की एक अनुसूची बनाता है जिन्हें उसी दिन किसी समय एक यादृच्छिक पॉड मृत्यु का सामना करना पड़ेगा। दिन के दौरान वह समय-सीमा जब यादृच्छिक पॉड मृत्यु हो सकती है, कॉन्फ़िगर करने योग्य है और डिफ़ॉल्ट रूप से सुबह 10 बजे से शाम 4 बजे तक है।

kube-monkey को नेमस्पेस की सूची के साथ कॉन्फ़िगर किया जा सकता है

  • ब्लैकलिस्ट करने के लिए (ब्लैकलिस्ट किए गए नेमस्पेस के भीतर किसी भी डिप्लॉयमेंट को नहीं छुआ जाएगा)

ब्लैकलिस्ट अक्षम करने के लिए blacklisted_namespaces config.param में [""] प्रदान करें।

अराजकता में ऑप्ट-इन करना

kube-monkey ऑप्ट-इन मॉडल पर काम करता है और केवल उन Kubernetes (k8s) ऐप्स के लिए समापन निर्धारित करेगा जिन्होंने स्पष्ट रूप से अपने पॉड्स को kube-monkey द्वारा समाप्त किए जाने पर सहमति दी है।

ऑप्ट-इन k8s ऐप पर निम्नलिखित लेबल सेट करके किया जाता है:

kube-monkey/enabled: "enabled" पर सेट करें ताकि kube-monkey में ऑप्ट-इन किया जा सके

kube-monkey/mtbf: विफलता के बीच औसत समय, एक पूर्ण संख्या और एक इकाई के रूप में: d दिनों के लिए, h घंटों के लिए या m मिनटों के लिए। उदाहरण के लिए, यदि "3d" पर सेट है, तो k8s ऐप लगभग हर तीसरे कार्यदिवस में एक पॉड मारे जाने की उम्मीद कर सकता है, और यदि "2h" पर सेट है, तो वह हर दो घंटे में एक पॉड खोने की उम्मीद कर सकता है। बिना इकाई वाला मान दिनों के रूप में पढ़ा जाता है, इसलिए "3" और "3d" एक ही अर्थ रखते हैं। विफलता के बीच का सबसे कम औसत समय एक मिनट है। ध्यान दें कि सभी समापन दैनिक रन विंडो के भीतर होते हैं (start_hour और end_hour देखें), इसलिए एक दिन से कम का mtbf उस दिन के समापन को उसी विंडो में समेट देता है।

kube-monkey/identifier: k8s ऐप्स के लिए एक अद्वितीय पहचानकर्ता। इसका उपयोग उन पॉड्स की पहचान करने के लिए किया जाता है जो किसी k8s ऐप से संबंधित हैं, क्योंकि पॉड्स अपने k8s ऐप से लेबल प्राप्त करते हैं। इसलिए, यदि kube-monkey पता लगाता है कि ऐप foo ने शिकार बनने के लिए नामांकन किया है, तो kube-monkey उन सभी पॉड्स की तलाश करेगा जिन पर लेबल kube-monkey/identifier: foo है, यह निर्धारित करने के लिए कि कौन से पॉड्स मारे जाने के उम्मीदवार हैं। अनुशंसा यह है कि इस मान को ऐप के नाम के समान सेट किया जाए।

kube-monkey/kill-mode: डिफ़ॉल्ट व्यवहार यह है कि kube-monkey आपके ऐप का केवल एक पॉड मारता है। आप मान को निम्न में से एक पर सेट करके इस व्यवहार को ओवरराइड कर सकते हैं:

  • kill-all यदि आप चाहते हैं कि kube-monkey आपके सभी पॉड्स को स्थिति की परवाह किए बिना मार दे (उन पॉड्स सहित जो तैयार नहीं हैं और चालू नहीं हैं)। kill-value की आवश्यकता नहीं है। इस लेबल का सावधानी से उपयोग करें।
  • fixed यदि आप kill-value के साथ चल रहे पॉड्स की एक विशिष्ट संख्या को मारना चाहते हैं। यदि आप अधिक निर्दिष्ट करते हैं, तो यह सभी चल रहे पॉड्स को मार देगा और एक चेतावनी जारी करेगा।
  • random-max-percent ताकि kill-value के साथ एक अधिकतम % निर्दिष्ट किया जा सके जिसे मारा जा सकता है। निर्धारित समय पर, चल रहे पॉड्स का एक समान यादृच्छिक निर्दिष्ट % समाप्त किया जाएगा।
  • fixed-percent ताकि kill-value के साथ एक निश्चित % निर्दिष्ट किया जा सके जिसे मारा जा सकता है। निर्धारित समय पर, चल रहे पॉड्स का एक निर्दिष्ट निश्चित % समाप्त किया जाएगा।

kube-monkey/kill-value: kill-mode के लिए मान निर्दिष्ट करें

  • यदि fixed है, तो मारने के लिए पॉड्स की एक पूर्णांक संख्या प्रदान करें
  • यदि random-max-percent है, तो kube-monkey द्वारा मारे जा सकने वाले पॉड्स का अधिकतम % निर्दिष्ट करने के लिए 0-100 से एक संख्या प्रदान करें
  • यदि fixed-percent है, तो मारे जाने वाले पॉड्स का % निर्दिष्ट करने के लिए 0-100 से एक संख्या प्रदान करें

ऑप्ट-इन किए गए डिप्लॉयमेंट का उदाहरण जो प्रति purge एक पॉड मारता है

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 को ओवरराइड करने की आवश्यकता हो सकती है।
  • यदि आप एक अनप्रमाणित सिस्टम चला रहे हैं, तो आपको http apiserver endpoint को बलपूर्वक उपयोग करने की आवश्यकता हो सकती है।

apiserver को ओवरराइड करने के लिए config.toml फ़ाइल में निर्दिष्ट करें

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

kube-monkey कैसे काम करता है

अनुसूची (Scheduling) समय

अनुसूची कार्यदिवसों पर दिन में एक बार होती है - यह वह समय है जब वर्तमान दिन के लिए समापन की अनुसूची बनाई जाती है। अनुसूची के दौरान, kube-monkey:

  1. पात्र k8s ऐप्स की एक सूची बनाएगा (k8s ऐप्स जिन्होंने ऑप्ट-इन किया है और ब्लैकलिस्ट नहीं हैं, यदि निर्दिष्ट है, और व्हाइटलिस्ट किए गए हैं, यदि निर्दिष्ट है)
  2. प्रत्येक पात्र k8s ऐप के लिए, kube-monkey/mtbf से आज मारे जाने वाले पॉड्स की संख्या निकालेगा। एक ऐप दिन में 24h/mtbf बार मारा जाता है, इसलिए एक दिन या उससे अधिक का mtbf अधिकतम एक समापन देता है और छोटा कई समापन देता है
  3. प्रत्येक समापन के लिए, एक यादृच्छिक समय की गणना करेगा जब एक पॉड मारा जाएगा

समापन समय

यह दिन के दौरान वह यादृच्छिक रूप से उत्पन्न समय है जब एक शिकार k8s ऐप का एक पॉड मारा जाएगा। समापन समय पर, kube-monkey:

  1. जाँच करेगा कि क्या k8s ऐप अभी भी पात्र है (अनुसूची के बाद से ऑप्ट-आउट नहीं किया गया है या ब्लैकलिस्ट नहीं किया गया है या व्हाइटलिस्ट से नहीं हटाया गया है)
  2. जाँच करेगा कि क्या k8s ऐप ने kill-mode और kill-value अपडेट किया है
  3. kill-mode और kill-value के आधार पर, पॉड्स को समाप्त करेगा

Docker इमेजेस

kube-monkey के लिए Docker इमेजेस DockerHub पर पाई जा सकती हैं।

निर्माण (Building)

रिपॉजिटरी को क्लोन करें और कंटेनर बनाएँ।

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

कॉन्फ़िगर करना

kube-monkey को पर्यावरण चर या /etc/kube-monkey/config.toml पर रखी गई toml फ़ाइल द्वारा कॉन्फ़िगर किया जाता है और kube-monkey डिप्लॉयमेंट से पहले configmap के मौजूद होने की अपेक्षा करता है।

कॉन्फ़िगरेशन कुंजियाँ और विवरण 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 के काम करने का परीक्षण करने के लिए उदाहरण कॉन्फ़िगरेशन

ध्यान दें: आपने startHour और endHour के लिए जो कुछ भी कॉन्फ़िगर किया है, उसके बावजूद यह हर 60 सेकंड में पॉड्स पर हमला करता रहेगा।

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

सूचनाएँ

Kube-monkey सूचनाओं का समर्थन करता है और हमले के बाद आपकी पसंद के endpoint को सूचित कर सकता है। यह Slack webhook या एक कस्टम API हो सकता है।

HTTP endpoint पर हमले की सूचनाएँ भेजने के लिए उदाहरण कॉन्फ़िगरेशन

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

प्लेसहोल्डर

संदेश निम्नलिखित प्लेसहोल्डर्स का समर्थन करता है:

  • {$name}: शिकार का नाम
  • {$kind}: शिकार का प्रकार (kind)
  • {$namespace}: शिकार का नेमस्पेस
  • {$timestamp}: Unix epoch से मिलीसेकंड में हमले का समय
  • {$time}: हमले का समय
  • {$date}: हमले की तारीख
  • {$error}: परिणाम की त्रुटि, यदि कोई हो
  • {$kubemonkeyid}: kube-monkey id (KUBE_MONKEY_ID env वेरिएबल का उपयोग करके सेट किया गया, अन्यथा खाली)
root@kitploit:~
  message: '{
            "what": "Kube-monkey(${kubemonkeyid}) attack of {$name} in {$namespace}",
            "who": "{$name}",
            "when": {$timestamp}
           }'

हेडर एक विशेष प्लेसहोल्डर का समर्थन करता है जो पर्यावरण चर का मान प्राप्त करता है। यह किसी ऐसे API को कॉल करते समय उपयोगी है जिसका endpoint सुरक्षित है। एक सामान्य परिदृश्य Kube-monkey कंटेनर में API टोकन पास करना होगा, यह टोकन Kubernetes Secret में संग्रहीत होता है और आप इसे पर्यावरण चर के माध्यम से पास करना चाहते हैं।

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

{$env:API_TOKEN} को पर्यावरण चर API_TOKEN के मान से बदल दिया जाएगा।

ध्यान दें यदि पर्यावरण चर मौजूद नहीं है, तो सूचना कॉल रद्द नहीं होगी। मान एक खाली स्ट्रिंग में हल हो जाएगा, और लॉग में एक चेतावनी दिखाई देगी।

परिनियोजन (Deploying)

मैन्युअल रूप से

  1. पहले, जिस नेमस्पेस में आप kube-monkey चलाने का इरादा रखते हैं, वहाँ अपेक्षित kube-monkey-config-map configmap परिनियोजित करें (उदाहरण के लिए, kube-system नेमस्पेस)। सुनिश्चित करें कि keyname को config.toml के रूप में परिभाषित किया गया है।

उदाहरण के लिए kubectl create configmap km-config --from-file=config.toml=km-config.toml या kubectl apply -f km-config.yaml

  1. kube-monkey को Kubernetes क्लस्टर के भीतर एक k8s ऐप के रूप में चलाएँ, ऐसे नेमस्पेस में जिसके पास अन्य नेमस्पेस में पॉड्स को मारने की अनुमतियाँ हैं (जैसे kube-system)।

उदाहरण Kubernetes yaml फ़ाइलों के लिए examples/ निर्देशिका देखें।

  1. आप kubectl logs -f deployment.apps/kube-monkey --namespace=kube-system द्वारा डिबग लॉग देख सकते हैं, यहाँ deployment.apps/kube-monkey kube-monkey के लिए k8s डिप्लॉयमेंट है।

Helm Chart

देखें Helm के साथ kube-monkey कैसे स्थापित करें।

लॉगिंग

kube-monkey glog का उपयोग करता है और glog की सभी कमांड-लाइन सुविधाओं का समर्थन करता है। पॉड पर कस्टम v स्तर या कस्टम लॉग निर्देशिका निर्दिष्ट करने के लिए, उदाहरण डिप्लॉयमेंट फ़ाइल में args: ["-v=5", "-log_dir=/path/to/custom/log"] देखें।

मानकीकृत glog स्तर grep -r V\([0-9]\) *

L0: कोई नहीं

L1: उच्चतम स्तर की वर्तमान स्थिति जानकारी और समापन के साथ त्रुटियाँ

L2: सफल समापन

L3: अधिक विस्तृत अनुसूची स्थिति जानकारी

L4: डिबगिंग वर्बोज़ अनुसूची और कॉन्फ़िग जानकारी

L5: स्वतः-हल किए गए महत्वहीन मुद्दे

अधिक संसाधन: k8s logging page देखें, जो लॉगिंग गंभीरता के लिए सामुदायिक परंपराएँ का सुझाव देता है।

इसे 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 फ़ाइल देखें।

टूल डाउनलोड करें