
KubeLinter é uma ferramenta de análise estática que verifica arquivos YAML do Kubernetes e charts Helm para garantir que as aplicações representadas neles sigam as melhores práticas.
Análise estática para Kubernetes
O KubeLinter analisa arquivos YAML do Kubernetes, Helm charts e manifests do Kustomize e os verifica em relação a uma variedade de práticas recomendadas, com foco em prontidão para produção e segurança.
O KubeLinter executa verificações padrão criteriosas, projetadas para fornecer informações úteis sobre seus arquivos YAML do Kubernetes, Helm charts e manifests do Kustomize. Isso ajuda as equipes a verificar cedo e com frequência se há configurações incorretas de segurança e a seguir as práticas recomendadas de DevOps. Alguns exemplos comuns incluem executar contêineres como um usuário não root, aplicar o princípio do menor privilégio e armazenar informações confidenciais somente em secrets.
O KubeLinter é configurável, portanto, você pode ativar e desativar verificações, bem como criar suas próprias verificações personalizadas, dependendo das políticas que deseja seguir em sua organização.
Quando uma verificação de lint falha, o KubeLinter relata recomendações sobre como resolver possíveis problemas e retorna um código de saída diferente de zero.
Visite https://docs.kubelinter.io para obter documentação detalhada sobre instalação, uso e configuração do KubeLinter.
Os binários do KubeLinter podem ser encontrados aqui: https://github.com/stackrox/kube-linter/releases/latest
Para instalar usando Go, execute o seguinte comando:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
Caso contrário, baixe o binário mais recente em Releases e adicione-o ao seu PATH.
Para instalar usando Homebrew ou LinuxBrew, execute o seguinte comando:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
Instalar o KubeLinter a partir do código-fonte é tão simples quanto seguir estes passos:
Primeiro, clone o repositório do KubeLinter.
git clone [email protected]:stackrox/kube-linter.git
Depois, compile o código-fonte. Isso criará os arquivos binários do kube-linter para cada plataforma e os colocará na pasta .gobin.
make build
Por fim, você está pronto para começar a usar o KubeLinter. Verifique sua versão para garantir que o KubeLinter foi instalado com sucesso.
.gobin/kube-linter version
Há várias camadas de teste. Espera-se que cada camada seja aprovada.
Testes unitários com go:
make test
Testes de integração ponta a ponta:
make e2e-test
e, por fim, testes de integração ponta a ponta usando bats-core:
make e2e-bats
As imagens do KubeLinter são assinadas pelo cosign. Recomendamos verificar a imagem antes de usá-la.
Depois de instalar o cosign, você pode usar a chave pública do KubeLinter para verificar a imagem do KubeLinter com:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
O KubeLinter também fornece assinaturas keyless do cosign.
Você pode verificar a imagem do KubeLinter com:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
Executar o KubeLinter para fazer lint dos seus arquivos YAML requer apenas dois passos em sua forma mais básica.
Localize o arquivo YAML que deseja testar em relação às práticas recomendadas de segurança e prontidão para produção:
Execute o seguinte comando:
kube-linter lint /path/to/your/yaml.yaml
Considere o seguinte arquivo de especificação de pod de exemplo pod.yaml. Este arquivo tem dois problemas de prontidão para produção e um problema de segurança:
Problema de segurança:
Prontidão para produção:
Os limites de memória do contêiner não estão definidos, o que pode permitir que ele consuma memória em excesso
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
Copie o YAML acima para pod.yaml e faça o lint deste arquivo executando o seguinte comando:
kube-linter lint pod.yaml
O KubeLinter executa suas verificações padrão e relata recomendações. Abaixo está a saída do nosso 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
O KubeLinter suporta a geração de vários formatos de saída em uma única execução. Isso é útil para gerar relatórios legíveis por humanos e por máquina simultaneamente:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
Este comando irá:
kube-linter.sarifkube-linter.jsonNota: Vários formatos exigem flags --output explícitas. Para saída de formato único no stdout, use apenas uma flag --format sem --output.
Para obter mais detalhes sobre como usar vários formatos de saída, consulte a documentação.
Para saber mais sobre como usar e configurar o KubeLinter, visite a página de documentação.
A seguir estão tutoriais sobre o KubeLinter escritos por usuários. Se você tiver um que gostaria de adicionar a esta lista, envie um PR!
O KubeLinter é licenciado sob a Apache License 2.0.
Se você quiser interagir com a comunidade do KubeLinter, incluindo mantenedores e outros usuários, você pode entrar no workspace do Slack aqui.
Pode haver mudanças disruptivas no futuro no uso dos comandos, nas flags e nos formatos de arquivo de configuração. No entanto, incentivamos você a usar o KubeLinter para testar seus arquivos YAML de ambiente, ver o que quebra e contribuir.
Como lembrete, toda participação na comunidade do KubeLinter é regida pelo nosso código de conduta.
O KubeLinter foi criado com ❤️ pela StackRox e agora é mantido pela Red Hat.