
KubeLinter هي أداة تحليل ثابت تفحص ملفات Kubernetes بصيغة YAML ومخططات Helm للتأكد من أن التطبيقات الممثلة فيها تلتزم بأفضل الممارسات.
تحليل ثابت لـ Kubernetes
يحلل KubeLinter ملفات Kubernetes بصيغة YAML، ومخططات Helm، وملفات Kustomize، ويفحصها مقابل مجموعة متنوعة من أفضل الممارسات، مع التركيز على الجاهزية للإنتاج والأمان.
يشغّل KubeLinter فحوصات افتراضية منطقية، مصممة لمنحك معلومات مفيدة حول ملفات Kubernetes بصيغة YAML، ومخططات Helm، وملفات Kustomize. وهذا لمساعدة الفرق على الفحص مبكرًا وبشكل متكرر بحثًا عن أخطاء التكوين الأمنية وأفضل ممارسات DevOps. تتضمن بعض الأمثلة الشائعة على ذلك تشغيل الحاويات كمستخدم غير جذر، وتطبيق مبدأ الامتياز الأقل، وتخزين المعلومات الحساسة في الأسرار (Secrets) فقط.
KubeLinter قابل للتكوين، لذا يمكنك تمكين الفحوصات وتعطيلها، بالإضافة إلى إنشاء فحوصات مخصصة خاصة بك، وفقًا للسياسات التي تريد اتباعها داخل مؤسستك.
عند فشل فحص lint، يقدم KubeLinter توصيات حول كيفية حل أي مشكلات محتملة ويعيد رمز خروج غير صفري.
تفضل بزيارة https://docs.kubelinter.io للحصول على توثيق مفصّل حول تثبيت KubeLinter واستخدامه وتكوينه.
يمكن العثور على ثنائيات 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
اختبارات التكامل الشاملة (end-to-end):
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 بدون مفاتيح.
يمكنك التحقق من صورة KubeLinter باستخدام:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
تشغيل KubeLinter لفحص ملفات YAML الخاصة بك يتطلب خطوتين فقط في أبسط صوره.
حدد ملف YAML الذي تريد اختباره وفقًا لأفضل ممارسات الأمان والجاهزية للإنتاج:
نفّذ الأمر التالي:
kube-linter lint /path/to/your/yaml.yaml
ضع في اعتبارك ملف مواصفات pod النموذجي التالي 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 وافحص هذا الملف عن طريق تنفيذ الأمر التالي:
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.sarifkube-linter.jsonملاحظة: تتطلب الصيغ المتعددة وجود علامات --output صريحة. لإخراج صيغة واحدة إلى stdout، استخدم علامة --format واحدة فقط بدون --output.
لمزيد من التفاصيل حول استخدام صيغ المخرجات المتعددة، راجع التوثيق.
لمعرفة المزيد حول استخدام وتكوين KubeLinter، قم بزيارة صفحة التوثيق.
فيما يلي دروس تعليمية حول KubeLinter كتبها مستخدمون. إذا كان لديك درس تود إضافته إلى هذه القائمة، فيرجى إرسال PR!
KubeLinter مرخّص بموجب رخصة Apache 2.0.
إذا كنت ترغب في التفاعل مع مجتمع KubeLinter، بما في ذلك المشرفون والمستخدمون الآخرون، يمكنك الانضمام إلى مساحة عمل Slack هنا.
قد تكون هناك تغييرات جذرية في المستقبل على استخدام الأوامر والعلامات وصيغ ملفات التكوين. ومع ذلك، نشجعك على استخدام KubeLinter لاختبار ملفات YAML الخاصة ببيئتك، ومعرفة ما قد يتعطل، والمساهمة.
وللتذكير، فإن جميع المشاركات في مجتمع KubeLinter تخضع لـمدونة قواعد السلوك.
تم إنشاء KubeLinter بـ ❤️ بواسطة StackRox ويعمل الآن بواسطة Red Hat.