Skip to content

devopsvanilla/kube-assess

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Kubernetes Assessment Script

Script automatizado para realizar assessment completo de clusters Kubernetes, coletando informações sobre infraestrutura, aplicações, segurança, performance e governança.

🎯 Propósito

Este script foi desenvolvido para facilitar a avaliação e auditoria de clusters Kubernetes, gerando um relatório abrangente com informações essenciais para:

  • Análise de Infraestrutura: Avaliar a saúde e configuração dos nodes
  • Auditoria de Segurança: Identificar vulnerabilidades e configurações inseguras
  • Assessment de Aplicações: Verificar workloads, recursos e configurações
  • Análise de Performance: Identificar gargalos e problemas de recursos
  • Governança e Compliance: Validar políticas e padrões estabelecidos
  • Troubleshooting: Diagnosticar problemas e identificar pods com falhas

📋 Requisitos

Pré-requisitos Obrigatórios

  • kubectl: Cliente de linha de comando do Kubernetes
  • jq: Processador JSON para linha de comando
  • Acesso ao cluster: Configuração válida do kubeconfig
  • Permissões: Acesso de leitura aos recursos do cluster (recomendado: cluster-admin ou view)

Requisitos Opcionais

  • helm: Para coletar informações sobre releases Helm instalados
  • metrics-server: Para coletar métricas de uso de recursos (CPU/memória)

Instalação dos Requisitos (Ubuntu/Debian)

# Instalar kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# Instalar jq
sudo apt update && sudo apt install -y jq

# Instalar helm (opcional)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

🔍 Informações Coletadas

🔧 Infraestrutura

  • Versão do cluster Kubernetes
  • Lista e status dos nodes
  • Componentes do control plane
  • Taints e labels dos nodes
  • Alocação de recursos (CPU/memória)

📦 Workloads e Recursos

  • Namespaces
  • Deployments, DaemonSets, StatefulSets
  • CronJobs e Jobs
  • ConfigMaps e Secrets
  • Horizontal Pod Autoscalers (HPA)
  • Vertical Pod Autoscalers (VPA)
  • Pod Disruption Budgets (PDB)

🐳 Imagens e Registros

  • Lista completa de imagens em uso no cluster
  • Imagens por pod com container e ImagePullPolicy
  • Contagem de uso por registro (docker.io, gcr.io, quay.io, ECR, ACR, etc.)
  • Identificação de imagens usando tag :latest ou sem tag específica
  • ImagePullSecrets (secrets para autenticação em registros privados)
  • Imagens usadas por workloads (Deployments, DaemonSets, StatefulSets) com políticas

🌐 Exposição de Aplicações

  • Services (ClusterIP, NodePort, LoadBalancer)
  • Ingress e Ingress Classes
  • Ingress Controllers
  • Endpoints

🔒 Segurança

  • Roles e RoleBindings (RBAC)
  • ClusterRoles e ClusterRoleBindings
  • Service Accounts
  • Network Policies
  • Pod Security Policies (deprecated)
  • Secrets com configurações em plaintext
  • Service Accounts com automount habilitado
  • Labels de segurança por namespace

📊 Observabilidade

  • Uso de recursos por node (top nodes)
  • Uso de recursos por pod (top pods)
  • Eventos do cluster
  • Pods com problemas (não Running/Succeeded)
  • Status do Metrics Server
  • Pods com erros (CrashLoopBackOff, Error, OOMKilled)
  • Contagem de restarts por pod
  • Pods sem resource limits/requests definidos
  • Readiness e Liveness probes

⚙️ Governança

  • Resource Quotas
  • Limit Ranges
  • Validating Webhooks
  • Mutating Webhooks
  • API Resources disponíveis
  • API Versions
  • Custom Resource Definitions (CRDs)
  • Políticas Kyverno (se instalado)
  • Constraints OPA Gatekeeper (se instalado)

🚀 Performance e Saúde

  • Status detalhado dos pods
  • Pods com erros críticos
  • Histórico de restarts
  • Configuração de probes

💾 Armazenamento

  • Persistent Volumes (PV)
  • Persistent Volume Claims (PVC)
  • Storage Classes e seus parâmetros
  • Volume Snapshots (se disponível)
  • Volume Snapshot Classes

🌐 Rede Avançada

  • CNI Plugin em uso (Calico, Flannel, Weave, Cilium, Canal)
  • Ingress Controllers
  • Ingress Classes

🔐 Certificados

  • Certificates (cert-manager)
  • Certificate Requests
  • Issuers e ClusterIssuers

🗄️ Componentes Especiais

  • Pods do etcd
  • Releases Helm instalados

🚀 Como Executar

Execução Básica

# Dar permissão de execução ao script
chmod +x kube-assess.sh

# Executar o script
./kube-assess.sh

Execução com Contexto Específico

# Verificar contexto atual
kubectl config current-context

# Mudar para contexto desejado
kubectl config use-context <nome-do-contexto>

# Executar o script
./kube-assess.sh

Execução em Múltiplos Clusters

# Loop para executar em todos os contextos
for context in $(kubectl config get-contexts -o name); do
    echo "Coletando dados do cluster: $context"
    kubectl config use-context $context
    ./kube-assess.sh
done

📂 Estrutura de Saída

O script cria um diretório com timestamp contendo todos os arquivos coletados:

k8s_assessment_YYYYMMDD_HHMMSS/
├── cluster_version.txt
├── nodes.txt
├── nodes_describe.txt
├── nodes_taints_labels.json
├── deployments.txt
├── pod_images.json
├── images_list.txt
├── image_registries_count.txt
├── images_using_latest.json
├── image_pull_secrets.json
├── workload_images.json
├── services.txt
├── ingress.txt
├── rbac_roles.txt
├── network_policies.txt
├── events.txt
├── pods_status.txt
├── pods_errors.txt
├── persistent_volumes.txt
├── storage_classes.txt
├── helm_releases.txt
└── ... (e muitos outros arquivos)

Tipos de Arquivo

  • .txt: Saída tabular legível
  • .json: Dados estruturados para análise automatizada

⚠️ Observações Importantes

Segurança

  • O script não modifica nenhum recurso do cluster (apenas leitura)
  • Alguns arquivos podem conter informações sensíveis (secrets, configurações)
  • Não compartilhe os arquivos gerados sem revisar o conteúdo
  • Considere criptografar ou proteger o diretório de saída

Performance

  • A execução pode levar alguns minutos em clusters grandes
  • Comandos com 2>/dev/null falham silenciosamente se o recurso não existir
  • Alguns comandos requerem extensões específicas (metrics-server, cert-manager, etc.)

Permissões

  • O script requer permissões de leitura em todos os recursos
  • Alguns comandos podem falhar se o usuário não tiver permissões suficientes
  • Para assessment completo, recomenda-se role cluster-admin ou view

🔧 Troubleshooting

Erro: "kubectl: command not found"

# Instalar kubectl conforme documentação oficial
# Verificar PATH
echo $PATH

Erro: "jq: command not found"

sudo apt install -y jq

Erro: "The connection to the server was refused"

# Verificar configuração do kubeconfig
kubectl config view

# Testar conexão
kubectl cluster-info

Erro de Permissão

# Verificar permissões atuais
kubectl auth can-i --list

# Solicitar acesso adequado ao administrador do cluster

📊 Análise dos Resultados

Após a execução, você pode:

  1. Revisar arquivos críticos primeiro:

    • pods_errors.txt - Pods com problemas
    • events.txt - Eventos recentes
    • pods_no_resources.json - Pods sem limits definidos
  2. Usar ferramentas de análise:

    # Contar pods por namespace
    grep -E "^[a-z]" pods_status.txt | awk '{print $1}' | sort | uniq -c
    
    # Identificar pods com muitos restarts
    jq -r 'select(.restarts > 5)' pod_restarts.json
    
    # Listar registros de imagens mais usados
    cat image_registries_count.txt
    
    # Identificar imagens usando :latest
    jq -r '.pod + " - " + (.images | join(", "))' images_using_latest.json
  3. Comparar assessments ao longo do tempo para identificar tendências

📝 Licença

Este script é fornecido "como está" para fins de assessment e diagnóstico de clusters Kubernetes.

🤝 Contribuições

Sugestões e melhorias são bem-vindas! Considere adicionar:

  • Análise de logs de pods com problemas
  • Verificação de imagens vulneráveis (integração com scanners)
  • Análise de registros de imagens não confiáveis
  • Validação de best practices
  • Geração de relatório consolidado em HTML/PDF

Desenvolvido para facilitar o assessment e manutenção de clusters Kubernetes 🚀

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages