Análisis estático para Kubernetes
Kubelinter analiza los archivos y gráficos de timón de Kubernetes Yaml, y los verifica en una variedad de mejores prácticas, con un enfoque en la preparación de la producción y la seguridad.
Kubelinter ejecuta verificaciones predeterminadas sensatas, diseñadas para brindarle información útil sobre sus archivos y listas de timón de Kubernetes Yaml. Esto es para ayudar a los equipos a verificar temprano y, a menudo, las configuraciones erróneas de seguridad y las mejores prácticas de DevOps. Algunos ejemplos comunes de estos incluyen ejecutar contenedores como usuario no raíz, imponer un menor privilegio y almacenar información confidencial solo en secretos.
Kubelinter es configurable, por lo que puede habilitar y deshabilitar las verificaciones, así como crear sus propias cheques personalizados, dependiendo de las políticas que desee seguir dentro de su organización.
Cuando falla una verificación de pelusa, Kubelinter informa recomendaciones sobre cómo resolver cualquier problema potencial y devuelve un código de salida distinto de cero.
Visite https://docs.kubelinter.io para una documentación detallada sobre la instalación, usando y configurando Kubelinter.
Los binarios de Kube-Linter se pueden encontrar aquí: https://github.com/stackrox/kube-linter/releases/latest
Para instalar usando Go, ejecute el siguiente comando:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latestDe lo contrario, descargue el último binario de los lanzamientos y agréguelo a su ruta.
Para instalar usando HomeBrew o LinuxBrew, ejecute el siguiente comando:
brew install kube-linter nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
La instalación de Kubelinter desde la fuente es tan simple como seguir estos pasos:
Primero, clone el repositorio de Kubelinter.
git clone [email protected]:stackrox/kube-linter.git Luego, compile el código fuente. Esto creará los archivos binarios de Kube-Linter para cada plataforma y los coloca en la carpeta .gobin .
make buildFinalmente, está listo para comenzar a usar Kubelinter. Verifique su versión para asegurarse de haber instalado con éxito Kubelinter.
.gobin/kube-linter versionHay varias capas de pruebas. Se espera que cada capa pase.
Pruebas unitarias go :
make testPruebas de integración de extremo a extremo:
make e2e-test Y finalmente, las pruebas de integración de extremo a extremo utilizando bats-core :
make e2e-batsLas imágenes de Kubelinter están firmadas por Cosign. Recomendamos verificar la imagen antes de usarla.
Una vez que haya instalado Cosign, puede usar la tecla pública 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_NAMEKubelinter también proporciona firmas Cosign sin llave.
Puede verificar la imagen de Kubelinter con:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME Ejecutar Kubelinter para pelear sus archivos YAML solo requiere dos pasos en su forma más básica.
Localice el archivo YAML que desea probar las mejores prácticas de seguridad y preparación para la producción:
Ejecute el siguiente comando:
kube-linter lint /path/to/your/yaml.yaml Considere el siguiente archivo de especificación POD de muestra pod.yaml . Este archivo tiene dos problemas de preparación de producción y un problema de seguridad:
Problema de seguridad:
Preparación de producción:
No se establecen los límites de memoria del contenedor, lo que podría permitir que consuma una memoria excesiva
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 : falseCopie el Yaml anterior a Pod.yaml y vincule este archivo ejecutando el siguiente comando:
kube-linter lint pod.yamlKubelinter ejecuta sus verificaciones 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
Para obtener más información sobre cómo usar y configurar Kubelinter, visite la página de documentación.
Los siguientes son tutoriales sobre Kubelinter escritos por los usuarios. Si tiene uno que le gustaría agregar a esta lista, ¡envíe un PR!
Si desea comprometerse con la comunidad Kubelinter, incluidos los mantenedores y otros usuarios, puede unirse al espacio de trabajo Slack aquí.
Para contribuir, consulte nuestra guía contribuyente.
Como recordatorio, toda la participación en la comunidad Kubelinter se rige por nuestro Código de Conducta.
Kubelinter se encuentra en una etapa temprana de desarrollo. Puede haber cambios de ruptura en el futuro al uso del comando, los indicadores y los formatos de archivo de configuración. Sin embargo, le recomendamos que use Kubelinter para probar sus archivos YAML de entorno, vea qué se rompe y contribuye.
Kubelinter tiene licencia bajo la licencia Apache 2.0.
Kubelinter está hecho con ❤️ por Stackrox.
Si está interesado en Kubelinter, o en cualquiera de las otras cosas interesantes que hacemos, ¡sepa que estamos contratando! Echa un vistazo a nuestras posiciones abiertas. ¡Nos encantaría saber de ti!