ConfigMap e Secrets no Kubernetes separam configuração do código da aplicação. ConfigMaps armazenam valores não sensíveis; Secrets representam credenciais, tokens e chaves que exigem controles adicionais.
Essa separação facilita promover a mesma imagem entre ambientes sem reconstruir o container.
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
LOG_LEVEL: info
FEATURE_X: "false"Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
stringData:
DATABASE_URL: postgresql://...stringData facilita autoria, mas o Secret ainda precisa ser protegido no repositório e no pipeline.
Injetando variáveis
envFrom:
- configMapRef:
name: app-config
- secretRef:
name: app-secretNo Node.js, leia process.env, converta tipos e valide tudo na inicialização. Consulte Variáveis de Ambiente no Node.js.
Validação
const port = Number(process.env.PORT ?? 3000);
if (!Number.isInteger(port)) {
throw new Error('PORT inválida');
}
if (!process.env.DATABASE_URL) {
throw new Error('DATABASE_URL obrigatória');
}Base64 não é criptografia
O campo data de um Secret usa Base64, que apenas codifica. Proteja etcd com criptografia em repouso, RBAC mínimo e acesso auditado.
Montagem como volume
volumes:
- name: secrets
secret:
secretName: app-secret
volumeMounts:
- name: secrets
mountPath: /var/run/secrets/app
readOnly: trueArquivos montados podem ser atualizados pela plataforma. A aplicação precisa decidir se recarrega ou exige restart.
Variável ou arquivo
Variáveis são simples, mas permanecem no ambiente do processo. Arquivos funcionam melhor para certificados e material com múltiplas linhas. Em ambos os casos, evite logs e dumps.
Atualização e rollout
Alterar ConfigMap não reinicia automaticamente todos os pods quando o valor é injetado como variável. Use checksum no template, ferramenta de rollout ou processo explícito de atualização.
Imutabilidade
ConfigMaps e Secrets imutáveis evitam mudanças inesperadas e podem melhorar escalabilidade. Crie um novo nome por versão e atualize o Deployment.
Secret managers externos
Para rotação e auditoria avançadas, integre um secret manager usando CSI driver ou operador. Evite sincronizar segredos desnecessariamente para todos os namespaces.
Consulte Secret Management no Node.js.
RBAC
Conceda leitura apenas ao ServiceAccount necessário. Permissão para listar Secrets costuma ser mais ampla que o necessário.
Namespaces
Configurações são namespaced. Não use um namespace compartilhado para aplicações com níveis de confiança diferentes sem controles adequados.
Git
Não versione Secrets em texto puro. Para GitOps, use criptografia como SOPS ou soluções sealed, com chaves e acesso bem administrados.
Observabilidade
Registre versão ou checksum da configuração, nunca o valor secreto. Isso permite relacionar incidentes a mudanças sem vazar credenciais.
Erros comuns
- tratar Base64 como proteção;
- versionar Secret aberto;
- não validar variáveis;
- dar acesso amplo ao ServiceAccount;
- esperar restart automático;
- registrar configuração completa;
- usar Secret para dados públicos sem necessidade.
Conclusão
ConfigMap e Secrets no Kubernetes desacoplam configuração e imagem. Use ConfigMap para parâmetros não sensíveis, Secret para credenciais e um secret manager quando rotação e auditoria forem essenciais.
Consulte a documentação de ConfigMap e a documentação de Secrets do Kubernetes.


