Capítulo 5.4 - Boas Práticas
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Aplicar boas práticas para ConfigMaps
- Gerenciar secrets de forma segura
- Compreender limites e restrições
- Implementar rotação de secrets
- Utilizar o External Secrets Operator
- Implementar criptografia em repouso
Introdução
As boas práticas para ConfigMaps e Secrets são essenciais para manter um ambiente Kubernetes seguro, sustentável e com boa performance.
ConfigMaps: Boas Práticas
1. Separação da Configuração
Não hardcode no código:
# ❌ Ruim
env:
- name: DATABASE_URL
value: "postgresql://localhost:5432/mydb"
# ✅ Bom
env:
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
2. Organização por Ambiente
Crie ConfigMaps separados por ambiente:
# Dev
kubectl create configmap app-config-dev --from-file=config-dev.properties
# Produção
kubectl create configmap app-config-prod --from-file=config-prod.properties
3. Versionamento
Use labels para versionar:
metadata:
name: app-config
labels:
version: v1
environment: production
Secrets: Boas Práticas
1. Nunca Comitar
❌ Nunca faça:
- Comitar secrets no Git
- Colocar secrets em texto claro nos YAML
- Compartilhar secrets por email/chat
✅ Faça:
- Use ferramentas de gestão de secrets
- Criptografe secrets em repouso
- Utilize o External Secrets Operator
2. Rotação Regular
# Criar um novo secret
kubectl create secret generic db-secret-v2 \
--from-literal=password=new-password
# Atualizar o Deployment
kubectl set env deployment/my-app \
DB_PASSWORD=$(kubectl get secret db-secret-v2 -o jsonpath='{.data.password}' | base64 -d)
# Remover o secret antigo
kubectl delete secret db-secret-v1
3. Criptografia em Repouso
O Kubernetes armazena secrets em base64 (sem criptografia por padrão).
Soluções:
- Ativar criptografia em repouso (EncryptionConfig)
- Usar ferramentas externas (Vault, AWS Secrets Manager)
Limites e Restrições
Tamanho Máximo
- ConfigMap: 1 MiB por entrada
- Secret: 1 MiB por entrada
- Total: Limitado pelo etcd (geralmente 1.5 MiB)
Performance
- ConfigMaps grandes podem deixar o start dos Pods mais lento
- Prefira vários ConfigMaps pequenos
External Secrets Operator
Para secrets externos (AWS, Azure, GCP, Vault):
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-secret
spec:
secretStoreRef:
name: aws-secrets-manager
kind: SecretStore
target:
name: db-secret
creationPolicy: Owner
data:
- secretKey: password
remoteRef:
key: production/database/password
Resumo
Neste capítulo, você aprendeu:
ConfigMaps: Separar config do código, organizar por ambiente
Secrets: Nunca comitar, rotação regular, criptografia
Limites: Tamanho máximo, considerações de performance
Ferramentas: External Secrets Operator para secrets externos
Segurança: Criptografia em repouso, gestão centralizada
Próximos Passos
Lab 5.1: Criação e Uso de ConfigMaps
Lab 5.2: Gestão de Secrets
Capítulo criado em: Dezembro 2024