CURSOS / TECNOLOGIA / KUBERNETES: ARQUITETURA E ORQUESTRAÇÃO REAL (ETAPA 3 DE 4)
← Voltar aos cursos
CURSO PRÁTICO · ETAPA 3 DE 4 · V1.32

Configuração, Armazenamento e Roteamento

Centralize rotas HTTP com Ingress, entenda o registro automático no CoreDNS, provisione discos dinâmicos via CSI e StorageClass, separe código de dados com ConfigMaps/Secrets e domine StatefulSets.

Ilustração editorial de roteamento Ingress, descoberta DNS, volumes persistentes, ConfigMaps, Secrets e StatefulSets
6 Oficinas PráticasCobrindo os Capítulos 8, 10, 11, 12 e 13 de The Kubernetes Book (v1.32).
Simulador DNS & PVCVisualize FQDNs do CoreDNS, Headless Services e política ReclaimPolicy.
Padrões de ProduçãoExemplos reais com networking.k8s.io/v1 e volumeClaimTemplates.

Jornada do Curso (4 Etapas)

Você está na Etapa 3: Configuração, Armazenamento e Roteamento.

Oficinas de Roteamento, Config e Storage

Capítulos 8, 10, 11, 12 e 13 · K8s v1.32
Diagrama ilustrativo de StorageClass provisionando PVs vinculados a PVCs em um StatefulSet ordenado
Com StorageClass + volumeClaimTemplates, cada Pod de um StatefulSet mantém seu próprio volume persistente e identidade DNS fixa.
OFICINA 01 · CAPÍTULO 8

Ingress: Roteamento HTTP/HTTPS por Host e Path

Criar um Service LoadBalancer para cada microsserviço web sairia caro e desperdiçaria IPs públicos. O Ingress resolve isso expondo múltiplos Services internos através de um único Load Balancer na borda do cluster.

O modelo funciona em duas peças: um Ingress Controller (como o NGINX Ingress Controller instalado no cluster) e objetos Ingress (apiVersion: networking.k8s.io/v1) contendo as regras de roteamento por host e path.

Manifesto YAML · Exemplo de Ingress com roteamento por path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: portal-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: mcu.com
    http:
      paths:
      - path: /shield
        pathType: Prefix
        backend:
          service:
            name: svc-shield
            port:
              number: 8080
      - path: /hydra
        pathType: Prefix
        backend:
          service:
            name: svc-hydra
            port:
              number: 8080
Lembrete de laboratório: como vimos no Capítulo 3, clusters locais em Docker Desktop não provisionam Load Balancers de nuvem nativamente; para testar Ingress com IP público real, o livro recomenda um cluster gerenciado como o Linode Kubernetes Engine (LKE).
OFICINA 02 · CAPÍTULO 10

Service Discovery & CoreDNS Interno

Para que o serviço checkout converse com o serviço pagamentos, ele não pode depender de IPs fixos. Todo cluster Kubernetes executa um serviço de DNS interno (kube-dns / CoreDNS no Namespace kube-system) que atua como registro central.

  • Registro automático: ao criar um Service, seu nome e ClusterIP são gravados no DNS do cluster automaticamente.
  • /etc/resolv.conf pré-configurado: todo contêiner nasce apontando para o IP do kube-dns com domínios de busca do próprio Namespace.
  • Mesmo Namespace vs. Cross-Namespace: dentro do mesmo Namespace, basta chamar pelo nome curto (ex.: pagamentos). Entre Namespaces diferentes, use o FQDN completo: <service>.<namespace>.svc.cluster.local (ex.: ent.prod.svc.cluster.local).
Terminal · Inspecionar o DNS interno do cluster
kubectl get svc kube-dns -n kube-system
kubectl get pods -n kube-system -l k8s-app=kube-dns
OFICINA 03 · CAPÍTULO 11

Armazenamento Persistente: CSI, StorageClass, PV & PVC

Contêineres são efêmeros: se reiniciam, arquivos gravados na camada local se perdem. O Kubernetes resolve a persistência por meio da CSI (Container Storage Interface) e de uma tríade de objetos:

Arquitetura de armazenamento persistente no Kubernetes
Objeto Função Detalhe de Operação
StorageClass (SC) Define perfis de disco (ex.: SSD rápido, bloco padrão) e o provisionador CSI Permite provisionamento dinâmico automático e define reclaimPolicy (Delete ou Retain).
PersistentVolume (PV) Representa o volume real no provedor de storage Tem ciclo de vida independente do Pod; sobrevive a reinicializações.
PersistentVolumeClaim (PVC) O "ticket de pedido" de espaço e modo de acesso feito pelo app O Pod monta o PVC, que é vinculado (Bound) a um PV compatível.
OFICINA 04 · CAPÍTULO 12

ConfigMaps: Desacoplando Código de Configuração

Empacotar configurações dentro da imagem Docker obriga você a reconstruir a imagem a cada troca de URL ou porta. Os ConfigMaps armazenam pares chave-valor não sensíveis fora do contêiner e podem ser injetados de três maneiras:

  1. Variáveis de ambiente (env / envFrom): simples, porém o Pod não enxerga atualizações sem reiniciar.
  2. Comandos de inicialização (args / command): injeta valores na linha de partida do contêiner.
  3. Volumes montados (volumes + volumeMounts): monta chaves como arquivos (ex.: /etc/config/app.conf) e propaga atualizações em tempo real para contêineres em execução.
Terminal · Criar e inspecionar um ConfigMap
kubectl create configmap testmap1 --from-literal=env=prod --from-literal=port=8080
kubectl get cm testmap1 -o yaml
OFICINA 05 · CAPÍTULO 12

Secrets: Credenciais, Base64 e Cuidados Reais

Nunca guarde senhas, tokens ou certificados TLS em um ConfigMap. Para dados sensíveis, use Secrets.

Mito perigoso sobre Secrets: os valores em um Secret YAML aparecem em Base64, que é apenas codificação (fácil de decodificar com base64 -d), não criptografia. Segurança real exige: criptografia em repouso no etcd, TLS em trânsito, montagem em memória (tmpfs) e controle de acesso estrito via RBAC (tema da Etapa 4).
Terminal · Criar um Secret genérico e listar chaves montadas
kubectl create secret generic creds --from-literal=username=admin --from-literal=password=S3nhaForte
kubectl get secret creds -o yaml
OFICINA 06 · CAPÍTULO 13

StatefulSets: Identidade Fixa, Headless Service & Storage

Deployments tratam Pods como gado intercambiável (web-7f8b-x9k). Já bancos de dados e sistemas distribuídos (como MongoDB ou Kafka) exigem identidades previsíveis e storage individual persistente. É para isso que existe o StatefulSet:

  • Nomes ordenados e estáveis: tkb-sts-0, tkb-sts-1, tkb-sts-2. Se tkb-sts-1 cair, o novo Pod nasce exatamente como tkb-sts-1.
  • Criação e encerramento sequenciais: sobe um Pod por vez e espera ficar Ready antes do próximo; na remoção, encerra na ordem inversa respeitando terminationGracePeriodSeconds.
  • Headless Service (clusterIP: None): chamado de governing service, não tem IP virtual de balanceamento ("sem cabeça"); o DNS retorna o endereço individual de cada Pod (ex.: tkb-sts-0.mongo-prod.default.svc.cluster.local).
  • volumeClaimTemplates: cria automaticamente um PVC exclusivo e "grudento" para cada réplica.
LABORATÓRIO INTERATIVO · CAPÍTULOS 10, 11 E 13

Simulador de Service Discovery (DNS) & Storage

Combine o tipo de Workload, Namespaces e reclaimPolicy para gerar o endereço CoreDNS exato e prever o comportamento do volume.

Nome DNS Recomendado mongo-0.mongo-svc.prod.svc.cluster.local
Identidade do Pod Fixa (mongo-0, mongo-1…)
Ao Deletar o PVC PV e Disco Preservados
Como cliente (dev) e serviço (prod) estão em Namespaces diferentes, use o FQDN completo no CoreDNS. Com Retain, o disco na nuvem não é apagado automaticamente ao remover o PVC.
VERIFICAÇÃO DE DOMÍNIO · 4 QUESTÕES

Teste Rápido da Etapa 3

Valide os conceitos dos Capítulos 8, 10, 11, 12 e 13 antes de avançar para Segurança e Recursos Avançados.

1. Qual a principal vantagem de usar um objeto Ingress em vez de vários Services do tipo LoadBalancer?

2. Um Pod no Namespace dev precisa acessar o Service api no Namespace prod. Qual FQDN completo garante a resolução no CoreDNS?

3. Por que não devemos considerar um Secret padrão seguro apenas por estar em Base64?

4. Qual característica define um Headless Service usado como governing service de um StatefulSet?

CONCLUSÃO DA ETAPA 3

Checklist de Prontidão & Exportação

Marque cada marco concluído; seu progresso fica salvo no navegador.

ÚLTIMA PARADA · ETAPA 4 DE 4

Recursos Avançados e Segurança

Conclua a jornada nos Capítulos 9, 14, 15, 16 e 17: WebAssembly (Wasm) no Kubernetes, RBAC e segurança da API, modelagem de ameaças STRIDE e defesa em produção.

Ir para Etapa 4 →