
KubeLinter एक स्थैतिक विश्लेषण उपकरण है जो Kubernetes YAML फ़ाइलों और Helm चार्ट्स की जाँच करता है ताकि यह सुनिश्चित किया जा सके कि उनमें दर्शाए गए अनुप्रयोग सर्वोत्तम प्रथाओं का पालन करते हैं।
Kubernetes के लिए स्थैतिक विश्लेषण
KubeLinter Kubernetes YAML फ़ाइलों, Helm चार्ट्स और Kustomize मैनिफेस्टों का विश्लेषण करता है, और उत्पादन तत्परता (production readiness) और सुरक्षा पर केंद्रित विभिन्न सर्वोत्तम प्रथाओं के विरुद्ध उनकी जाँच करता है।
KubeLinter समझदार डिफ़ॉल्ट जाँचें चलाता है, जो आपकी Kubernetes YAML फ़ाइलों, Helm चार्ट्स और Kustomize मैनिफेस्टों के बारे में उपयोगी जानकारी देने के लिए डिज़ाइन की गई हैं। इसका उद्देश्य टीमों को सुरक्षा गलत-कॉन्फ़िगरेशन और DevOps सर्वोत्तम प्रथाओं के लिए जल्दी और बार-बार जाँच करने में मदद करना है। इनमें से कुछ सामान्य उदाहरण हैं: कंटेनरों को गैर-रूट उपयोगकर्ता के रूप में चलाना, न्यूनतम विशेषाधिकार (least privilege) लागू करना, और संवेदनशील जानकारी को केवल secrets में संग्रहीत करना।
KubeLinter कॉन्फ़िगर करने योग्य है, इसलिए आप अपने संगठन के भीतर जिन नीतियों का पालन करना चाहते हैं, उसके आधार पर जाँचों को सक्षम/अक्षम कर सकते हैं और अपनी स्वयं की कस्टम जाँचें भी बना सकते हैं।
जब कोई lint जाँच विफल होती है, तो KubeLinter किसी भी संभावित समस्या को हल करने के तरीके के लिए सिफारिशें रिपोर्ट करता है और एक गैर-शून्य (non-zero) exit code लौटाता है।
KubeLinter को स्थापित करने, उपयोग करने और कॉन्फ़िगर करने के विस्तृत दस्तावेज़ के लिए https://docs.kubelinter.io देखें।
Kube-linter के बाइनरी यहाँ मिल सकते हैं: https://github.com/stackrox/kube-linter/releases/latest
Go का उपयोग करके स्थापित करने के लिए, निम्न कमांड चलाएँ:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
अन्यथा, Releases से नवीनतम बाइनरी डाउनलोड करें और उसे अपने PATH में जोड़ें।
Homebrew या LinuxBrew का उपयोग करके स्थापित करने के लिए, निम्न कमांड चलाएँ:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
KubeLinter को स्रोत से स्थापित करना इन चरणों का पालन करने जितना सरल है:
सबसे पहले, KubeLinter रिपॉज़िटरी को क्लोन करें।
git clone [email protected]:stackrox/kube-linter.git
फिर, स्रोत कोड को कंपाइल करें। यह प्रत्येक प्लेटफ़ॉर्म के लिए kube-linter बाइनरी फ़ाइलें बनाएगा और उन्हें .gobin फ़ोल्डर में रखेगा।
make build
अंत में, आप KubeLinter का उपयोग शुरू करने के लिए तैयार हैं। अपना वर्शन सत्यापित करें ताकि यह सुनिश्चित हो सके कि आपने KubeLinter को सफलतापूर्वक स्थापित कर लिया है।
.gobin/kube-linter version
परीक्षण की कई परतें हैं। प्रत्येक परत को पास होना चाहिए।
go यूनिट टेस्ट:
make test
एंड-टू-एंड इंटीग्रेशन टेस्ट:
make e2e-test
और अंत में, bats-core का उपयोग करके एंड-टू-एंड इंटीग्रेशन टेस्ट:
make e2e-bats
KubeLinter इमेजेज़ cosign द्वारा हस्ताक्षरित हैं। हम इमेज का उपयोग करने से पहले उसे सत्यापित करने की अनुशंसा करते हैं।
cosign स्थापित करने के बाद, आप KubeLinter इमेज को सत्यापित करने के लिए KubeLinter सार्वजनिक कुंजी का उपयोग कर सकते हैं:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter cosign keyless signatures भी प्रदान करता है।
आप KubeLinter इमेज को इस प्रकार सत्यापित कर सकते हैं:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
अपनी YAML फ़ाइलों को Lint करने के लिए KubeLinter चलाने में इसके सबसे बुनियादी रूप में केवल दो चरण लगते हैं।
उस YAML फ़ाइल का पता लगाएँ जिसे आप सुरक्षा और उत्पादन तत्परता सर्वोत्तम प्रथाओं के लिए परीक्षण करना चाहते हैं:
निम्न कमांड चलाएँ:
kube-linter lint /path/to/your/yaml.yaml
निम्नलिखित नमूना पॉड स्पेसिफिकेशन फ़ाइल pod.yaml पर विचार करें। इस फ़ाइल में दो उत्पादन तत्परता समस्याएँ और एक सुरक्षा समस्या है:
सुरक्षा समस्या:
उत्पादन तत्परता:
कंटेनर की मेमोरी सीमाएँ निर्धारित नहीं हैं, जिससे वह अत्यधिक मेमोरी खपत कर सकता है
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
resources:
requests:
memory: "64Mi"
cpu: "250m"
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
उपरोक्त YAML को pod.yaml में कॉपी करें और निम्न कमांड चलाकर इस फ़ाइल को lint करें:
kube-linter lint pod.yaml
KubeLinter अपनी डिफ़ॉल्ट जाँचें चलाता है और सिफारिशें रिपोर्ट करता है। नीचे हमारे पिछले कमांड का आउटपुट है।
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
KubeLinter एक ही रन में कई आउटपुट प्रारूप उत्पन्न करने का समर्थन करता है। यह मानव-पठनीय और मशीन-पठनीय दोनों तरह की रिपोर्ट एक साथ उत्पन्न करने के लिए उपयोगी है:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
यह कमांड:
kube-linter.sarif में SARIF प्रारूप रिपोर्ट उत्पन्न करेगाkube-linter.json में JSON प्रारूप रिपोर्ट उत्पन्न करेगानोट: एकाधिक प्रारूपों के लिए स्पष्ट --output फ़्लैग आवश्यक हैं। stdout पर एकल प्रारूप आउटपुट के लिए, बिना --output के केवल एक --format फ़्लैग का उपयोग करें।
एकाधिक आउटपुट प्रारूपों का उपयोग करने के अधिक विवरण के लिए, दस्तावेज़ देखें।
KubeLinter का उपयोग और कॉन्फ़िगरेशन के बारे में अधिक जानने के लिए, दस्तावेज़ पृष्ठ देखें।
निम्नलिखित KubeLinter पर उपयोगकर्ताओं द्वारा लिखे गए ट्यूटोरियल हैं। यदि आप इस सूची में कोई जोड़ना चाहते हैं, तो कृपया एक PR भेजें!
KubeLinter Apache License 2.0 के अंतर्गत लाइसेंस प्राप्त है।
यदि आप KubeLinter समुदाय के साथ जुड़ना चाहते हैं, जिसमें मेंटेनर और अन्य उपयोगकर्ता शामिल हैं, तो आप Slack वर्कस्पेस यहाँ से जुड़ सकते हैं।
भविष्य में कमांड उपयोग, फ़्लैग और कॉन्फ़िगरेशन फ़ाइल प्रारूपों में ब्रेकिंग परिवर्तन हो सकते हैं। फिर भी, हम आपको प्रोत्साहित करते हैं कि KubeLinter का उपयोग अपने पर्यावरण की YAML फ़ाइलों का परीक्षण करने, यह देखने के लिए करें कि क्या टूटता है, और योगदान करें।
एक अनुस्मारक के रूप में, KubeLinter समुदाय में सभी भागीदारी हमारे आचार संहिता द्वारा शासित है।
KubeLinter StackRox द्वारा ❤️ के साथ बनाया गया है और अब Red Hat द्वारा संचालित है।