
KubeLinter es una herramienta de análisis estático que revisa archivos YAML de Kubernetes y Helm charts para garantizar que las aplicaciones representadas en ellos cumplan con las mejores prácticas.
Análisis estático para Kubernetes
KubeLinter analiza archivos YAML de Kubernetes, charts de Helm y manifiestos de Kustomize, y los verifica contra una variedad de mejores prácticas, con un enfoque en la preparación para producción y la seguridad.
KubeLinter ejecuta comprobaciones predeterminadas sensatas, diseñadas para brindarte información útil sobre tus archivos YAML de Kubernetes, charts de Helm y manifiestos de Kustomize. Esto ayuda a los equipos a detectar de manera temprana y frecuente configuraciones incorrectas de seguridad y mejores prácticas de DevOps. Algunos ejemplos comunes de esto incluyen ejecutar contenedores como un usuario no root, aplicar el principio de mínimo privilegio y almacenar información sensible únicamente en secretos.
KubeLinter es configurable, por lo que puedes habilitar y deshabilitar comprobaciones, así como crear tus propias comprobaciones personalizadas, según las políticas que desees seguir dentro de tu organización.
Cuando una comprobación de lint falla, KubeLinter informa recomendaciones sobre cómo resolver cualquier problema potencial y devuelve un código de salida distinto de cero.
Visita https://docs.kubelinter.io para obtener documentación detallada sobre cómo instalar, usar y configurar KubeLinter.
Los binarios de Kube-linter se pueden encontrar aquí: https://github.com/stackrox/kube-linter/releases/latest
Para instalar usando Go, ejecuta el siguiente comando:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
De lo contrario, descarga el último binario desde Releases y añádelo a tu PATH.
Para instalar usando Homebrew o LinuxBrew, ejecuta el siguiente comando:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
Instalar KubeLinter desde el código fuente es tan sencillo como seguir estos pasos:
Primero, clona el repositorio de KubeLinter.
git clone [email protected]:stackrox/kube-linter.git
Luego, compila el código fuente. Esto creará los archivos binarios de kube-linter para cada plataforma y los colocará en la carpeta .gobin.
make build
Finalmente, estás listo para empezar a usar KubeLinter. Verifica tu versión para asegurarte de que has instalado KubeLinter correctamente.
.gobin/kube-linter version
Hay varias capas de pruebas. Se espera que cada capa pase.
Pruebas unitarias de go:
make test
Pruebas de integración de extremo a extremo:
make e2e-test
Y, finalmente, pruebas de integración de extremo a extremo usando bats-core:
make e2e-bats
Las imágenes de KubeLinter están firmadas por cosign. Recomendamos verificar la imagen antes de usarla.
Una vez que hayas instalado cosign, puedes usar la clave pública de KubeLinter para verificar la imagen de KubeLinter con:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter también proporciona firmas keyless de cosign.
Puedes verificar la imagen de KubeLinter con:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
Ejecutar KubeLinter para hacer lint de tus archivos YAML solo requiere dos pasos en su forma más básica.
Localiza el archivo YAML que deseas probar en cuanto a seguridad y mejores prácticas de preparación para producción:
Ejecuta el siguiente comando:
kube-linter lint /path/to/your/yaml.yaml
Considera el siguiente archivo de especificación de pod de ejemplo pod.yaml. Este archivo tiene dos problemas de preparación para producción y un problema de seguridad:
Problema de seguridad:
Preparación para producción:
Los límites de memoria del contenedor no están establecidos, lo que podría permitirle consumir memoria en exceso
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
Copia el YAML anterior a pod.yaml y haz lint de este archivo ejecutando el siguiente comando:
kube-linter lint pod.yaml
KubeLinter ejecuta sus comprobaciones predeterminadas e informa recomendaciones. A continuación se muestra la salida de nuestro comando anterior.
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 admite la generación de múltiples formatos de salida en una sola ejecución. Esto es útil para generar informes legibles por humanos y por máquina simultáneamente:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
Este comando:
kube-linter.sarifkube-linter.jsonNota: Los múltiples formatos requieren indicadores --output explícitos. Para la salida de un solo formato a stdout, usa solo un indicador --format sin --output.
Para más detalles sobre el uso de múltiples formatos de salida, consulta la documentación.
Para obtener más información sobre cómo usar y configurar KubeLinter, visita la página de documentación.
Los siguientes son tutoriales sobre KubeLinter escritos por usuarios. Si tienes uno que te gustaría añadir a esta lista, ¡envía un PR!
KubeLinter está licenciado bajo la Apache License 2.0.
Si deseas interactuar con la comunidad de KubeLinter, incluidos mantenedores y otros usuarios, puedes unirte al espacio de trabajo de Slack aquí.
Puede haber cambios importantes en el futuro en el uso de comandos, indicadores y formatos de archivos de configuración. Sin embargo, te animamos a usar KubeLinter para probar tus archivos YAML de entorno, ver qué falla y contribuir.
Como recordatorio, toda participación en la comunidad de KubeLinter se rige por nuestro código de conducta.
KubeLinter está creado con ❤️ por StackRox y ahora funciona con Red Hat.