Script automatizado para realizar assessment completo de clusters Kubernetes, coletando informações sobre infraestrutura, aplicações, segurança, performance e governança.
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
- 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)
- helm: Para coletar informações sobre releases Helm instalados
- metrics-server: Para coletar métricas de uso de recursos (CPU/memória)
# 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- 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)
- Namespaces
- Deployments, DaemonSets, StatefulSets
- CronJobs e Jobs
- ConfigMaps e Secrets
- Horizontal Pod Autoscalers (HPA)
- Vertical Pod Autoscalers (VPA)
- Pod Disruption Budgets (PDB)
- 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
:latestou sem tag específica - ImagePullSecrets (secrets para autenticação em registros privados)
- Imagens usadas por workloads (Deployments, DaemonSets, StatefulSets) com políticas
- Services (ClusterIP, NodePort, LoadBalancer)
- Ingress e Ingress Classes
- Ingress Controllers
- Endpoints
- 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
- 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
- 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)
- Status detalhado dos pods
- Pods com erros críticos
- Histórico de restarts
- Configuração de probes
- Persistent Volumes (PV)
- Persistent Volume Claims (PVC)
- Storage Classes e seus parâmetros
- Volume Snapshots (se disponível)
- Volume Snapshot Classes
- CNI Plugin em uso (Calico, Flannel, Weave, Cilium, Canal)
- Ingress Controllers
- Ingress Classes
- Certificates (cert-manager)
- Certificate Requests
- Issuers e ClusterIssuers
- Pods do etcd
- Releases Helm instalados
# Dar permissão de execução ao script
chmod +x kube-assess.sh
# Executar o script
./kube-assess.sh# Verificar contexto atual
kubectl config current-context
# Mudar para contexto desejado
kubectl config use-context <nome-do-contexto>
# Executar o script
./kube-assess.sh# 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
doneO 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)
.txt: Saída tabular legível.json: Dados estruturados para análise automatizada
- 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
- A execução pode levar alguns minutos em clusters grandes
- Comandos com
2>/dev/nullfalham silenciosamente se o recurso não existir - Alguns comandos requerem extensões específicas (metrics-server, cert-manager, etc.)
- 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
# Instalar kubectl conforme documentação oficial
# Verificar PATH
echo $PATHsudo apt install -y jq# Verificar configuração do kubeconfig
kubectl config view
# Testar conexão
kubectl cluster-info# Verificar permissões atuais
kubectl auth can-i --list
# Solicitar acesso adequado ao administrador do clusterApós a execução, você pode:
-
Revisar arquivos críticos primeiro:
pods_errors.txt- Pods com problemasevents.txt- Eventos recentespods_no_resources.json- Pods sem limits definidos
-
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
-
Comparar assessments ao longo do tempo para identificar tendências
Este script é fornecido "como está" para fins de assessment e diagnóstico de clusters Kubernetes.
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 🚀