Pular para o conteúdo principal

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