ConfigMap e Secrets

O que são problemas relacionados a ConfigMap e Secrets?

Um problema com ConfigMap ou Secret ocorre quando um aplicativo não consegue ler sua configuração ou dados confidenciais, causando falhas na inicialização ou comportamento incorreto do aplicativo.

  • ConfigMap armazena configurações não sensíveis (por exemplo, configurações de aplicativos).

  • Secret armazena informações confidenciais (por exemplo, senhas, chaves de API, certificados).

Dica: Se um Pod iniciar, mas o aplicativo falhar com a mensagem "configuração não encontrada" ou "segredo não encontrado", verifique primeiro a configuração do ConfigMap ou do Secret.

Sintomas
  • O aplicativo não consegue ler a configuração.
  • O Pod não inicia ou trava.
  • Variáveis ​​de ambiente estão faltando.
  • Os arquivos de configuração montados não estão disponíveis.
  • Erros como "ConfigMap não encontrado" ou "Segredo não encontrado" .
Causas comuns
Causa Descrição
Caminho de Montagem Incorreto O ConfigMap ou Secret está montado no diretório errado.
Chave Incorreta A chave referenciada não existe.
ConfigMap ou Secret Ausente O recurso não existe no namespace.
env/envFrom Incorreto As variáveis ​​de ambiente estão sendo referenciadas incorretamente.
Restrição RBAC A conta de serviço não tem permissão para ler o Secret.
Como diagnosticar
  1. Verifique os ConfigMaps e os Segredos
BASH
kubectl get configmap -n <namespace>
kubectl get secret -n <namespace>

Verifique se os recursos necessários existem.

  1. Descreva o ConfigMap ou o Secret
BASH
kubectl describe configmap <configmap-name> -n <namespace>
kubectl describe secret <secret-name> -n <namespace>​​​​

Verificar:

  • Keys
  • Values (metadata dos Secrets)
  • Events
  1. Verificar a configuração do Pod
BASH
kubectl describe pod <nome-do-pod> -n <namespace>​​

Verificar:

  • env
  • envFrom
  • volumeMounts
  • volumes

Certifique-se de que o Pod faça referência ao ConfigMap ou Secret correto.

  1. Verificar arquivos montados
BASH
kubectl exec -it <nome-do-pod> -n <namespace> -- ls /caminho/para/montagem

Confirme se os arquivos esperados estão montados dentro do contêiner.

  1. Verifique RBAC (dos Secrets)
BASH
kubectl auth can-i get secrets -n <namespace> \
  --as=system:serviceaccount:<namespace>:<serviceaccount>

Certifique-se de que a ServiceAccount tenha permissão para acessar o Secret.

Como corrigir
  • Certifique-se de que os nomes das chaves e os caminhos de montagem (mount paths) estejam configurados corretamente.
  • Reinicie os Pods após atualizar o ConfigMap ou o Secret.
  • Recrie o ConfigMap ou o Secret caso estejam corrompidos.
  • Verifique as permissões RBAC para acesso a Secrets.
  • Confirme se o Pod referencia o ConfigMap ou Secret correto em env, envFrom ou volumeMounts.
Comandos importantes
BASH
kubectl get configmap -n <namespace>
kubectl get secret -n <namespace>
kubectl describe configmap <configmap-name> -n <namespace>
kubectl describe secret <secret-name> -n <namespace>
kubectl describe pod <pod-name> -n <namespace>
kubectl exec -it <pod-name> -n <namespace> -- ls /path/to/mount
kubectl auth can-i get secrets --as=system:serviceaccount:<namespace>:<serviceaccount> -n <namespace>
Pontos-chave
  • O ConfigMap armazena configurações não sensíveis, enquanto o Secret armazena dados sensíveis.

  • Sempre verifique se o recurso existe, se os nomes das chaves estão corretos e se o Pod o referencia corretamente usando env, envFrom ou volumeMounts.

  • Após atualizar um ConfigMap ou Secret, reinicie os Pods (a menos que sua aplicação suporte recarregamento dinâmico) para que as alterações entrem em vigor.

  • Se o acesso a um Secret falhar com um erro de Forbidden (Proibido), verifique a ServiceAccount e as permissões RBAC.

Próximo Artigo Artigo anterior