Pular para o conteúdo principal

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