Uma coleção tudo em um de ferramentas para executar o revestimento, validação comum, análise de código estático, varredura de segurança, testes de configuração, auditoria, kustomize compilação e configuração de execução a seco para a Kubernetes estruturados YAML manifesta. Projetado para ser executado em um processo de IC (integração contínua) como parte da validação e teste, especialmente útil para clusters de Kubernetes que são gerenciados por meio de gitops.
Não consegui encontrar uma única imagem do Docker que continha todas as principais ferramentas de validação (das quais existem várias!) Para validar os arquivos de manifestos Kubernetes YAML como parte de um processo de CI/CD antes de ser implantado automaticamente em Kubernetes. Este repositório não foi projetado para cobrir como usar essas ferramentas individuais, embora contenha alguns exemplos básicos de uso. Os links abaixo devem levá -lo a documentação para obter mais detalhes sobre o uso de cada ferramenta. Achamos útil usar várias ferramentas durante nosso processo de validação e digitalização de IC, porque algumas ferramentas verificam certos aspectos que outros não podem.
Pegue a imagem mais recente dos pacotes do GitHub ou do Docker Hub.
Você pode executar a imagem diretamente no Docker ou ver abaixo para obter exemplos de uso de CI/CD.
docker run --rm -it docker.pkg.github.com/highwayoflife/kubernetes-validation-tools/image:latest /bin/bashdocker run --rm -it deck15/kubeval-tools:latest /bin/bash| Ferramenta | Versão | Propósito | Descrição |
|---|---|---|---|
| Kubectl | 1.23.5 | CLI | Kubernetes cli. Pode ser usado com --dry-run=client para validar manifestos |
| Leme | 3.8.1 | CLI | O Helm ajuda a gerenciar aplicativos Kubernetes - Definir, instalar e atualizar os aplicativos Kubernetes como gráficos de hains. Executar como uma ferramenta de validação, pode ser executado como helm lint ou helm template . |
| Yamllint | 1.26.3 | Linter | Linter básico para arquivos YAML |
| Kubeval | 0.16.1 | Validação | A ferramenta para validar um Kubernetes YAML se manifesta. Não funciona com CRDs. |
| Kustomize | 4.5.3 | Compilar | Maneira livre de modelo de personalizar configurações de aplicativos. Útil para validar as configurações Kustomize. |
| Config fiado | 1.6.0 | Validação | Validar arquivos de configuração usando regras personalizadas especificadas no YAML. |
| Conftest | 0,30.0 | Testes | Utilitário para ajudá -lo a escrever testes contra dados de configuração estruturados. |
| Pontuação de Kube | 1.14.0 | Segurança | Ferramenta que executa a análise de código estático das definições de objetos Kubernetes. |
| Polaris | 5.1.0 | Validação | Identifica erros de configuração de implantação de Kubernetes |
| Linter Kube | 0.2.6 | Segurança | Linter e ferramenta de análise estática que verifica Kubernetes manifesta |
| Kubeconform | 0.4.13 | Validação | Kubernetes manifesta a ferramenta de validação como Kubeval com suporte à CRD |
| Kubeaudit | 0.16.0 | Segurança | Clusters de auditoria ou manifestar arquivos para preocupações de segurança |
| DatRee | 1.0.15 | Política | Verifique se Kubernetes manifesta e os gráficos de comando são válidos e siga suas políticas. |
| Kubesec | 2.11.4 | Segurança | Análise de risco de segurança para Kubernetes Recursos |
Idealmente, o contêiner Kubernetes-Validation-Tools deve ser usado em um processo de compilação de IC para validar, digitalizar e fins Kubernetes, configurações e gráficos de manifesta ou leme. É o ideal executar essas ferramentas como parte de um fluxo de trabalho de integração contínuo do Gitops.
Use o especificador de contêiner para executar uma etapa dentro de um contêiner. Especifique as execuções como o ambiente de host apropriado para o seu contêiner (ubuntu-lates para contêineres Linux, o Windows mais para contêineres do Windows). Por exemplo:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container Este exemplo é útil se Jenkins estiver executando agentes em um cluster de Kubernetes: Jenkinsfile
pipeline {
agent {
kubernetes {
cloud ' build-pipeline '
defaultContainer ' validate '
inheritFrom ' jnlp '
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: validate
image: deck15/kubeval-tools:latest
command:
- cat
tty: true
"""
} // kubernetes
} // agent
stages {
steps {
container( ' validate ' ) {
sh ' kubeconform -summary manifests.yaml '
}
}
}
}pipeline {
agent {
docker { image ' deck15/kubeval-tools:latest ' }
} // agent
.. .
}.drone.yml kind : pipeline
type : docker
name : default
steps :
- name : validate
image : deck15/kubeval-tools:latest
commands :
- kubeconform -summary manifests.yaml .circleci/config.yml version : 2.0
jobs :
build :
docker :
- image : deck15/kubeval-tools:latest .gitlab-ci.yamlVocê pode definir uma imagem usada para todos os trabalhos e uma lista de serviços que deseja usar durante o tempo de execução:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml O Kubeaudit é uma ferramenta de linha de comando e um pacote Go para auditar clusters de Kubernetes para várias preocupações de segurança diferentes, como:
Kubeaudit garante que você implante recipientes seguros!
Kubeval é uma ferramenta para validar um arquivo de configuração Kubernetes YAML ou JSON. Ele faz isso usando esquemas gerados a partir da especificação Kubernetes OpenAPI e, portanto, pode validar esquemas para várias versões de Kubernetes.
Kubeconform é uma ferramenta de validação de manifesta Kubernetes. Construa -o no seu CI para validar sua configuração Kubernetes!
É inspirado por, contém código e foi projetado para ficar perto de Kubeval, mas com as seguintes melhorias:
Validar um único arquivo válido
kubeconform fixtures/valid.yaml
echo $?
0Validando um único arquivo inválido, definindo saída para JSON e imprimindo um resumo
kubeconform -summary -output json fixtures/invalid.yaml
{
" resources " : [
{
" filename " : " fixtures/invalid.yaml " ,
" kind " : " ReplicationController " ,
" version " : " v1 " ,
" status " : " INVALID " ,
" msg " : " Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string "
}
],
" summary " : {
" valid " : 0,
" invalid " : 1,
" errors " : 0,
" skipped " : 0
}
}
echo $?
1Passando manifestos via stdin
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0Validando uma pasta, aumentando o número de trabalhadores paralelos
kubeconform -summary -n 16 fixtures
fixtures/crd_schema.yaml - CustomResourceDefinition trainingjobs.sagemaker.aws.amazon.com failed validation: could not find schema for CustomResourceDefinition
fixtures/invalid.yaml - ReplicationController bob is invalid: Invalid type. Expected: [integer,null], given: string
[...]
Summary: 65 resources found in 34 files - Valid: 55, Invalid: 2, Errors: 8 Skipped: 0O CONFTEST é um utilitário para ajudá -lo a escrever testes contra dados de configuração estruturados. Por exemplo, você pode escrever testes para suas configurações de Kubernetes, ou definições de pipeline tekton, código Terraform, configurações sem servidor ou qualquer outro dados estruturados.
O Conftest depende do idioma Rego do agente de política aberta para escrever as afirmações.
Yamllint é um linhador para arquivos YAML.
O Yamllint não apenas verifica a validade da sintaxe, mas para estranheza como a repetição -chave e problemas de cosméticos, como comprimento de linhas, espaços de direita, recuo, etc.
O Kustomize permite que você personalize arquivos YAML brutos e sem modelos para vários propósitos, deixando a YAML original intocada e utilizável como está.
Kustomize alvos Kubernetes; Ele entende e pode corrigir objetos da API do estilo Kubernetes. É como fazer, pois o que faz é declarado em um arquivo, e é como sed, na medida em que emite texto editado. Kustomize atravessa um Kubernetes manifesto para adicionar, remover ou atualizar as opções de configuração sem marcar.
O Kustomize é particularmente útil para usar com ferramentas como Argocd, FluxCD ou Spinnaker para permitir manifestos compartilhados (recursos) em vários clusters ou ambientes sem duplicar o código. O Kustomize permite substituir, mesclar e outros recursos de configuração.
Kubectl é a versão da CLI da Kubernetes de uma faca do exército suíço e pode fazer muitas coisas. Uma dessas coisas é poder fazer um validador a seco em um arquivo YAML.
$ kubectl create --dry-run --validate -f invalid.yamlComandos de compensação a serem usados no CI para fico ou validar gráficos de compensação.
Examine um gráfico para possíveis problemas.
OBSERVAÇÃO:
helm lintpor si só é insuficiente para validar adequadamente um gráfico de comando. Recomenda -se usar o modelohelm lintehelm templateem combinação com uma das outras ferramentas de validação manifestas. (Veja o exemplo abaixo)
Este comando leva um caminho para um gráfico e executa uma série de testes para verificar se o gráfico está bem formado.
Se o Linter encontrar coisas que farão com que o gráfico falhe na instalação, ele emitirá mensagens [ERROR] . Se encontrar questões que quebram com a convenção ou recomendação, ele emitirá mensagens [WARNING] .
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasConfig-Lint é uma ferramenta de linha de comando para validar arquivos de configuração usando regras especificadas no YAML. Os arquivos de configuração podem ser um dos vários formatos: Terraform, JSON, YAML, com suporte para Kubernetes. Existem regras internas fornecidas para o Terraform e os arquivos personalizados podem ser usados para outros formatos.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score, uma ferramenta que executa a análise de código estático de suas definições de objetos Kubernetes. A saída é uma lista de recomendações do que você pode melhorar para tornar seu aplicativo mais seguro e resiliente.
O Kube-Score pode ser executado em seu ambiente CI/CD e sairá com o Código de Exit 1 se um erro crítico tiver sido encontrado. O nível de gatilho pode ser alterado para aviso com o argumento-One-One on-Warning.
A entrada para o Kube-Score deve ser todos os aplicativos que você implanta no mesmo espaço para o nome do melhor resultado.
helm template my-app | kube-score score -kustomize build . | kube-score score -kube-score score my-app/ * .yaml
kube-score score my-app/deployment.yaml my-app/service.yamlPolaris, Polaris executa uma variedade de verificações para garantir que as vagens e controladores do Kubernetes sejam configurados usando as melhores práticas. O Polaris é incluído como uma ferramenta CLI para testar arquivos YAML locais, por exemplo, como parte de um processo de CI/CD.
Polaris pode ser executado em alguns modos diferentes:
Você pode executar auditorias na linha de comando e ver a saída como JSON, YAML ou uma pontuação bruta:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92As auditorias podem ser executadas contra um diretório local ou arquivo YAML em vez de um cluster:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -Você também pode executar a auditoria em um único recurso em vez de todo o cluster:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " Você pode integrar o Polaris ao CI/CD para repositórios que contêm infraestrutura como código. Por exemplo, falhar se Polaris detectar algum problema no nível de perigo ou se a pontuação cair abaixo de 90%:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90Para mais opções de uso para a CLI, consulte o Documento de Uso
O Kube Linter é uma ferramenta de análise estática que verifica os arquivos YAML da Kubernetes e os gráficos de compensação para garantir que os aplicativos representados neles aderem às melhores práticas. Kubelinter aceita arquivos YAML como entrada e executa uma série de cheques neles. Se encontrar algum problema, os relatar e retornar um código de saída diferente de zero.
O Datree é uma ferramenta CLI que pode ser usada localmente ou no seu CI/CD para garantir que os Kubernetes Kubernetes se manifestem e os gráficos de comando sigam as melhores práticas, bem como as políticas da sua organização. Ele vem com 30 regras testadas por batalha, juntamente com o suporte integrado para a validação de esquema YAML e Kubernetes.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec é uma ferramenta de varredura de segurança para vagens de Kubernetes, implantações, daemonsetes e estados.
kubesec scan manifest.yamlKubesec retorna um retorna uma matriz JSON e pode digitalizar vários documentos YAML em um único arquivo de entrada.
[
{
"object" : " Pod/security-context-demo.default " ,
"valid" : true ,
"message" : " Failed with a score of -30 points " ,
"score" : -30 ,
"scoring" : {
"critical" : [
{
"selector" : " containers[] .securityContext .capabilities .add == SYS_ADMIN " ,
"reason" : " CAP_SYS_ADMIN is the most privileged capability and should always be avoided " ,
"points" : -30
}
],
"advise" : [
{
"selector" : " containers[] .securityContext .runAsNonRoot == true " ,
"reason" : " Force the running image to run as a non-root user to ensure least privilege " ,
"points" : 1
},
{
// ...
}
]
}
}
]PRS Bem -vindo! Confira as diretrizes contribuintes para obter mais informações.