Capítulo 5.3 - Injeção nos Pods
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Injetar ConfigMaps como variáveis de ambiente
- Montar ConfigMaps como volumes
- Utilizar Secrets de forma segura
- Compreender os diferentes métodos de injeção
- Escolher o método adequado conforme o caso de uso
Visão Geral
Existem várias formas de injetar ConfigMaps e Secrets nos seus Pods. Cada método possui suas vantagens e casos de uso específicos.
Métodos de Injeção
1. Variáveis de Ambiente
A partir de ConfigMap
apiVersion: v1
kind: Pod
metadata:
name: configmap-env-pod
spec:
containers:
- name: app
image: nginx:1.20
env:
# Método 1: Uma chave específica
- name: DATABASE_URL
valueFrom:
configMapKeyRef:
name: app-config
key: database_url
# Método 2: Todas as chaves
- name: CONFIGMAP_ENV
valueFrom:
configMapRef:
name: app-config
envFrom:
# Método 3: Todas as chaves do ConfigMap
- configMapRef:
name: app-config
A partir de Secret
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
envFrom:
- secretRef:
name: db-secret
2. Volumes
ConfigMap como Volume
apiVersion: v1
kind: Pod
metadata:
name: configmap-volume-pod
spec:
containers:
- name: app
image: nginx:1.20
volumeMounts:
- name: config
mountPath: /etc/config
readOnly: true
volumes:
- name: config
configMap:
name: app-config
# Opcional: incluir apenas algumas chaves
items:
- key: database_url
path: db-url
- key: log_level
path: log-level
Secret como Volume
volumes:
- name: secrets
secret:
secretName: db-secret
defaultMode: 0400 # Permissões (somente leitura)
Exemplo Completo
apiVersion: v1
kind: Pod
metadata:
name: full-example-pod
spec:
containers:
- name: app
image: my-app:1.0
# Variáveis de ambiente a partir de ConfigMap
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: log_level
# Variáveis de ambiente a partir de Secret
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
# Volume ConfigMap
volumeMounts:
- name: config
mountPath: /etc/config
- name: secrets
mountPath: /etc/secrets
readOnly: true
volumes:
- name: config
configMap:
name: app-config
- name: secrets
secret:
secretName: db-secret
Diferenças: env vs volumeMounts
Variáveis de Ambiente (env)
Vantagens:
- Simples de usar
- Acessível via
$VARIABLE_NAME - Bom para valores simples
Limitações:
- Não suporta arquivos completos
- Limite de tamanho
Volumes
Vantagens:
- Arquivos completos
- Estrutura de diretórios
- Bom para arquivos de configuração
Casos de uso:
- Arquivos de configuração (nginx.conf, etc.)
- Certificados
- Scripts
Boas Práticas
ConfigMaps
- Use volumes para arquivos de configuração
- Use env para valores simples
- Não armazene dados sensíveis
Secrets
- Sempre utilize readOnly: true para volumes
- Nunca registre (log) os valores dos secrets
- Use permissões restritivas (defaultMode: 0400)
Resumo
Neste capítulo, você aprendeu:
Variáveis de ambiente: env e envFrom
Volumes: configMap e secret como volumes
Métodos: valueFrom, configMapRef, secretRef
Casos de uso: env para valores simples, volumes para arquivos
Segurança: readOnly, permissões restritivas para secrets
Próximos Passos
Capítulo 5.4: Boas Práticas
Lab 5.1: Criação e Utilização de ConfigMaps
Capítulo criado em: Dezembro 2024